From 2d16f5b0cb5ae03c4b4ff6711d543552d97243a0 Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Fri, 20 Aug 2010 16:48:30 +0000 Subject: [PATCH] properly check for whether base regs were inserted git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111646 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/LocalStackSlotAllocation.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/LocalStackSlotAllocation.cpp b/lib/CodeGen/LocalStackSlotAllocation.cpp index 01a1af1be60..962c7c3a15a 100644 --- a/lib/CodeGen/LocalStackSlotAllocation.cpp +++ b/lib/CodeGen/LocalStackSlotAllocation.cpp @@ -48,7 +48,7 @@ namespace { void AdjustStackOffset(MachineFrameInfo *MFI, int FrameIdx, int64_t &Offset, unsigned &MaxAlign); void calculateFrameObjectOffsets(MachineFunction &Fn); - void insertFrameReferenceRegisters(MachineFunction &Fn); + bool insertFrameReferenceRegisters(MachineFunction &Fn); public: static char ID; // Pass identification, replacement for typeid explicit LocalStackSlotPass() : MachineFunctionPass(ID) { } @@ -87,14 +87,14 @@ bool LocalStackSlotPass::runOnMachineFunction(MachineFunction &MF) { calculateFrameObjectOffsets(MF); // Insert virtual base registers to resolve frame index references. - insertFrameReferenceRegisters(MF); + bool UsedBaseRegs = insertFrameReferenceRegisters(MF); // Tell MFI whether any base registers were allocated. PEI will only // want to use the local block allocations from this pass if there were any. // Otherwise, PEI can do a bit better job of getting the alignment right // without a hole at the start since it knows the alignment of the stack // at the start of local allocation, and this pass doesn't. - MFI->setUseLocalStackAllocationBlock(NumBaseRegisters > 0); + MFI->setUseLocalStackAllocationBlock(UsedBaseRegs); return true; } @@ -188,13 +188,14 @@ lookupCandidateBaseReg(const SmallVector, 8> &Regs, return false; } -void LocalStackSlotPass::insertFrameReferenceRegisters(MachineFunction &Fn) { +bool LocalStackSlotPass::insertFrameReferenceRegisters(MachineFunction &Fn) { // Scan the function's instructions looking for frame index references. // For each, ask the target if it wants a virtual base register for it // based on what we can tell it about where the local will end up in the // stack frame. If it wants one, re-use a suitable one we've previously // allocated, or if there isn't one that fits the bill, allocate a new one // and ask the target to create a defining instruction for it. + bool UsedBaseReg = false; MachineFrameInfo *MFI = Fn.getFrameInfo(); const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo(); @@ -274,6 +275,7 @@ void LocalStackSlotPass::insertFrameReferenceRegisters(MachineFunction &Fn) { std::pair(BaseReg, LocalOffsets[FrameIdx] + InstrOffset)); ++NumBaseRegisters; + UsedBaseReg = true; } assert(BaseReg != 0 && "Unable to allocate virtual base register!"); @@ -288,4 +290,5 @@ void LocalStackSlotPass::insertFrameReferenceRegisters(MachineFunction &Fn) { } } } + return UsedBaseReg; } -- 2.11.0