mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-21 03:05:26 -04:00
Check proper live range in extendPHIRanges
The function extendPHIRanges checks the main range of the original live interval, even when dealing with a subrange. This could also lead to an assert when the subrange is not live at the extension point, but the main range is. To avoid this, check the corresponding subrange of the original live range, instead of always checking the main range. Review (as a part of a bigger set of changes): https://reviews.llvm.org/D26359 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287571 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1092,13 +1092,19 @@ static bool removeDeadSegment(SlotIndex Def, LiveRange &LR) {
|
||||
}
|
||||
|
||||
void SplitEditor::extendPHIRange(MachineBasicBlock &B, LiveRangeCalc &LRC,
|
||||
LiveRange &LR, ArrayRef<SlotIndex> Undefs) {
|
||||
LiveRange &LR, LaneBitmask LM,
|
||||
ArrayRef<SlotIndex> Undefs) {
|
||||
for (MachineBasicBlock *P : B.predecessors()) {
|
||||
SlotIndex End = LIS.getMBBEndIdx(P);
|
||||
SlotIndex LastUse = End.getPrevSlot();
|
||||
// The predecessor may not have a live-out value. That is OK, like an
|
||||
// undef PHI operand.
|
||||
if (Edit->getParent().liveAt(LastUse))
|
||||
LiveInterval &PLI = Edit->getParent();
|
||||
// Need the cast because the inputs to ?: would otherwise be deemed
|
||||
// "incompatible": SubRange vs LiveInterval.
|
||||
LiveRange &PSR = (LM != ~0u) ? getSubRangeForMask(LM, PLI)
|
||||
: static_cast<LiveRange&>(PLI);
|
||||
if (PSR.liveAt(LastUse))
|
||||
LRC.extend(LR, End, /*PhysReg=*/0, Undefs);
|
||||
}
|
||||
}
|
||||
@@ -1120,7 +1126,7 @@ void SplitEditor::extendPHIKillRanges() {
|
||||
LiveRangeCalc &LRC = getLRCalc(RegIdx);
|
||||
MachineBasicBlock &B = *LIS.getMBBFromIndex(V->def);
|
||||
if (!removeDeadSegment(V->def, LI))
|
||||
extendPHIRange(B, LRC, LI, /*Undefs=*/{});
|
||||
extendPHIRange(B, LRC, LI, ~0u, /*Undefs=*/{});
|
||||
}
|
||||
|
||||
SmallVector<SlotIndex, 4> Undefs;
|
||||
@@ -1141,7 +1147,7 @@ void SplitEditor::extendPHIKillRanges() {
|
||||
&LIS.getVNInfoAllocator());
|
||||
Undefs.clear();
|
||||
LI.computeSubRangeUndefs(Undefs, PS.LaneMask, MRI, *LIS.getSlotIndexes());
|
||||
extendPHIRange(B, SubLRC, S, Undefs);
|
||||
extendPHIRange(B, SubLRC, S, PS.LaneMask, Undefs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user