Skip to content

Commit 5cde6d2

Browse files
authored
[ReachingDefAnalysis][NFC] Replace MCRegister with Register (#123626)
This is preparation for extending ReachingDefAnalysis to stack slots. We should use `Register`, not `MCRegister` for something that can be a physical register or a stack slot.
1 parent 5d281a4 commit 5cde6d2

File tree

2 files changed

+40
-48
lines changed

2 files changed

+40
-48
lines changed

llvm/include/llvm/CodeGen/ReachingDefAnalysis.h

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -177,24 +177,23 @@ class ReachingDefAnalysis : public MachineFunctionPass {
177177

178178
/// Provides the instruction id of the closest reaching def instruction of
179179
/// Reg that reaches MI, relative to the begining of MI's basic block.
180-
int getReachingDef(MachineInstr *MI, MCRegister Reg) const;
180+
int getReachingDef(MachineInstr *MI, Register Reg) const;
181181

182182
/// Return whether A and B use the same def of Reg.
183-
bool hasSameReachingDef(MachineInstr *A, MachineInstr *B,
184-
MCRegister Reg) const;
183+
bool hasSameReachingDef(MachineInstr *A, MachineInstr *B, Register Reg) const;
185184

186185
/// Return whether the reaching def for MI also is live out of its parent
187186
/// block.
188-
bool isReachingDefLiveOut(MachineInstr *MI, MCRegister Reg) const;
187+
bool isReachingDefLiveOut(MachineInstr *MI, Register Reg) const;
189188

190189
/// Return the local MI that produces the live out value for Reg, or
191190
/// nullptr for a non-live out or non-local def.
192191
MachineInstr *getLocalLiveOutMIDef(MachineBasicBlock *MBB,
193-
MCRegister Reg) const;
192+
Register Reg) const;
194193

195194
/// If a single MachineInstr creates the reaching definition, then return it.
196195
/// Otherwise return null.
197-
MachineInstr *getUniqueReachingMIDef(MachineInstr *MI, MCRegister Reg) const;
196+
MachineInstr *getUniqueReachingMIDef(MachineInstr *MI, Register Reg) const;
198197

199198
/// If a single MachineInstr creates the reaching definition, for MIs operand
200199
/// at Idx, then return it. Otherwise return null.
@@ -206,43 +205,42 @@ class ReachingDefAnalysis : public MachineFunctionPass {
206205

207206
/// Provide whether the register has been defined in the same basic block as,
208207
/// and before, MI.
209-
bool hasLocalDefBefore(MachineInstr *MI, MCRegister Reg) const;
208+
bool hasLocalDefBefore(MachineInstr *MI, Register Reg) const;
210209

211210
/// Return whether the given register is used after MI, whether it's a local
212211
/// use or a live out.
213-
bool isRegUsedAfter(MachineInstr *MI, MCRegister Reg) const;
212+
bool isRegUsedAfter(MachineInstr *MI, Register Reg) const;
214213

215214
/// Return whether the given register is defined after MI.
216-
bool isRegDefinedAfter(MachineInstr *MI, MCRegister Reg) const;
215+
bool isRegDefinedAfter(MachineInstr *MI, Register Reg) const;
217216

218217
/// Provides the clearance - the number of instructions since the closest
219218
/// reaching def instuction of Reg that reaches MI.
220-
int getClearance(MachineInstr *MI, MCRegister Reg) const;
219+
int getClearance(MachineInstr *MI, Register Reg) const;
221220

222221
/// Provides the uses, in the same block as MI, of register that MI defines.
223222
/// This does not consider live-outs.
224-
void getReachingLocalUses(MachineInstr *MI, MCRegister Reg,
223+
void getReachingLocalUses(MachineInstr *MI, Register Reg,
225224
InstSet &Uses) const;
226225

227226
/// Search MBB for a definition of Reg and insert it into Defs. If no
228227
/// definition is found, recursively search the predecessor blocks for them.
229-
void getLiveOuts(MachineBasicBlock *MBB, MCRegister Reg, InstSet &Defs,
228+
void getLiveOuts(MachineBasicBlock *MBB, Register Reg, InstSet &Defs,
230229
BlockSet &VisitedBBs) const;
231-
void getLiveOuts(MachineBasicBlock *MBB, MCRegister Reg, InstSet &Defs) const;
230+
void getLiveOuts(MachineBasicBlock *MBB, Register Reg, InstSet &Defs) const;
232231

233232
/// For the given block, collect the instructions that use the live-in
234233
/// value of the provided register. Return whether the value is still
235234
/// live on exit.
236-
bool getLiveInUses(MachineBasicBlock *MBB, MCRegister Reg,
237-
InstSet &Uses) const;
235+
bool getLiveInUses(MachineBasicBlock *MBB, Register Reg, InstSet &Uses) const;
238236

239237
/// Collect the users of the value stored in Reg, which is defined
240238
/// by MI.
241-
void getGlobalUses(MachineInstr *MI, MCRegister Reg, InstSet &Uses) const;
239+
void getGlobalUses(MachineInstr *MI, Register Reg, InstSet &Uses) const;
242240

243241
/// Collect all possible definitions of the value stored in Reg, which is
244242
/// used by MI.
245-
void getGlobalReachingDefs(MachineInstr *MI, MCRegister Reg,
243+
void getGlobalReachingDefs(MachineInstr *MI, Register Reg,
246244
InstSet &Defs) const;
247245

248246
/// Return whether From can be moved forwards to just before To.
@@ -267,13 +265,12 @@ class ReachingDefAnalysis : public MachineFunctionPass {
267265

268266
/// Return whether a MachineInstr could be inserted at MI and safely define
269267
/// the given register without affecting the program.
270-
bool isSafeToDefRegAt(MachineInstr *MI, MCRegister Reg) const;
268+
bool isSafeToDefRegAt(MachineInstr *MI, Register Reg) const;
271269

272270
/// Return whether a MachineInstr could be inserted at MI and safely define
273271
/// the given register without affecting the program, ignoring any effects
274272
/// on the provided instructions.
275-
bool isSafeToDefRegAt(MachineInstr *MI, MCRegister Reg,
276-
InstSet &Ignore) const;
273+
bool isSafeToDefRegAt(MachineInstr *MI, Register Reg, InstSet &Ignore) const;
277274

278275
private:
279276
/// Set up LiveRegs by merging predecessor live-out values.
@@ -308,7 +305,7 @@ class ReachingDefAnalysis : public MachineFunctionPass {
308305

309306
/// Provides the instruction of the closest reaching def instruction of
310307
/// Reg that reaches MI, relative to the begining of MI's basic block.
311-
MachineInstr *getReachingLocalMIDef(MachineInstr *MI, MCRegister Reg) const;
308+
MachineInstr *getReachingLocalMIDef(MachineInstr *MI, Register Reg) const;
312309
};
313310

314311
} // namespace llvm

llvm/lib/CodeGen/ReachingDefAnalysis.cpp

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ static bool isValidRegUse(const MachineOperand &MO) {
3030
return isValidReg(MO) && MO.isUse();
3131
}
3232

33-
static bool isValidRegUseOf(const MachineOperand &MO, MCRegister Reg,
33+
static bool isValidRegUseOf(const MachineOperand &MO, Register Reg,
3434
const TargetRegisterInfo *TRI) {
3535
if (!isValidRegUse(MO))
3636
return false;
@@ -41,7 +41,7 @@ static bool isValidRegDef(const MachineOperand &MO) {
4141
return isValidReg(MO) && MO.isDef();
4242
}
4343

44-
static bool isValidRegDefOf(const MachineOperand &MO, MCRegister Reg,
44+
static bool isValidRegDefOf(const MachineOperand &MO, Register Reg,
4545
const TargetRegisterInfo *TRI) {
4646
if (!isValidRegDef(MO))
4747
return false;
@@ -260,8 +260,7 @@ void ReachingDefAnalysis::traverse() {
260260
#endif
261261
}
262262

263-
int ReachingDefAnalysis::getReachingDef(MachineInstr *MI,
264-
MCRegister Reg) const {
263+
int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, Register Reg) const {
265264
assert(InstIds.count(MI) && "Unexpected machine instuction.");
266265
int InstId = InstIds.lookup(MI);
267266
int DefRes = ReachingDefDefaultVal;
@@ -281,14 +280,14 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI,
281280
}
282281

283282
MachineInstr *ReachingDefAnalysis::getReachingLocalMIDef(MachineInstr *MI,
284-
MCRegister Reg) const {
283+
Register Reg) const {
285284
return hasLocalDefBefore(MI, Reg)
286285
? getInstFromId(MI->getParent(), getReachingDef(MI, Reg))
287286
: nullptr;
288287
}
289288

290289
bool ReachingDefAnalysis::hasSameReachingDef(MachineInstr *A, MachineInstr *B,
291-
MCRegister Reg) const {
290+
Register Reg) const {
292291
MachineBasicBlock *ParentA = A->getParent();
293292
MachineBasicBlock *ParentB = B->getParent();
294293
if (ParentA != ParentB)
@@ -317,18 +316,17 @@ MachineInstr *ReachingDefAnalysis::getInstFromId(MachineBasicBlock *MBB,
317316
return nullptr;
318317
}
319318

320-
int ReachingDefAnalysis::getClearance(MachineInstr *MI, MCRegister Reg) const {
319+
int ReachingDefAnalysis::getClearance(MachineInstr *MI, Register Reg) const {
321320
assert(InstIds.count(MI) && "Unexpected machine instuction.");
322321
return InstIds.lookup(MI) - getReachingDef(MI, Reg);
323322
}
324323

325324
bool ReachingDefAnalysis::hasLocalDefBefore(MachineInstr *MI,
326-
MCRegister Reg) const {
325+
Register Reg) const {
327326
return getReachingDef(MI, Reg) >= 0;
328327
}
329328

330-
void ReachingDefAnalysis::getReachingLocalUses(MachineInstr *Def,
331-
MCRegister Reg,
329+
void ReachingDefAnalysis::getReachingLocalUses(MachineInstr *Def, Register Reg,
332330
InstSet &Uses) const {
333331
MachineBasicBlock *MBB = Def->getParent();
334332
MachineBasicBlock::iterator MI = MachineBasicBlock::iterator(Def);
@@ -352,7 +350,7 @@ void ReachingDefAnalysis::getReachingLocalUses(MachineInstr *Def,
352350
}
353351
}
354352

355-
bool ReachingDefAnalysis::getLiveInUses(MachineBasicBlock *MBB, MCRegister Reg,
353+
bool ReachingDefAnalysis::getLiveInUses(MachineBasicBlock *MBB, Register Reg,
356354
InstSet &Uses) const {
357355
for (MachineInstr &MI :
358356
instructionsWithoutDebug(MBB->instr_begin(), MBB->instr_end())) {
@@ -370,7 +368,7 @@ bool ReachingDefAnalysis::getLiveInUses(MachineBasicBlock *MBB, MCRegister Reg,
370368
return isReachingDefLiveOut(&*Last, Reg);
371369
}
372370

373-
void ReachingDefAnalysis::getGlobalUses(MachineInstr *MI, MCRegister Reg,
371+
void ReachingDefAnalysis::getGlobalUses(MachineInstr *MI, Register Reg,
374372
InstSet &Uses) const {
375373
MachineBasicBlock *MBB = MI->getParent();
376374

@@ -395,8 +393,7 @@ void ReachingDefAnalysis::getGlobalUses(MachineInstr *MI, MCRegister Reg,
395393
}
396394
}
397395

398-
void ReachingDefAnalysis::getGlobalReachingDefs(MachineInstr *MI,
399-
MCRegister Reg,
396+
void ReachingDefAnalysis::getGlobalReachingDefs(MachineInstr *MI, Register Reg,
400397
InstSet &Defs) const {
401398
if (auto *Def = getUniqueReachingMIDef(MI, Reg)) {
402399
Defs.insert(Def);
@@ -407,13 +404,13 @@ void ReachingDefAnalysis::getGlobalReachingDefs(MachineInstr *MI,
407404
getLiveOuts(MBB, Reg, Defs);
408405
}
409406

410-
void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, MCRegister Reg,
407+
void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, Register Reg,
411408
InstSet &Defs) const {
412409
SmallPtrSet<MachineBasicBlock*, 2> VisitedBBs;
413410
getLiveOuts(MBB, Reg, Defs, VisitedBBs);
414411
}
415412

416-
void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, MCRegister Reg,
413+
void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, Register Reg,
417414
InstSet &Defs,
418415
BlockSet &VisitedBBs) const {
419416
if (VisitedBBs.count(MBB))
@@ -432,9 +429,8 @@ void ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, MCRegister Reg,
432429
getLiveOuts(Pred, Reg, Defs, VisitedBBs);
433430
}
434431

435-
MachineInstr *
436-
ReachingDefAnalysis::getUniqueReachingMIDef(MachineInstr *MI,
437-
MCRegister Reg) const {
432+
MachineInstr *ReachingDefAnalysis::getUniqueReachingMIDef(MachineInstr *MI,
433+
Register Reg) const {
438434
// If there's a local def before MI, return it.
439435
MachineInstr *LocalDef = getReachingLocalMIDef(MI, Reg);
440436
if (LocalDef && InstIds.lookup(LocalDef) < InstIds.lookup(MI))
@@ -465,8 +461,7 @@ MachineInstr *ReachingDefAnalysis::getMIOperand(MachineInstr *MI,
465461
return getUniqueReachingMIDef(MI, MO.getReg());
466462
}
467463

468-
bool ReachingDefAnalysis::isRegUsedAfter(MachineInstr *MI,
469-
MCRegister Reg) const {
464+
bool ReachingDefAnalysis::isRegUsedAfter(MachineInstr *MI, Register Reg) const {
470465
MachineBasicBlock *MBB = MI->getParent();
471466
LiveRegUnits LiveRegs(*TRI);
472467
LiveRegs.addLiveOuts(*MBB);
@@ -487,7 +482,7 @@ bool ReachingDefAnalysis::isRegUsedAfter(MachineInstr *MI,
487482
}
488483

489484
bool ReachingDefAnalysis::isRegDefinedAfter(MachineInstr *MI,
490-
MCRegister Reg) const {
485+
Register Reg) const {
491486
MachineBasicBlock *MBB = MI->getParent();
492487
auto Last = MBB->getLastNonDebugInstr();
493488
if (Last != MBB->end() &&
@@ -501,7 +496,7 @@ bool ReachingDefAnalysis::isRegDefinedAfter(MachineInstr *MI,
501496
}
502497

503498
bool ReachingDefAnalysis::isReachingDefLiveOut(MachineInstr *MI,
504-
MCRegister Reg) const {
499+
Register Reg) const {
505500
MachineBasicBlock *MBB = MI->getParent();
506501
LiveRegUnits LiveRegs(*TRI);
507502
LiveRegs.addLiveOuts(*MBB);
@@ -522,7 +517,7 @@ bool ReachingDefAnalysis::isReachingDefLiveOut(MachineInstr *MI,
522517
}
523518

524519
MachineInstr *ReachingDefAnalysis::getLocalLiveOutMIDef(MachineBasicBlock *MBB,
525-
MCRegister Reg) const {
520+
Register Reg) const {
526521
LiveRegUnits LiveRegs(*TRI);
527522
LiveRegs.addLiveOuts(*MBB);
528523
if (LiveRegs.available(Reg))
@@ -646,7 +641,7 @@ ReachingDefAnalysis::isSafeToRemove(MachineInstr *MI, InstSet &Visited,
646641
void ReachingDefAnalysis::collectKilledOperands(MachineInstr *MI,
647642
InstSet &Dead) const {
648643
Dead.insert(MI);
649-
auto IsDead = [this, &Dead](MachineInstr *Def, MCRegister Reg) {
644+
auto IsDead = [this, &Dead](MachineInstr *Def, Register Reg) {
650645
if (mayHaveSideEffects(*Def))
651646
return false;
652647

@@ -676,12 +671,12 @@ void ReachingDefAnalysis::collectKilledOperands(MachineInstr *MI,
676671
}
677672

678673
bool ReachingDefAnalysis::isSafeToDefRegAt(MachineInstr *MI,
679-
MCRegister Reg) const {
674+
Register Reg) const {
680675
SmallPtrSet<MachineInstr*, 1> Ignore;
681676
return isSafeToDefRegAt(MI, Reg, Ignore);
682677
}
683678

684-
bool ReachingDefAnalysis::isSafeToDefRegAt(MachineInstr *MI, MCRegister Reg,
679+
bool ReachingDefAnalysis::isSafeToDefRegAt(MachineInstr *MI, Register Reg,
685680
InstSet &Ignore) const {
686681
// Check for any uses of the register after MI.
687682
if (isRegUsedAfter(MI, Reg)) {

0 commit comments

Comments
 (0)