RegisterCoalescer: Turn some impossible conditions into asserts

llvm-svn: 225500
This commit is contained in:
Matthias Braun 2015-01-09 03:01:23 +00:00
parent 52d0f16e1b
commit 6588b145fc
1 changed files with 9 additions and 15 deletions

View File

@ -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);
} }
} }