RegisterCoalescer: Turn some impossible conditions into asserts
llvm-svn: 225500
This commit is contained in:
parent
52d0f16e1b
commit
6588b145fc
|
@ -622,13 +622,12 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||||
// BValNo is a value number in B that is defined by a copy from A. 'B1' in
|
// BValNo is a value number in B that is defined by a copy from A. 'B1' in
|
||||||
// the example above.
|
// the example above.
|
||||||
VNInfo *BValNo = IntB.getVNInfoAt(CopyIdx);
|
VNInfo *BValNo = IntB.getVNInfoAt(CopyIdx);
|
||||||
if (!BValNo || BValNo->def != CopyIdx)
|
assert(BValNo != nullptr && BValNo->def == CopyIdx);
|
||||||
return false;
|
|
||||||
|
|
||||||
// AValNo is the value number in A that defines the copy, A3 in the example.
|
// AValNo is the value number in A that defines the copy, A3 in the example.
|
||||||
VNInfo *AValNo = IntA.getVNInfoAt(CopyIdx.getRegSlot(true));
|
VNInfo *AValNo = IntA.getVNInfoAt(CopyIdx.getRegSlot(true));
|
||||||
assert(AValNo && "COPY source not live");
|
assert(AValNo && !AValNo->isUnused() && "COPY source not live");
|
||||||
if (AValNo->isPHIDef() || AValNo->isUnused())
|
if (AValNo->isPHIDef())
|
||||||
return false;
|
return false;
|
||||||
MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def);
|
MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def);
|
||||||
if (!DefMI)
|
if (!DefMI)
|
||||||
|
@ -711,6 +710,8 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||||
for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(IntA.reg),
|
for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(IntA.reg),
|
||||||
UE = MRI->use_end(); UI != UE;) {
|
UE = MRI->use_end(); UI != UE;) {
|
||||||
MachineOperand &UseMO = *UI;
|
MachineOperand &UseMO = *UI;
|
||||||
|
if (UseMO.isUndef())
|
||||||
|
continue;
|
||||||
MachineInstr *UseMI = UseMO.getParent();
|
MachineInstr *UseMI = UseMO.getParent();
|
||||||
++UI;
|
++UI;
|
||||||
if (UseMI->isDebugValue()) {
|
if (UseMI->isDebugValue()) {
|
||||||
|
@ -721,7 +722,8 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||||
}
|
}
|
||||||
SlotIndex UseIdx = LIS->getInstructionIndex(UseMI).getRegSlot(true);
|
SlotIndex UseIdx = LIS->getInstructionIndex(UseMI).getRegSlot(true);
|
||||||
LiveInterval::iterator US = IntA.FindSegmentContaining(UseIdx);
|
LiveInterval::iterator US = IntA.FindSegmentContaining(UseIdx);
|
||||||
if (US == IntA.end() || US->valno != AValNo)
|
assert(US != IntA.end() && "Use must be live");
|
||||||
|
if (US->valno != AValNo)
|
||||||
continue;
|
continue;
|
||||||
// Kill flags are no longer accurate. They are recomputed after RA.
|
// Kill flags are no longer accurate. They are recomputed after RA.
|
||||||
UseMO.setIsKill(false);
|
UseMO.setIsKill(false);
|
||||||
|
@ -770,11 +772,7 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||||
SlotIndex AIdx = CopyIdx.getRegSlot(true);
|
SlotIndex AIdx = CopyIdx.getRegSlot(true);
|
||||||
for (LiveInterval::SubRange &SA : IntA.subranges()) {
|
for (LiveInterval::SubRange &SA : IntA.subranges()) {
|
||||||
VNInfo *ASubValNo = SA.getVNInfoAt(AIdx);
|
VNInfo *ASubValNo = SA.getVNInfoAt(AIdx);
|
||||||
if (ASubValNo == nullptr) {
|
assert(ASubValNo != nullptr);
|
||||||
DEBUG(dbgs() << "No A Range at " << AIdx << " with mask "
|
|
||||||
<< format("%04X", SA.LaneMask) << "\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned AMask = SA.LaneMask;
|
unsigned AMask = SA.LaneMask;
|
||||||
for (LiveInterval::SubRange &SB : IntB.subranges()) {
|
for (LiveInterval::SubRange &SB : IntB.subranges()) {
|
||||||
|
@ -816,11 +814,7 @@ bool RegisterCoalescer::removeCopyByCommutingDef(const CoalescerPair &CP,
|
||||||
SlotIndex AIdx = CopyIdx.getRegSlot(true);
|
SlotIndex AIdx = CopyIdx.getRegSlot(true);
|
||||||
for (LiveInterval::SubRange &SA : IntA.subranges()) {
|
for (LiveInterval::SubRange &SA : IntA.subranges()) {
|
||||||
VNInfo *ASubValNo = SA.getVNInfoAt(AIdx);
|
VNInfo *ASubValNo = SA.getVNInfoAt(AIdx);
|
||||||
if (ASubValNo == nullptr) {
|
assert(ASubValNo != nullptr);
|
||||||
DEBUG(dbgs() << "No A Range at " << AIdx << " with mask "
|
|
||||||
<< format("%04X", SA.LaneMask) << "\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
SA.removeValNo(ASubValNo);
|
SA.removeValNo(ASubValNo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue