@@ -102,10 +102,10 @@ namespace {
102
102
bool isFunctionRegBankSelected;
103
103
bool isFunctionSelected;
104
104
105
- using RegVector = SmallVector<unsigned , 16 >;
105
+ using RegVector = SmallVector<Register , 16 >;
106
106
using RegMaskVector = SmallVector<const uint32_t *, 4 >;
107
- using RegSet = DenseSet<unsigned >;
108
- using RegMap = DenseMap<unsigned , const MachineInstr *>;
107
+ using RegSet = DenseSet<Register >;
108
+ using RegMap = DenseMap<Register , const MachineInstr *>;
109
109
using BlockSet = SmallPtrSet<const MachineBasicBlock *, 8 >;
110
110
111
111
const MachineInstr *FirstNonPHI;
@@ -120,10 +120,10 @@ namespace {
120
120
SlotIndex lastIndex;
121
121
122
122
// Add Reg and any sub-registers to RV
123
- void addRegWithSubRegs (RegVector &RV, unsigned Reg) {
123
+ void addRegWithSubRegs (RegVector &RV, Register Reg) {
124
124
RV.push_back (Reg);
125
- if (Register::isPhysicalRegister ( Reg))
126
- for (const MCPhysReg &SubReg : TRI->subregs (Reg))
125
+ if (Reg. isPhysical ( ))
126
+ for (const MCPhysReg &SubReg : TRI->subregs (Reg. asMCReg () ))
127
127
RV.push_back (SubReg);
128
128
}
129
129
@@ -159,8 +159,8 @@ namespace {
159
159
160
160
// Add register to vregsRequired if it belongs there. Return true if
161
161
// anything changed.
162
- bool addRequired (unsigned Reg) {
163
- if (!Register::isVirtualRegister ( Reg))
162
+ bool addRequired (Register Reg) {
163
+ if (!Reg. isVirtual ( ))
164
164
return false ;
165
165
if (regsLiveOut.count (Reg))
166
166
return false ;
@@ -170,7 +170,7 @@ namespace {
170
170
// Same for a full set.
171
171
bool addRequired (const RegSet &RS) {
172
172
bool Changed = false ;
173
- for (unsigned Reg : RS)
173
+ for (Register Reg : RS)
174
174
Changed |= addRequired (Reg);
175
175
return Changed;
176
176
}
@@ -184,21 +184,21 @@ namespace {
184
184
}
185
185
186
186
// Live-out registers are either in regsLiveOut or vregsPassed.
187
- bool isLiveOut (unsigned Reg) const {
187
+ bool isLiveOut (Register Reg) const {
188
188
return regsLiveOut.count (Reg) || vregsPassed.count (Reg);
189
189
}
190
190
};
191
191
192
192
// Extra register info per MBB.
193
193
DenseMap<const MachineBasicBlock*, BBInfo> MBBInfoMap;
194
194
195
- bool isReserved (unsigned Reg) {
196
- return Reg < regsReserved.size () && regsReserved.test (Reg);
195
+ bool isReserved (Register Reg) {
196
+ return Reg. id () < regsReserved.size () && regsReserved.test (Reg. id () );
197
197
}
198
198
199
- bool isAllocatable (unsigned Reg) const {
200
- return Reg < TRI->getNumRegs () && TRI->isInAllocatableClass (Reg) &&
201
- !regsReserved.test (Reg);
199
+ bool isAllocatable (Register Reg) const {
200
+ return Reg. id () < TRI->getNumRegs () && TRI->isInAllocatableClass (Reg) &&
201
+ !regsReserved.test (Reg. id () );
202
202
}
203
203
204
204
// Analysis information if available
@@ -226,26 +226,27 @@ namespace {
226
226
LLT MOVRegType = LLT{});
227
227
228
228
void report_context (const LiveInterval &LI) const ;
229
- void report_context (const LiveRange &LR, unsigned VRegUnit,
229
+ void report_context (const LiveRange &LR, Register VRegUnit,
230
230
LaneBitmask LaneMask) const ;
231
231
void report_context (const LiveRange::Segment &S) const ;
232
232
void report_context (const VNInfo &VNI) const ;
233
233
void report_context (SlotIndex Pos) const ;
234
234
void report_context (MCPhysReg PhysReg) const ;
235
235
void report_context_liverange (const LiveRange &LR) const ;
236
236
void report_context_lanemask (LaneBitmask LaneMask) const ;
237
- void report_context_vreg (unsigned VReg) const ;
238
- void report_context_vreg_regunit (unsigned VRegOrUnit) const ;
237
+ void report_context_vreg (Register VReg) const ;
238
+ void report_context_vreg_regunit (Register VRegOrUnit) const ;
239
239
240
240
void verifyInlineAsm (const MachineInstr *MI);
241
241
242
242
void checkLiveness (const MachineOperand *MO, unsigned MONum);
243
243
void checkLivenessAtUse (const MachineOperand *MO, unsigned MONum,
244
- SlotIndex UseIdx, const LiveRange &LR, unsigned VRegOrUnit,
244
+ SlotIndex UseIdx, const LiveRange &LR,
245
+ Register VRegOrUnit,
245
246
LaneBitmask LaneMask = LaneBitmask::getNone());
246
247
void checkLivenessAtDef (const MachineOperand *MO, unsigned MONum,
247
- SlotIndex DefIdx, const LiveRange &LR, unsigned VRegOrUnit,
248
- bool SubRangeCheck = false ,
248
+ SlotIndex DefIdx, const LiveRange &LR,
249
+ Register VRegOrUnit, bool SubRangeCheck = false ,
249
250
LaneBitmask LaneMask = LaneBitmask::getNone());
250
251
251
252
void markReachable (const MachineBasicBlock *MBB);
@@ -256,12 +257,12 @@ namespace {
256
257
void verifyLiveVariables ();
257
258
void verifyLiveIntervals ();
258
259
void verifyLiveInterval (const LiveInterval&);
259
- void verifyLiveRangeValue (const LiveRange&, const VNInfo*, unsigned ,
260
+ void verifyLiveRangeValue (const LiveRange &, const VNInfo *, Register ,
260
261
LaneBitmask);
261
- void verifyLiveRangeSegment (const LiveRange&,
262
- const LiveRange::const_iterator I, unsigned ,
262
+ void verifyLiveRangeSegment (const LiveRange &,
263
+ const LiveRange::const_iterator I, Register ,
263
264
LaneBitmask);
264
- void verifyLiveRange (const LiveRange&, unsigned ,
265
+ void verifyLiveRange (const LiveRange &, Register ,
265
266
LaneBitmask LaneMask = LaneBitmask::getNone());
266
267
267
268
void verifyStackFrame ();
@@ -508,7 +509,7 @@ void MachineVerifier::report_context(const LiveInterval &LI) const {
508
509
errs () << " - interval: " << LI << ' \n ' ;
509
510
}
510
511
511
- void MachineVerifier::report_context (const LiveRange &LR, unsigned VRegUnit,
512
+ void MachineVerifier::report_context (const LiveRange &LR, Register VRegUnit,
512
513
LaneBitmask LaneMask) const {
513
514
report_context_liverange (LR);
514
515
report_context_vreg_regunit (VRegUnit);
@@ -532,11 +533,11 @@ void MachineVerifier::report_context(MCPhysReg PReg) const {
532
533
errs () << " - p. register: " << printReg (PReg, TRI) << ' \n ' ;
533
534
}
534
535
535
- void MachineVerifier::report_context_vreg (unsigned VReg) const {
536
+ void MachineVerifier::report_context_vreg (Register VReg) const {
536
537
errs () << " - v. register: " << printReg (VReg, TRI) << ' \n ' ;
537
538
}
538
539
539
- void MachineVerifier::report_context_vreg_regunit (unsigned VRegOrUnit) const {
540
+ void MachineVerifier::report_context_vreg_regunit (Register VRegOrUnit) const {
540
541
if (Register::isVirtualRegister (VRegOrUnit)) {
541
542
report_context_vreg (VRegOrUnit);
542
543
} else {
@@ -1958,8 +1959,10 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
1958
1959
}
1959
1960
1960
1961
void MachineVerifier::checkLivenessAtUse (const MachineOperand *MO,
1961
- unsigned MONum, SlotIndex UseIdx, const LiveRange &LR, unsigned VRegOrUnit,
1962
- LaneBitmask LaneMask) {
1962
+ unsigned MONum, SlotIndex UseIdx,
1963
+ const LiveRange &LR,
1964
+ Register VRegOrUnit,
1965
+ LaneBitmask LaneMask) {
1963
1966
LiveQueryResult LRQ = LR.Query (UseIdx);
1964
1967
// Check if we have a segment at the use, note however that we only need one
1965
1968
// live subregister range, the others may be dead.
@@ -1980,8 +1983,11 @@ void MachineVerifier::checkLivenessAtUse(const MachineOperand *MO,
1980
1983
}
1981
1984
1982
1985
void MachineVerifier::checkLivenessAtDef (const MachineOperand *MO,
1983
- unsigned MONum, SlotIndex DefIdx, const LiveRange &LR, unsigned VRegOrUnit,
1984
- bool SubRangeCheck, LaneBitmask LaneMask) {
1986
+ unsigned MONum, SlotIndex DefIdx,
1987
+ const LiveRange &LR,
1988
+ Register VRegOrUnit,
1989
+ bool SubRangeCheck,
1990
+ LaneBitmask LaneMask) {
1985
1991
if (const VNInfo *VNI = LR.getVNInfoAt (DefIdx)) {
1986
1992
assert (VNI && " NULL valno is not allowed" );
1987
1993
if (VNI->def != DefIdx) {
@@ -2025,7 +2031,7 @@ void MachineVerifier::checkLivenessAtDef(const MachineOperand *MO,
2025
2031
2026
2032
void MachineVerifier::checkLiveness (const MachineOperand *MO, unsigned MONum) {
2027
2033
const MachineInstr *MI = MO->getParent ();
2028
- const unsigned Reg = MO->getReg ();
2034
+ const Register Reg = MO->getReg ();
2029
2035
2030
2036
// Both use and def operands can read a register.
2031
2037
if (MO->readsReg ()) {
@@ -2043,8 +2049,9 @@ void MachineVerifier::checkLiveness(const MachineOperand *MO, unsigned MONum) {
2043
2049
if (LiveInts && !LiveInts->isNotInMIMap (*MI)) {
2044
2050
SlotIndex UseIdx = LiveInts->getInstructionIndex (*MI);
2045
2051
// Check the cached regunit intervals.
2046
- if (Register::isPhysicalRegister (Reg) && !isReserved (Reg)) {
2047
- for (MCRegUnitIterator Units (Reg, TRI); Units.isValid (); ++Units) {
2052
+ if (Reg.isPhysical () && !isReserved (Reg)) {
2053
+ for (MCRegUnitIterator Units (Reg.asMCReg (), TRI); Units.isValid ();
2054
+ ++Units) {
2048
2055
if (MRI->isReservedRegUnit (*Units))
2049
2056
continue ;
2050
2057
if (const LiveRange *LR = LiveInts->getCachedRegUnit (*Units))
@@ -2190,9 +2197,9 @@ void MachineVerifier::visitMachineBundleAfter(const MachineInstr *MI) {
2190
2197
// Kill any masked registers.
2191
2198
while (!regMasks.empty ()) {
2192
2199
const uint32_t *Mask = regMasks.pop_back_val ();
2193
- for (unsigned Reg : regsLive)
2194
- if (Register::isPhysicalRegister ( Reg) &&
2195
- MachineOperand::clobbersPhysReg (Mask, Reg))
2200
+ for (Register Reg : regsLive)
2201
+ if (Reg. isPhysical ( ) &&
2202
+ MachineOperand::clobbersPhysReg (Mask, Reg. asMCReg () ))
2196
2203
regsDead.push_back (Reg);
2197
2204
}
2198
2205
set_subtract (regsLive, regsDead); regsDead.clear ();
@@ -2225,21 +2232,21 @@ struct VRegFilter {
2225
2232
// Add elements to the filter itself. \pre Input set \p FromRegSet must have
2226
2233
// no duplicates. Both virtual and physical registers are fine.
2227
2234
template <typename RegSetT> void add (const RegSetT &FromRegSet) {
2228
- SmallVector<unsigned , 0 > VRegsBuffer;
2235
+ SmallVector<Register , 0 > VRegsBuffer;
2229
2236
filterAndAdd (FromRegSet, VRegsBuffer);
2230
2237
}
2231
2238
// Filter \p FromRegSet through the filter and append passed elements into \p
2232
2239
// ToVRegs. All elements appended are then added to the filter itself.
2233
2240
// \returns true if anything changed.
2234
2241
template <typename RegSetT>
2235
2242
bool filterAndAdd (const RegSetT &FromRegSet,
2236
- SmallVectorImpl<unsigned > &ToVRegs) {
2243
+ SmallVectorImpl<Register > &ToVRegs) {
2237
2244
unsigned SparseUniverse = Sparse.size ();
2238
2245
unsigned NewSparseUniverse = SparseUniverse;
2239
2246
unsigned NewDenseSize = Dense.size ();
2240
2247
size_t Begin = ToVRegs.size ();
2241
- for (unsigned Reg : FromRegSet) {
2242
- if (!Register::isVirtualRegister ( Reg))
2248
+ for (Register Reg : FromRegSet) {
2249
+ if (!Reg. isVirtual ( ))
2243
2250
continue ;
2244
2251
unsigned Index = Register::virtReg2Index (Reg);
2245
2252
if (Index < SparseUniverseMax) {
@@ -2263,7 +2270,7 @@ struct VRegFilter {
2263
2270
Sparse.resize (NewSparseUniverse);
2264
2271
Dense.reserve (NewDenseSize);
2265
2272
for (unsigned I = Begin; I < End; ++I) {
2266
- unsigned Reg = ToVRegs[I];
2273
+ Register Reg = ToVRegs[I];
2267
2274
unsigned Index = Register::virtReg2Index (Reg);
2268
2275
if (Index < SparseUniverseMax)
2269
2276
Sparse.set (Index);
@@ -2296,7 +2303,7 @@ struct VRegFilter {
2296
2303
// universe). filter_b implicitly contains all physical registers at all times.
2297
2304
class FilteringVRegSet {
2298
2305
VRegFilter Filter;
2299
- SmallVector<unsigned , 0 > VRegs;
2306
+ SmallVector<Register , 0 > VRegs;
2300
2307
2301
2308
public:
2302
2309
// Set-up the filter_b. \pre Input register set \p RS must have no duplicates.
@@ -2474,7 +2481,7 @@ void MachineVerifier::visitMachineFunctionAfter() {
2474
2481
// Check for killed virtual registers that should be live out.
2475
2482
for (const auto &MBB : *MF) {
2476
2483
BBInfo &MInfo = MBBInfoMap[&MBB];
2477
- for (unsigned VReg : MInfo.vregsRequired )
2484
+ for (Register VReg : MInfo.vregsRequired )
2478
2485
if (MInfo.regsKilled .count (VReg)) {
2479
2486
report (" Virtual register killed in block, but needed live out." , &MBB);
2480
2487
errs () << " Virtual register " << printReg (VReg)
@@ -2484,7 +2491,7 @@ void MachineVerifier::visitMachineFunctionAfter() {
2484
2491
2485
2492
if (!MF->empty ()) {
2486
2493
BBInfo &MInfo = MBBInfoMap[&MF->front ()];
2487
- for (unsigned VReg : MInfo.vregsRequired ) {
2494
+ for (Register VReg : MInfo.vregsRequired ) {
2488
2495
report (" Virtual register defs don't dominate all uses." , MF);
2489
2496
report_context_vreg (VReg);
2490
2497
}
@@ -2543,8 +2550,8 @@ void MachineVerifier::visitMachineFunctionAfter() {
2543
2550
2544
2551
void MachineVerifier::verifyLiveVariables () {
2545
2552
assert (LiveVars && " Don't call verifyLiveVariables without LiveVars" );
2546
- for (unsigned i = 0 , e = MRI->getNumVirtRegs (); i != e ; ++i ) {
2547
- unsigned Reg = Register::index2VirtReg (i );
2553
+ for (unsigned I = 0 , E = MRI->getNumVirtRegs (); I != E ; ++I ) {
2554
+ Register Reg = Register::index2VirtReg (I );
2548
2555
LiveVariables::VarInfo &VI = LiveVars->getVarInfo (Reg);
2549
2556
for (const auto &MBB : *MF) {
2550
2557
BBInfo &MInfo = MBBInfoMap[&MBB];
@@ -2569,8 +2576,8 @@ void MachineVerifier::verifyLiveVariables() {
2569
2576
2570
2577
void MachineVerifier::verifyLiveIntervals () {
2571
2578
assert (LiveInts && " Don't call verifyLiveIntervals without LiveInts" );
2572
- for (unsigned i = 0 , e = MRI->getNumVirtRegs (); i != e ; ++i ) {
2573
- unsigned Reg = Register::index2VirtReg (i );
2579
+ for (unsigned I = 0 , E = MRI->getNumVirtRegs (); I != E ; ++I ) {
2580
+ Register Reg = Register::index2VirtReg (I );
2574
2581
2575
2582
// Spilling and splitting may leave unused registers around. Skip them.
2576
2583
if (MRI->reg_nodbg_empty (Reg))
@@ -2594,7 +2601,7 @@ void MachineVerifier::verifyLiveIntervals() {
2594
2601
}
2595
2602
2596
2603
void MachineVerifier::verifyLiveRangeValue (const LiveRange &LR,
2597
- const VNInfo *VNI, unsigned Reg,
2604
+ const VNInfo *VNI, Register Reg,
2598
2605
LaneBitmask LaneMask) {
2599
2606
if (VNI->isUnused ())
2600
2607
return ;
@@ -2687,8 +2694,8 @@ void MachineVerifier::verifyLiveRangeValue(const LiveRange &LR,
2687
2694
2688
2695
void MachineVerifier::verifyLiveRangeSegment (const LiveRange &LR,
2689
2696
const LiveRange::const_iterator I,
2690
- unsigned Reg, LaneBitmask LaneMask)
2691
- {
2697
+ Register Reg,
2698
+ LaneBitmask LaneMask) {
2692
2699
const LiveRange::Segment &S = *I;
2693
2700
const VNInfo *VNI = S.valno ;
2694
2701
assert (VNI && " Live segment has no valno" );
@@ -2899,7 +2906,7 @@ void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
2899
2906
}
2900
2907
}
2901
2908
2902
- void MachineVerifier::verifyLiveRange (const LiveRange &LR, unsigned Reg,
2909
+ void MachineVerifier::verifyLiveRange (const LiveRange &LR, Register Reg,
2903
2910
LaneBitmask LaneMask) {
2904
2911
for (const VNInfo *VNI : LR.valnos )
2905
2912
verifyLiveRangeValue (LR, VNI, Reg, LaneMask);
@@ -2909,7 +2916,7 @@ void MachineVerifier::verifyLiveRange(const LiveRange &LR, unsigned Reg,
2909
2916
}
2910
2917
2911
2918
void MachineVerifier::verifyLiveInterval (const LiveInterval &LI) {
2912
- unsigned Reg = LI.reg ();
2919
+ Register Reg = LI.reg ();
2913
2920
assert (Register::isVirtualRegister (Reg));
2914
2921
verifyLiveRange (LI, Reg);
2915
2922
0 commit comments