Skip to content

Commit a3ffd3d

Browse files
phoebewangnikic
authored andcommitted
Use getNumSupportedRegs to reduce compile time, NFCI
3rd try to fix compile regression by llvm#113532
1 parent a256e89 commit a3ffd3d

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ class TransferTracker {
266266

267267
const TargetRegisterInfo &TRI;
268268
const BitVector &CalleeSavedRegs;
269+
unsigned NumRegs = 0;
269270

270271
TransferTracker(const TargetInstrInfo *TII, MLocTracker *MTracker,
271272
MachineFunction &MF, const DebugVariableMap &DVMap,
@@ -276,13 +277,15 @@ class TransferTracker {
276277
TLI = MF.getSubtarget().getTargetLowering();
277278
auto &TM = TPC.getTM<TargetMachine>();
278279
ShouldEmitDebugEntryValues = TM.Options.ShouldEmitDebugEntryValues();
280+
NumRegs = TRI.getNumSupportedRegs(MF);
279281
}
280282

281283
bool isCalleeSaved(LocIdx L) const {
282284
unsigned Reg = MTracker->LocIdxToLocID[L];
283285
if (Reg >= MTracker->NumRegs)
284286
return false;
285-
for (MCRegAliasIterator RAI(Reg, &TRI, true); RAI.isValid(); ++RAI)
287+
for (MCRegAliasIterator RAI(Reg, &TRI, true);
288+
RAI.isValid() && *RAI < NumRegs; ++RAI)
286289
if (CalleeSavedRegs.test(*RAI))
287290
return true;
288291
return false;
@@ -1022,7 +1025,7 @@ MLocTracker::MLocTracker(MachineFunction &MF, const TargetInstrInfo &TII,
10221025
const TargetLowering &TLI)
10231026
: MF(MF), TII(TII), TRI(TRI), TLI(TLI),
10241027
LocIdxToIDNum(ValueIDNum::EmptyValue), LocIdxToLocID(0) {
1025-
NumRegs = TRI.getNumRegs();
1028+
NumRegs = TRI.getNumSupportedRegs(MF);
10261029
reset();
10271030
LocIDToLocIdx.resize(NumRegs, LocIdx::MakeIllegalLoc());
10281031
assert(NumRegs < (1u << NUM_LOC_BITS)); // Detect bit packing failure
@@ -1035,7 +1038,8 @@ MLocTracker::MLocTracker(MachineFunction &MF, const TargetInstrInfo &TII,
10351038
unsigned ID = getLocID(SP);
10361039
(void)lookupOrTrackRegister(ID);
10371040

1038-
for (MCRegAliasIterator RAI(SP, &TRI, true); RAI.isValid(); ++RAI)
1041+
for (MCRegAliasIterator RAI(SP, &TRI, true);
1042+
RAI.isValid() && *RAI < NumRegs; ++RAI)
10391043
SPAliases.insert(*RAI);
10401044
}
10411045

@@ -1344,7 +1348,8 @@ bool InstrRefBasedLDV::isCalleeSaved(LocIdx L) const {
13441348
return isCalleeSavedReg(Reg);
13451349
}
13461350
bool InstrRefBasedLDV::isCalleeSavedReg(Register R) const {
1347-
for (MCRegAliasIterator RAI(R, TRI, true); RAI.isValid(); ++RAI)
1351+
for (MCRegAliasIterator RAI(R, TRI, true); RAI.isValid() && *RAI < NumRegs;
1352+
++RAI)
13481353
if (CalleeSavedRegs.test(*RAI))
13491354
return true;
13501355
return false;
@@ -1787,7 +1792,8 @@ bool InstrRefBasedLDV::transferDebugPHI(MachineInstr &MI) {
17871792
DebugPHINumToValue.push_back(PHIRec);
17881793

17891794
// Ensure this register is tracked.
1790-
for (MCRegAliasIterator RAI(MO.getReg(), TRI, true); RAI.isValid(); ++RAI)
1795+
for (MCRegAliasIterator RAI(MO.getReg(), TRI, true);
1796+
RAI.isValid() && *RAI < NumRegs; ++RAI)
17911797
MTracker->lookupOrTrackRegister(*RAI);
17921798
} else if (MO.isFI()) {
17931799
// The value is whatever's in this stack slot.
@@ -1878,7 +1884,8 @@ void InstrRefBasedLDV::transferRegisterDef(MachineInstr &MI) {
18781884
if (MO.isReg() && MO.isDef() && MO.getReg() && MO.getReg().isPhysical() &&
18791885
!IgnoreSPAlias(MO.getReg())) {
18801886
// Remove ranges of all aliased registers.
1881-
for (MCRegAliasIterator RAI(MO.getReg(), TRI, true); RAI.isValid(); ++RAI)
1887+
for (MCRegAliasIterator RAI(MO.getReg(), TRI, true);
1888+
RAI.isValid() && *RAI < NumRegs; ++RAI)
18821889
// FIXME: Can we break out of this loop early if no insertion occurs?
18831890
DeadRegs.insert(*RAI);
18841891
} else if (MO.isRegMask()) {
@@ -1952,7 +1959,8 @@ void InstrRefBasedLDV::transferRegisterDef(MachineInstr &MI) {
19521959

19531960
void InstrRefBasedLDV::performCopy(Register SrcRegNum, Register DstRegNum) {
19541961
// In all circumstances, re-def all aliases. It's definitely a new value now.
1955-
for (MCRegAliasIterator RAI(DstRegNum, TRI, true); RAI.isValid(); ++RAI)
1962+
for (MCRegAliasIterator RAI(DstRegNum, TRI, true);
1963+
RAI.isValid() && *RAI < NumRegs; ++RAI)
19561964
MTracker->defReg(*RAI, CurBB, CurInst);
19571965

19581966
ValueIDNum SrcValue = MTracker->readReg(SrcRegNum);
@@ -2117,7 +2125,8 @@ bool InstrRefBasedLDV::transferSpillOrRestoreInst(MachineInstr &MI) {
21172125
// stack slot.
21182126

21192127
// Def all registers that alias the destination.
2120-
for (MCRegAliasIterator RAI(Reg, TRI, true); RAI.isValid(); ++RAI)
2128+
for (MCRegAliasIterator RAI(Reg, TRI, true);
2129+
RAI.isValid() && *RAI < NumRegs; ++RAI)
21212130
MTracker->defReg(*RAI, CurBB, CurInst);
21222131

21232132
// Now find subregisters within the destination register, and load values
@@ -2178,7 +2187,8 @@ bool InstrRefBasedLDV::transferRegisterCopy(MachineInstr &MI) {
21782187
// potentially clobbered variables.
21792188
DenseMap<LocIdx, ValueIDNum> ClobberedLocs;
21802189
if (TTracker) {
2181-
for (MCRegAliasIterator RAI(DestReg, TRI, true); RAI.isValid(); ++RAI) {
2190+
for (MCRegAliasIterator RAI(DestReg, TRI, true);
2191+
RAI.isValid() && *RAI < NumRegs; ++RAI) {
21822192
LocIdx ClobberedLoc = MTracker->getRegMLoc(*RAI);
21832193
auto MLocIt = TTracker->ActiveMLocs.find(ClobberedLoc);
21842194
// If ActiveMLocs isn't tracking this location or there are no variables
@@ -2302,11 +2312,12 @@ void InstrRefBasedLDV::produceMLocTransferFunction(
23022312
// appropriate clobbers.
23032313
SmallVector<BitVector, 32> BlockMasks;
23042314
BlockMasks.resize(MaxNumBlocks);
2315+
NumRegs = TRI->getNumSupportedRegs(MF);
23052316

23062317
// Reserve one bit per register for the masks described above.
2307-
unsigned BVWords = MachineOperand::getRegMaskSize(TRI->getNumRegs());
2318+
unsigned BVWords = MachineOperand::getRegMaskSize(NumRegs);
23082319
for (auto &BV : BlockMasks)
2309-
BV.resize(TRI->getNumRegs(), true);
2320+
BV.resize(NumRegs, true);
23102321

23112322
// Step through all instructions and inhale the transfer function.
23122323
for (auto &MBB : MF) {
@@ -2370,11 +2381,11 @@ void InstrRefBasedLDV::produceMLocTransferFunction(
23702381
}
23712382

23722383
// Compute a bitvector of all the registers that are tracked in this block.
2373-
BitVector UsedRegs(TRI->getNumRegs());
2384+
BitVector UsedRegs(NumRegs);
23742385
for (auto Location : MTracker->locations()) {
23752386
unsigned ID = MTracker->LocIdxToLocID[Location.Idx];
23762387
// Ignore stack slots, and aliases of the stack pointer.
2377-
if (ID >= TRI->getNumRegs() || MTracker->SPAliases.count(ID))
2388+
if (ID >= NumRegs || MTracker->SPAliases.count(ID))
23782389
continue;
23792390
UsedRegs.set(ID);
23802391
}
@@ -2635,7 +2646,8 @@ void InstrRefBasedLDV::placeMLocPHIs(
26352646
InstallPHIsAtLoc(L);
26362647

26372648
// Now find aliases and install PHIs for those.
2638-
for (MCRegAliasIterator RAI(R, TRI, true); RAI.isValid(); ++RAI) {
2649+
for (MCRegAliasIterator RAI(R, TRI, true); RAI.isValid() && *RAI < NumRegs;
2650+
++RAI) {
26392651
// Super-registers that are "above" the largest register read/written by
26402652
// the function will alias, but will not be tracked.
26412653
if (!MTracker->isRegisterTracked(*RAI))

llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,8 @@ class InstrRefBasedLDV : public LDVImpl {
12531253
/// pointer.
12541254
StringRef StackProbeSymbolName;
12551255

1256+
unsigned NumRegs = 0;
1257+
12561258
/// Tests whether this instruction is a spill to a stack slot.
12571259
std::optional<SpillLocationNo> isSpillInstruction(const MachineInstr &MI,
12581260
MachineFunction *MF);

0 commit comments

Comments
 (0)