[llvm] r274298 - CodeGen: Use MachineInstr& in LocalStackSlotAllocation, NFC
Duncan P. N. Exon Smith via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 30 16:39:46 PDT 2016
Author: dexonsmith
Date: Thu Jun 30 18:39:46 2016
New Revision: 274298
URL: http://llvm.org/viewvc/llvm-project?rev=274298&view=rev
Log:
CodeGen: Use MachineInstr& in LocalStackSlotAllocation, NFC
Avoid a number of implicit conversions from iterator to pointer by using
range-based for and MachineInstr&.
Modified:
llvm/trunk/lib/CodeGen/LocalStackSlotAllocation.cpp
Modified: llvm/trunk/lib/CodeGen/LocalStackSlotAllocation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LocalStackSlotAllocation.cpp?rev=274298&r1=274297&r2=274298&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/LocalStackSlotAllocation.cpp (original)
+++ llvm/trunk/lib/CodeGen/LocalStackSlotAllocation.cpp Thu Jun 30 18:39:46 2016
@@ -256,12 +256,12 @@ lookupCandidateBaseReg(unsigned BaseReg,
int64_t BaseOffset,
int64_t FrameSizeAdjust,
int64_t LocalFrameOffset,
- const MachineInstr *MI,
+ const MachineInstr &MI,
const TargetRegisterInfo *TRI) {
// Check if the relative offset from the where the base register references
// to the target address is in range for the instruction.
int64_t Offset = FrameSizeAdjust + LocalFrameOffset - BaseOffset;
- return TRI->isFrameOffsetLegal(MI, BaseReg, Offset);
+ return TRI->isFrameOffsetLegal(&MI, BaseReg, Offset);
}
bool LocalStackSlotPass::insertFrameReferenceRegisters(MachineFunction &Fn) {
@@ -285,16 +285,13 @@ bool LocalStackSlotPass::insertFrameRefe
// choose the first one).
SmallVector<FrameRef, 64> FrameReferenceInsns;
- for (MachineFunction::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB) {
- for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) {
- MachineInstr *MI = I;
-
+ for (MachineBasicBlock &BB : Fn) {
+ for (MachineInstr &MI : BB) {
// Debug value, stackmap and patchpoint instructions can't be out of
// range, so they don't need any updates.
- if (MI->isDebugValue() ||
- MI->getOpcode() == TargetOpcode::STATEPOINT ||
- MI->getOpcode() == TargetOpcode::STACKMAP ||
- MI->getOpcode() == TargetOpcode::PATCHPOINT)
+ if (MI.isDebugValue() || MI.getOpcode() == TargetOpcode::STATEPOINT ||
+ MI.getOpcode() == TargetOpcode::STACKMAP ||
+ MI.getOpcode() == TargetOpcode::PATCHPOINT)
continue;
// For now, allocate the base register(s) within the basic block
@@ -303,19 +300,18 @@ bool LocalStackSlotPass::insertFrameRefe
// than that, but the increased register pressure makes that a
// tricky thing to balance. Investigate if re-materializing these
// becomes an issue.
- for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
+ for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) {
// Consider replacing all frame index operands that reference
// an object allocated in the local block.
- if (MI->getOperand(i).isFI()) {
+ if (MI.getOperand(i).isFI()) {
// Don't try this with values not in the local block.
- if (!MFI->isObjectPreAllocated(MI->getOperand(i).getIndex()))
+ if (!MFI->isObjectPreAllocated(MI.getOperand(i).getIndex()))
break;
- int Idx = MI->getOperand(i).getIndex();
+ int Idx = MI.getOperand(i).getIndex();
int64_t LocalOffset = LocalOffsets[Idx];
- if (!TRI->needsFrameBaseReg(MI, LocalOffset))
+ if (!TRI->needsFrameBaseReg(&MI, LocalOffset))
break;
- FrameReferenceInsns.
- push_back(FrameRef(MI, LocalOffset, Idx));
+ FrameReferenceInsns.push_back(FrameRef(&MI, LocalOffset, Idx));
break;
}
}
@@ -333,46 +329,44 @@ bool LocalStackSlotPass::insertFrameRefe
// Loop through the frame references and allocate for them as necessary.
for (int ref = 0, e = FrameReferenceInsns.size(); ref < e ; ++ref) {
FrameRef &FR = FrameReferenceInsns[ref];
- MachineBasicBlock::iterator I = FR.getMachineInstr();
- MachineInstr *MI = I;
+ MachineInstr &MI = *FR.getMachineInstr();
int64_t LocalOffset = FR.getLocalOffset();
int FrameIdx = FR.getFrameIndex();
assert(MFI->isObjectPreAllocated(FrameIdx) &&
"Only pre-allocated locals expected!");
- DEBUG(dbgs() << "Considering: " << *MI);
+ DEBUG(dbgs() << "Considering: " << MI);
unsigned idx = 0;
- for (unsigned f = MI->getNumOperands(); idx != f; ++idx) {
- if (!MI->getOperand(idx).isFI())
+ for (unsigned f = MI.getNumOperands(); idx != f; ++idx) {
+ if (!MI.getOperand(idx).isFI())
continue;
- if (FrameIdx == I->getOperand(idx).getIndex())
+ if (FrameIdx == MI.getOperand(idx).getIndex())
break;
}
- assert(idx < MI->getNumOperands() && "Cannot find FI operand");
+ assert(idx < MI.getNumOperands() && "Cannot find FI operand");
int64_t Offset = 0;
int64_t FrameSizeAdjust = StackGrowsDown ? MFI->getLocalFrameSize() : 0;
- DEBUG(dbgs() << " Replacing FI in: " << *MI);
+ DEBUG(dbgs() << " Replacing FI in: " << MI);
// If we have a suitable base register available, use it; otherwise
// create a new one. Note that any offset encoded in the
// instruction itself will be taken into account by the target,
// so we don't have to adjust for it here when reusing a base
// register.
- if (UsedBaseReg && lookupCandidateBaseReg(BaseReg, BaseOffset,
- FrameSizeAdjust, LocalOffset, MI,
- TRI)) {
+ if (UsedBaseReg &&
+ lookupCandidateBaseReg(BaseReg, BaseOffset, FrameSizeAdjust,
+ LocalOffset, MI, TRI)) {
DEBUG(dbgs() << " Reusing base register " << BaseReg << "\n");
// We found a register to reuse.
Offset = FrameSizeAdjust + LocalOffset - BaseOffset;
} else {
- // No previously defined register was in range, so create a // new one.
-
- int64_t InstrOffset = TRI->getFrameIndexInstrOffset(MI, idx);
+ // No previously defined register was in range, so create a new one.
+ int64_t InstrOffset = TRI->getFrameIndexInstrOffset(&MI, idx);
int64_t PrevBaseOffset = BaseOffset;
BaseOffset = FrameSizeAdjust + LocalOffset + InstrOffset;
@@ -386,12 +380,12 @@ bool LocalStackSlotPass::insertFrameRefe
!lookupCandidateBaseReg(
BaseReg, BaseOffset, FrameSizeAdjust,
FrameReferenceInsns[ref + 1].getLocalOffset(),
- FrameReferenceInsns[ref + 1].getMachineInstr(), TRI)) {
+ *FrameReferenceInsns[ref + 1].getMachineInstr(), TRI)) {
BaseOffset = PrevBaseOffset;
continue;
}
- const MachineFunction *MF = MI->getParent()->getParent();
+ const MachineFunction *MF = MI.getParent()->getParent();
const TargetRegisterClass *RC = TRI->getPointerRegClass(*MF);
BaseReg = Fn.getRegInfo().createVirtualRegister(RC);
@@ -416,8 +410,8 @@ bool LocalStackSlotPass::insertFrameRefe
// Modify the instruction to use the new base register rather
// than the frame index operand.
- TRI->resolveFrameIndex(*I, BaseReg, Offset);
- DEBUG(dbgs() << "Resolved: " << *MI);
+ TRI->resolveFrameIndex(MI, BaseReg, Offset);
+ DEBUG(dbgs() << "Resolved: " << MI);
++NumReplacements;
}
More information about the llvm-commits
mailing list