@@ -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.
320321void 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