Skip to content

Commit 9bbc7f2

Browse files
committed
Fix one more case in AMDGPU
1 parent 8ad4422 commit 9bbc7f2

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,9 @@ class SIWholeQuadMode {
188188

189189
void markInstruction(MachineInstr &MI, char Flag,
190190
std::vector<WorkItem> &Worklist);
191-
void markDefs(const MachineInstr &UseMI, LiveRange &LR, Register Reg,
192-
unsigned SubReg, char Flag, std::vector<WorkItem> &Worklist);
191+
void markDefs(const MachineInstr &UseMI, LiveRange &LR,
192+
VirtRegOrUnit VRegOrUnit, unsigned SubReg, char Flag,
193+
std::vector<WorkItem> &Worklist);
193194
void markOperand(const MachineInstr &MI, const MachineOperand &Op, char Flag,
194195
std::vector<WorkItem> &Worklist);
195196
void markInstructionUses(const MachineInstr &MI, char Flag,
@@ -318,8 +319,8 @@ void SIWholeQuadMode::markInstruction(MachineInstr &MI, char Flag,
318319

319320
/// Mark all relevant definitions of register \p Reg in usage \p UseMI.
320321
void SIWholeQuadMode::markDefs(const MachineInstr &UseMI, LiveRange &LR,
321-
Register Reg, unsigned SubReg, char Flag,
322-
std::vector<WorkItem> &Worklist) {
322+
VirtRegOrUnit VRegOrUnit, unsigned SubReg,
323+
char Flag, std::vector<WorkItem> &Worklist) {
323324
LLVM_DEBUG(dbgs() << "markDefs " << PrintState(Flag) << ": " << UseMI);
324325

325326
LiveQueryResult UseLRQ = LR.Query(LIS->getInstructionIndex(UseMI));
@@ -331,8 +332,9 @@ void SIWholeQuadMode::markDefs(const MachineInstr &UseMI, LiveRange &LR,
331332
// cover registers.
332333
const LaneBitmask UseLanes =
333334
SubReg ? TRI->getSubRegIndexLaneMask(SubReg)
334-
: (Reg.isVirtual() ? MRI->getMaxLaneMaskForVReg(Reg)
335-
: LaneBitmask::getNone());
335+
: (VRegOrUnit.isVirtualReg()
336+
? MRI->getMaxLaneMaskForVReg(VRegOrUnit.asVirtualReg())
337+
: LaneBitmask::getNone());
336338

337339
// Perform a depth-first iteration of the LiveRange graph marking defs.
338340
// Stop processing of a given branch when all use lanes have been defined.
@@ -382,11 +384,11 @@ void SIWholeQuadMode::markDefs(const MachineInstr &UseMI, LiveRange &LR,
382384
MachineInstr *MI = LIS->getInstructionFromIndex(Value->def);
383385
assert(MI && "Def has no defining instruction");
384386

385-
if (Reg.isVirtual()) {
387+
if (VRegOrUnit.isVirtualReg()) {
386388
// Iterate over all operands to find relevant definitions
387389
bool HasDef = false;
388390
for (const MachineOperand &Op : MI->all_defs()) {
389-
if (Op.getReg() != Reg)
391+
if (Op.getReg() != VRegOrUnit.asVirtualReg())
390392
continue;
391393

392394
// Compute lanes defined and overlap with use
@@ -453,7 +455,7 @@ void SIWholeQuadMode::markOperand(const MachineInstr &MI,
453455
<< " for " << MI);
454456
if (Reg.isVirtual()) {
455457
LiveRange &LR = LIS->getInterval(Reg);
456-
markDefs(MI, LR, Reg, Op.getSubReg(), Flag, Worklist);
458+
markDefs(MI, LR, VirtRegOrUnit(Reg), Op.getSubReg(), Flag, Worklist);
457459
} else {
458460
// Handle physical registers that we need to track; this is mostly relevant
459461
// for VCC, which can appear as the (implicit) input of a uniform branch,
@@ -462,7 +464,8 @@ void SIWholeQuadMode::markOperand(const MachineInstr &MI,
462464
LiveRange &LR = LIS->getRegUnit(Unit);
463465
const VNInfo *Value = LR.Query(LIS->getInstructionIndex(MI)).valueIn();
464466
if (Value)
465-
markDefs(MI, LR, Unit, AMDGPU::NoSubRegister, Flag, Worklist);
467+
markDefs(MI, LR, VirtRegOrUnit(Unit), AMDGPU::NoSubRegister, Flag,
468+
Worklist);
466469
}
467470
}
468471
}

0 commit comments

Comments
 (0)