@@ -1459,13 +1459,23 @@ void PEI::replaceFrameIndicesBackward(MachineBasicBlock *BB,
1459
1459
assert (MF.getSubtarget ().getRegisterInfo () &&
1460
1460
" getRegisterInfo() must be implemented!" );
1461
1461
1462
+ const TargetInstrInfo &TII = *MF.getSubtarget ().getInstrInfo ();
1462
1463
const TargetRegisterInfo &TRI = *MF.getSubtarget ().getRegisterInfo ();
1464
+ const TargetFrameLowering &TFI = *MF.getSubtarget ().getFrameLowering ();
1463
1465
1464
- RS->enterBasicBlockEnd (*BB);
1466
+ RegScavenger *LocalRS = FrameIndexEliminationScavenging ? RS : nullptr ;
1467
+ if (LocalRS)
1468
+ LocalRS->enterBasicBlockEnd (*BB);
1465
1469
1466
1470
for (MachineInstr &MI : make_early_inc_range (reverse (*BB))) {
1471
+ if (TII.isFrameInstr (MI)) {
1472
+ TFI.eliminateCallFramePseudoInstr (MF, *BB, &MI);
1473
+ continue ;
1474
+ }
1475
+
1467
1476
// Step backwards to get the liveness state at (immedately after) MI.
1468
- RS->backward (MI);
1477
+ if (LocalRS)
1478
+ LocalRS->backward (MI);
1469
1479
1470
1480
for (unsigned i = 0 ; i != MI.getNumOperands (); ++i) {
1471
1481
if (!MI.getOperand (i).isFI ())
@@ -1478,9 +1488,12 @@ void PEI::replaceFrameIndicesBackward(MachineBasicBlock *BB,
1478
1488
//
1479
1489
// Save and restore the scavenger's position around the call to
1480
1490
// eliminateFrameIndex in case it erases MI and invalidates the iterator.
1481
- MachineBasicBlock::iterator Save = std::next (RS->getCurrentPosition ());
1491
+ MachineBasicBlock::iterator Save;
1492
+ if (LocalRS)
1493
+ Save = std::next (LocalRS->getCurrentPosition ());
1482
1494
bool Removed = TRI.eliminateFrameIndex (MI, SPAdj, i, RS);
1483
- RS->skipTo (std::prev (Save));
1495
+ if (LocalRS)
1496
+ LocalRS->skipTo (std::prev (Save));
1484
1497
1485
1498
if (Removed)
1486
1499
break ;
@@ -1496,7 +1509,7 @@ void PEI::replaceFrameIndices(MachineBasicBlock *BB, MachineFunction &MF,
1496
1509
const TargetRegisterInfo &TRI = *MF.getSubtarget ().getRegisterInfo ();
1497
1510
const TargetFrameLowering *TFI = MF.getSubtarget ().getFrameLowering ();
1498
1511
1499
- if (RS && TRI.supportsBackwardScavenger ())
1512
+ if (TRI.supportsBackwardScavenger ())
1500
1513
return replaceFrameIndicesBackward (BB, MF, SPAdj);
1501
1514
1502
1515
if (RS && FrameIndexEliminationScavenging)
0 commit comments