@@ -29,15 +29,15 @@ static bool isValidRegUse(const MachineOperand &MO) {
29
29
return isValidReg (MO) && MO.isUse ();
30
30
}
31
31
32
- static bool isValidRegUseOf (const MachineOperand &MO, int PhysReg) {
32
+ static bool isValidRegUseOf (const MachineOperand &MO, MCRegister PhysReg) {
33
33
return isValidRegUse (MO) && MO.getReg () == PhysReg;
34
34
}
35
35
36
36
static bool isValidRegDef (const MachineOperand &MO) {
37
37
return isValidReg (MO) && MO.isDef ();
38
38
}
39
39
40
- static bool isValidRegDefOf (const MachineOperand &MO, int PhysReg) {
40
+ static bool isValidRegDefOf (const MachineOperand &MO, MCRegister PhysReg) {
41
41
return isValidRegDef (MO) && MO.getReg () == PhysReg;
42
42
}
43
43
@@ -121,7 +121,8 @@ void ReachingDefAnalysis::processDefs(MachineInstr *MI) {
121
121
for (auto &MO : MI->operands ()) {
122
122
if (!isValidRegDef (MO))
123
123
continue ;
124
- for (MCRegUnitIterator Unit (MO.getReg (), TRI); Unit.isValid (); ++Unit) {
124
+ for (MCRegUnitIterator Unit (MO.getReg ().asMCReg (), TRI); Unit.isValid ();
125
+ ++Unit) {
125
126
// This instruction explicitly defines the current reg unit.
126
127
LLVM_DEBUG (dbgs () << printReg (*Unit, TRI) << " :\t " << CurInstr
127
128
<< ' \t ' << *MI);
@@ -252,7 +253,8 @@ void ReachingDefAnalysis::traverse() {
252
253
#endif
253
254
}
254
255
255
- int ReachingDefAnalysis::getReachingDef (MachineInstr *MI, int PhysReg) const {
256
+ int ReachingDefAnalysis::getReachingDef (MachineInstr *MI,
257
+ MCRegister PhysReg) const {
256
258
assert (InstIds.count (MI) && " Unexpected machine instuction." );
257
259
int InstId = InstIds.lookup (MI);
258
260
int DefRes = ReachingDefDefaultVal;
@@ -271,15 +273,16 @@ int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, int PhysReg) const {
271
273
return LatestDef;
272
274
}
273
275
274
- MachineInstr* ReachingDefAnalysis::getReachingLocalMIDef (MachineInstr *MI,
275
- int PhysReg) const {
276
+ MachineInstr *
277
+ ReachingDefAnalysis::getReachingLocalMIDef (MachineInstr *MI,
278
+ MCRegister PhysReg) const {
276
279
return hasLocalDefBefore (MI, PhysReg)
277
280
? getInstFromId (MI->getParent (), getReachingDef (MI, PhysReg))
278
281
: nullptr ;
279
282
}
280
283
281
284
bool ReachingDefAnalysis::hasSameReachingDef (MachineInstr *A, MachineInstr *B,
282
- int PhysReg) const {
285
+ MCRegister PhysReg) const {
283
286
MachineBasicBlock *ParentA = A->getParent ();
284
287
MachineBasicBlock *ParentB = B->getParent ();
285
288
if (ParentA != ParentB)
@@ -307,18 +310,19 @@ MachineInstr *ReachingDefAnalysis::getInstFromId(MachineBasicBlock *MBB,
307
310
return nullptr ;
308
311
}
309
312
310
- int
311
- ReachingDefAnalysis::getClearance (MachineInstr *MI, MCPhysReg PhysReg) const {
313
+ int ReachingDefAnalysis::getClearance (MachineInstr *MI,
314
+ MCRegister PhysReg) const {
312
315
assert (InstIds.count (MI) && " Unexpected machine instuction." );
313
316
return InstIds.lookup (MI) - getReachingDef (MI, PhysReg);
314
317
}
315
318
316
- bool
317
- ReachingDefAnalysis::hasLocalDefBefore (MachineInstr *MI, int PhysReg) const {
319
+ bool ReachingDefAnalysis::hasLocalDefBefore (MachineInstr *MI,
320
+ MCRegister PhysReg) const {
318
321
return getReachingDef (MI, PhysReg) >= 0 ;
319
322
}
320
323
321
- void ReachingDefAnalysis::getReachingLocalUses (MachineInstr *Def, int PhysReg,
324
+ void ReachingDefAnalysis::getReachingLocalUses (MachineInstr *Def,
325
+ MCRegister PhysReg,
322
326
InstSet &Uses) const {
323
327
MachineBasicBlock *MBB = Def->getParent ();
324
328
MachineBasicBlock::iterator MI = MachineBasicBlock::iterator (Def);
@@ -342,9 +346,9 @@ void ReachingDefAnalysis::getReachingLocalUses(MachineInstr *Def, int PhysReg,
342
346
}
343
347
}
344
348
345
- bool
346
- ReachingDefAnalysis::getLiveInUses (MachineBasicBlock *MBB, int PhysReg,
347
- InstSet &Uses) const {
349
+ bool ReachingDefAnalysis::getLiveInUses (MachineBasicBlock *MBB,
350
+ MCRegister PhysReg,
351
+ InstSet &Uses) const {
348
352
for (MachineInstr &MI :
349
353
instructionsWithoutDebug (MBB->instr_begin (), MBB->instr_end ())) {
350
354
for (auto &MO : MI.operands ()) {
@@ -361,9 +365,8 @@ ReachingDefAnalysis::getLiveInUses(MachineBasicBlock *MBB, int PhysReg,
361
365
return isReachingDefLiveOut (&*Last, PhysReg);
362
366
}
363
367
364
- void
365
- ReachingDefAnalysis::getGlobalUses (MachineInstr *MI, int PhysReg,
366
- InstSet &Uses) const {
368
+ void ReachingDefAnalysis::getGlobalUses (MachineInstr *MI, MCRegister PhysReg,
369
+ InstSet &Uses) const {
367
370
MachineBasicBlock *MBB = MI->getParent ();
368
371
369
372
// Collect the uses that each def touches within the block.
@@ -391,9 +394,9 @@ ReachingDefAnalysis::getGlobalUses(MachineInstr *MI, int PhysReg,
391
394
}
392
395
}
393
396
394
- void
395
- ReachingDefAnalysis::getGlobalReachingDefs (MachineInstr *MI, int PhysReg,
396
- InstSet &Defs) const {
397
+ void ReachingDefAnalysis::getGlobalReachingDefs (MachineInstr *MI,
398
+ MCRegister PhysReg,
399
+ InstSet &Defs) const {
397
400
if (auto *Def = getUniqueReachingMIDef (MI, PhysReg)) {
398
401
Defs.insert (Def);
399
402
return ;
@@ -403,15 +406,15 @@ ReachingDefAnalysis::getGlobalReachingDefs(MachineInstr *MI, int PhysReg,
403
406
getLiveOuts (MBB, PhysReg, Defs);
404
407
}
405
408
406
- void ReachingDefAnalysis::getLiveOuts (MachineBasicBlock *MBB, int PhysReg,
407
- InstSet &Defs) const {
409
+ void ReachingDefAnalysis::getLiveOuts (MachineBasicBlock *MBB,
410
+ MCRegister PhysReg, InstSet &Defs) const {
408
411
SmallPtrSet<MachineBasicBlock*, 2 > VisitedBBs;
409
412
getLiveOuts (MBB, PhysReg, Defs, VisitedBBs);
410
413
}
411
414
412
- void
413
- ReachingDefAnalysis::getLiveOuts (MachineBasicBlock *MBB, int PhysReg,
414
- InstSet &Defs, BlockSet &VisitedBBs) const {
415
+ void ReachingDefAnalysis::getLiveOuts (MachineBasicBlock *MBB,
416
+ MCRegister PhysReg, InstSet &Defs ,
417
+ BlockSet &VisitedBBs) const {
415
418
if (VisitedBBs.count (MBB))
416
419
return ;
417
420
@@ -428,8 +431,9 @@ ReachingDefAnalysis::getLiveOuts(MachineBasicBlock *MBB, int PhysReg,
428
431
getLiveOuts (Pred, PhysReg, Defs, VisitedBBs);
429
432
}
430
433
431
- MachineInstr *ReachingDefAnalysis::getUniqueReachingMIDef (MachineInstr *MI,
432
- int PhysReg) const {
434
+ MachineInstr *
435
+ ReachingDefAnalysis::getUniqueReachingMIDef (MachineInstr *MI,
436
+ MCRegister PhysReg) const {
433
437
// If there's a local def before MI, return it.
434
438
MachineInstr *LocalDef = getReachingLocalMIDef (MI, PhysReg);
435
439
if (LocalDef && InstIds.lookup (LocalDef) < InstIds.lookup (MI))
@@ -460,7 +464,8 @@ MachineInstr *ReachingDefAnalysis::getMIOperand(MachineInstr *MI,
460
464
return getUniqueReachingMIDef (MI, MO.getReg ());
461
465
}
462
466
463
- bool ReachingDefAnalysis::isRegUsedAfter (MachineInstr *MI, int PhysReg) const {
467
+ bool ReachingDefAnalysis::isRegUsedAfter (MachineInstr *MI,
468
+ MCRegister PhysReg) const {
464
469
MachineBasicBlock *MBB = MI->getParent ();
465
470
LivePhysRegs LiveRegs (*TRI);
466
471
LiveRegs.addLiveOuts (*MBB);
@@ -481,7 +486,7 @@ bool ReachingDefAnalysis::isRegUsedAfter(MachineInstr *MI, int PhysReg) const {
481
486
}
482
487
483
488
bool ReachingDefAnalysis::isRegDefinedAfter (MachineInstr *MI,
484
- int PhysReg) const {
489
+ MCRegister PhysReg) const {
485
490
MachineBasicBlock *MBB = MI->getParent ();
486
491
auto Last = MBB->getLastNonDebugInstr ();
487
492
if (Last != MBB->end () &&
@@ -494,8 +499,8 @@ bool ReachingDefAnalysis::isRegDefinedAfter(MachineInstr *MI,
494
499
return false ;
495
500
}
496
501
497
- bool
498
- ReachingDefAnalysis::isReachingDefLiveOut (MachineInstr *MI, int PhysReg) const {
502
+ bool ReachingDefAnalysis::isReachingDefLiveOut (MachineInstr *MI,
503
+ MCRegister PhysReg) const {
499
504
MachineBasicBlock *MBB = MI->getParent ();
500
505
LivePhysRegs LiveRegs (*TRI);
501
506
LiveRegs.addLiveOuts (*MBB);
@@ -515,8 +520,9 @@ ReachingDefAnalysis::isReachingDefLiveOut(MachineInstr *MI, int PhysReg) const {
515
520
return true ;
516
521
}
517
522
518
- MachineInstr* ReachingDefAnalysis::getLocalLiveOutMIDef (MachineBasicBlock *MBB,
519
- int PhysReg) const {
523
+ MachineInstr *
524
+ ReachingDefAnalysis::getLocalLiveOutMIDef (MachineBasicBlock *MBB,
525
+ MCRegister PhysReg) const {
520
526
LivePhysRegs LiveRegs (*TRI);
521
527
LiveRegs.addLiveOuts (*MBB);
522
528
if (!LiveRegs.contains (PhysReg))
@@ -640,7 +646,7 @@ ReachingDefAnalysis::isSafeToRemove(MachineInstr *MI, InstSet &Visited,
640
646
void ReachingDefAnalysis::collectKilledOperands (MachineInstr *MI,
641
647
InstSet &Dead) const {
642
648
Dead.insert (MI);
643
- auto IsDead = [this , &Dead](MachineInstr *Def, int PhysReg) {
649
+ auto IsDead = [this , &Dead](MachineInstr *Def, MCRegister PhysReg) {
644
650
if (mayHaveSideEffects (*Def))
645
651
return false ;
646
652
@@ -673,12 +679,12 @@ void ReachingDefAnalysis::collectKilledOperands(MachineInstr *MI,
673
679
}
674
680
675
681
bool ReachingDefAnalysis::isSafeToDefRegAt (MachineInstr *MI,
676
- int PhysReg) const {
682
+ MCRegister PhysReg) const {
677
683
SmallPtrSet<MachineInstr*, 1 > Ignore;
678
684
return isSafeToDefRegAt (MI, PhysReg, Ignore);
679
685
}
680
686
681
- bool ReachingDefAnalysis::isSafeToDefRegAt (MachineInstr *MI, int PhysReg,
687
+ bool ReachingDefAnalysis::isSafeToDefRegAt (MachineInstr *MI, MCRegister PhysReg,
682
688
InstSet &Ignore) const {
683
689
// Check for any uses of the register after MI.
684
690
if (isRegUsedAfter (MI, PhysReg)) {
0 commit comments