mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-18 14:31:27 +00:00
Revert r225500, it leads to infinite loops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225590 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
47abf0e3da
commit
3073d3960a
@ -621,12 +621,13 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||
// the example above.
|
||||
SlotIndex CopyIdx = LIS->getInstructionIndex(CopyMI).getRegSlot();
|
||||
VNInfo *BValNo = IntB.getVNInfoAt(CopyIdx);
|
||||
assert(BValNo != nullptr && BValNo->def == CopyIdx);
|
||||
if (!BValNo || BValNo->def != CopyIdx)
|
||||
return false;
|
||||
|
||||
// AValNo is the value number in A that defines the copy, A3 in the example.
|
||||
VNInfo *AValNo = IntA.getVNInfoAt(CopyIdx.getRegSlot(true));
|
||||
assert(AValNo && !AValNo->isUnused() && "COPY source not live");
|
||||
if (AValNo->isPHIDef())
|
||||
assert(AValNo && "COPY source not live");
|
||||
if (AValNo->isPHIDef() || AValNo->isUnused())
|
||||
return false;
|
||||
MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def);
|
||||
if (!DefMI)
|
||||
@ -708,8 +709,6 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||
UE = MRI->use_end();
|
||||
UI != UE;) {
|
||||
MachineOperand &UseMO = *UI;
|
||||
if (UseMO.isUndef())
|
||||
continue;
|
||||
MachineInstr *UseMI = UseMO.getParent();
|
||||
++UI;
|
||||
if (UseMI->isDebugValue()) {
|
||||
@ -720,8 +719,7 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||
}
|
||||
SlotIndex UseIdx = LIS->getInstructionIndex(UseMI).getRegSlot(true);
|
||||
LiveInterval::iterator US = IntA.FindSegmentContaining(UseIdx);
|
||||
assert(US != IntA.end() && "Use must be live");
|
||||
if (US->valno != AValNo)
|
||||
if (US == IntA.end() || US->valno != AValNo)
|
||||
continue;
|
||||
// Kill flags are no longer accurate. They are recomputed after RA.
|
||||
UseMO.setIsKill(false);
|
||||
@ -772,7 +770,11 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||
SlotIndex AIdx = CopyIdx.getRegSlot(true);
|
||||
for (LiveInterval::SubRange &SA : IntA.subranges()) {
|
||||
VNInfo *ASubValNo = SA.getVNInfoAt(AIdx);
|
||||
assert(ASubValNo != nullptr);
|
||||
if (ASubValNo == nullptr) {
|
||||
DEBUG(dbgs() << "No A Range at " << AIdx << " with mask "
|
||||
<< format("%04X", SA.LaneMask) << "\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned AMask = SA.LaneMask;
|
||||
for (LiveInterval::SubRange &SB : IntB.subranges()) {
|
||||
@ -824,7 +826,11 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||
SlotIndex AIdx = CopyIdx.getRegSlot(true);
|
||||
for (LiveInterval::SubRange &SA : IntA.subranges()) {
|
||||
VNInfo *ASubValNo = SA.getVNInfoAt(AIdx);
|
||||
assert(ASubValNo != nullptr);
|
||||
if (ASubValNo == nullptr) {
|
||||
DEBUG(dbgs() << "No A Range at " << AIdx << " with mask "
|
||||
<< format("%04X", SA.LaneMask) << "\n");
|
||||
continue;
|
||||
}
|
||||
SA.removeValNo(ASubValNo);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user