mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-18 10:25:25 +00:00
[AMDGPU] Fix read-undef flags when schedule is reverted
If two subregs of the same register are defined and we need to revert schedule changing def order, we will end up with both instructions having def,read-undef flags because adjustLaneLiveness() will only set this flag but will not remove it. Fix this by removing read-undef flags before calling adjustLaneLiveness. Differential Revision: https://reviews.llvm.org/D30428 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296484 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3d50c64c92
commit
b57bf30b47
@ -348,19 +348,22 @@ void GCNScheduleDAGMILive::schedule() {
|
||||
if (MI->getIterator() != RegionEnd) {
|
||||
BB->remove(MI);
|
||||
BB->insert(RegionEnd, MI);
|
||||
if (LIS) {
|
||||
if (LIS)
|
||||
LIS->handleMove(*MI, true);
|
||||
RegisterOperands RegOpers;
|
||||
RegOpers.collect(*MI, *TRI, MRI, ShouldTrackLaneMasks, false);
|
||||
if (ShouldTrackLaneMasks) {
|
||||
// Adjust liveness and add missing dead+read-undef flags.
|
||||
SlotIndex SlotIdx = LIS->getInstructionIndex(*MI).getRegSlot();
|
||||
RegOpers.adjustLaneLiveness(*LIS, MRI, SlotIdx, MI);
|
||||
} else {
|
||||
// Adjust for missing dead-def flags.
|
||||
RegOpers.detectDeadDefs(*MI, *LIS);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Reset read-undef flags and update them later.
|
||||
for (auto &Op : MI->operands())
|
||||
if (Op.isReg() && Op.isDef())
|
||||
Op.setIsUndef(false);
|
||||
RegisterOperands RegOpers;
|
||||
RegOpers.collect(*MI, *TRI, MRI, ShouldTrackLaneMasks, false);
|
||||
if (ShouldTrackLaneMasks) {
|
||||
// Adjust liveness and add missing dead+read-undef flags.
|
||||
SlotIndex SlotIdx = LIS->getInstructionIndex(*MI).getRegSlot();
|
||||
RegOpers.adjustLaneLiveness(*LIS, MRI, SlotIdx, MI);
|
||||
} else {
|
||||
// Adjust for missing dead-def flags.
|
||||
RegOpers.detectDeadDefs(*MI, *LIS);
|
||||
}
|
||||
RegionEnd = MI->getIterator();
|
||||
++RegionEnd;
|
||||
|
Loading…
x
Reference in New Issue
Block a user