@@ -1080,10 +1080,10 @@ class LiveIntervals::HMEditor {
1080
1080
for (LiveInterval::SubRange &S : LI.subranges ()) {
1081
1081
if ((S.LaneMask & LaneMask).none ())
1082
1082
continue ;
1083
- updateRange (S, Reg, S.LaneMask );
1083
+ updateRange (S, VirtRegOrUnit ( Reg) , S.LaneMask );
1084
1084
}
1085
1085
}
1086
- updateRange (LI, Reg, LaneBitmask::getNone ());
1086
+ updateRange (LI, VirtRegOrUnit ( Reg) , LaneBitmask::getNone ());
1087
1087
// If main range has a hole and we are moving a subrange use across
1088
1088
// the hole updateRange() cannot properly handle it since it only
1089
1089
// gets the LiveRange and not the whole LiveInterval. As a result
@@ -1110,7 +1110,7 @@ class LiveIntervals::HMEditor {
1110
1110
// precomputed live range.
1111
1111
for (MCRegUnit Unit : TRI.regunits (Reg.asMCReg ()))
1112
1112
if (LiveRange *LR = getRegUnitLI (Unit))
1113
- updateRange (*LR, Unit, LaneBitmask::getNone ());
1113
+ updateRange (*LR, VirtRegOrUnit ( Unit) , LaneBitmask::getNone ());
1114
1114
}
1115
1115
if (hasRegMask)
1116
1116
updateRegMaskSlots ();
@@ -1119,24 +1119,25 @@ class LiveIntervals::HMEditor {
1119
1119
private:
1120
1120
// / Update a single live range, assuming an instruction has been moved from
1121
1121
// / OldIdx to NewIdx.
1122
- void updateRange (LiveRange &LR, Register Reg, LaneBitmask LaneMask) {
1122
+ void updateRange (LiveRange &LR, VirtRegOrUnit VRegOrUnit,
1123
+ LaneBitmask LaneMask) {
1123
1124
if (!Updated.insert (&LR).second )
1124
1125
return ;
1125
1126
LLVM_DEBUG ({
1126
1127
dbgs () << " " ;
1127
- if (Reg. isVirtual ()) {
1128
- dbgs () << printReg (Reg );
1128
+ if (VRegOrUnit. isVirtualReg ()) {
1129
+ dbgs () << printReg (VRegOrUnit. asVirtualReg () );
1129
1130
if (LaneMask.any ())
1130
1131
dbgs () << " L" << PrintLaneMask (LaneMask);
1131
1132
} else {
1132
- dbgs () << printRegUnit (Reg , &TRI);
1133
+ dbgs () << printRegUnit (VRegOrUnit. asMCRegUnit () , &TRI);
1133
1134
}
1134
1135
dbgs () << " :\t " << LR << ' \n ' ;
1135
1136
});
1136
1137
if (SlotIndex::isEarlierInstr (OldIdx, NewIdx))
1137
1138
handleMoveDown (LR);
1138
1139
else
1139
- handleMoveUp (LR, Reg , LaneMask);
1140
+ handleMoveUp (LR, VRegOrUnit , LaneMask);
1140
1141
LLVM_DEBUG (dbgs () << " -->\t " << LR << ' \n ' );
1141
1142
assert (LR.verify ());
1142
1143
}
@@ -1316,7 +1317,8 @@ class LiveIntervals::HMEditor {
1316
1317
1317
1318
// / Update LR to reflect an instruction has been moved upwards from OldIdx
1318
1319
// / to NewIdx (NewIdx < OldIdx).
1319
- void handleMoveUp (LiveRange &LR, Register Reg, LaneBitmask LaneMask) {
1320
+ void handleMoveUp (LiveRange &LR, VirtRegOrUnit VRegOrUnit,
1321
+ LaneBitmask LaneMask) {
1320
1322
LiveRange::iterator E = LR.end ();
1321
1323
// Segment going into OldIdx.
1322
1324
LiveRange::iterator OldIdxIn = LR.find (OldIdx.getBaseIndex ());
@@ -1340,7 +1342,7 @@ class LiveIntervals::HMEditor {
1340
1342
SlotIndex DefBeforeOldIdx
1341
1343
= std::max (OldIdxIn->start .getDeadSlot (),
1342
1344
NewIdx.getRegSlot (OldIdxIn->end .isEarlyClobber ()));
1343
- OldIdxIn->end = findLastUseBefore (DefBeforeOldIdx, Reg , LaneMask);
1345
+ OldIdxIn->end = findLastUseBefore (DefBeforeOldIdx, VRegOrUnit , LaneMask);
1344
1346
1345
1347
// Did we have a Def at OldIdx? If not we are done now.
1346
1348
OldIdxOut = std::next (OldIdxIn);
@@ -1498,11 +1500,12 @@ class LiveIntervals::HMEditor {
1498
1500
}
1499
1501
1500
1502
// Return the last use of reg between NewIdx and OldIdx.
1501
- SlotIndex findLastUseBefore (SlotIndex Before, Register Reg ,
1503
+ SlotIndex findLastUseBefore (SlotIndex Before, VirtRegOrUnit VRegOrUnit ,
1502
1504
LaneBitmask LaneMask) {
1503
- if (Reg. isVirtual ()) {
1505
+ if (VRegOrUnit. isVirtualReg ()) {
1504
1506
SlotIndex LastUse = Before;
1505
- for (MachineOperand &MO : MRI.use_nodbg_operands (Reg)) {
1507
+ for (MachineOperand &MO :
1508
+ MRI.use_nodbg_operands (VRegOrUnit.asVirtualReg ())) {
1506
1509
if (MO.isUndef ())
1507
1510
continue ;
1508
1511
unsigned SubReg = MO.getSubReg ();
@@ -1545,7 +1548,7 @@ class LiveIntervals::HMEditor {
1545
1548
// Check if MII uses Reg.
1546
1549
for (MIBundleOperands MO (*MII); MO.isValid (); ++MO)
1547
1550
if (MO->isReg () && !MO->isUndef () && MO->getReg ().isPhysical () &&
1548
- TRI.hasRegUnit (MO->getReg (), Reg ))
1551
+ TRI.hasRegUnit (MO->getReg (), VRegOrUnit. asMCRegUnit () ))
1549
1552
return Idx.getRegSlot ();
1550
1553
}
1551
1554
// Didn't reach Before. It must be the first instruction in the block.
0 commit comments