mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 23:29:20 +00:00
Fix for PR1596: AdjustCopiesBackFrom() should conservatively check if any of its sub-registers may overlap with the interval of the copy that's being coalesced.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41084 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c91f0b8068
commit
dc5294fd83
@ -125,6 +125,19 @@ bool SimpleRegisterCoalescing::AdjustCopiesBackFrom(LiveInterval &IntA, LiveInte
|
||||
// live-range starts. If there are no intervening live ranges between them in
|
||||
// IntB, we can merge them.
|
||||
if (ValLR+1 != BLR) return false;
|
||||
|
||||
// If a live interval is a physical register, conservatively check if any
|
||||
// of its sub-registers is overlapping the live interval of the virtual
|
||||
// register. If so, do not coalesce.
|
||||
if (MRegisterInfo::isPhysicalRegister(IntB.reg) &&
|
||||
*mri_->getSubRegisters(IntB.reg)) {
|
||||
for (const unsigned* SR = mri_->getSubRegisters(IntB.reg); *SR; ++SR)
|
||||
if (li_->hasInterval(*SR) && IntA.overlaps(li_->getInterval(*SR))) {
|
||||
DOUT << "Interfere with sub-register ";
|
||||
DEBUG(li_->getInterval(*SR).print(DOUT, mri_));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
DOUT << "\nExtending: "; IntB.print(DOUT, mri_);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user