Changes in directory llvm/lib/Target/ARM:
ARMRegisterInfo.cpp updated: 1.47 -> 1.48 --- Log message: ARM fix: Miscompilation when frame pointer can't be eliminated. Uninitialized frame pointer register is used. --- Diffs of the changes: (+9 -10) ARMRegisterInfo.cpp | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-) Index: llvm/lib/Target/ARM/ARMRegisterInfo.cpp diff -u llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.47 llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.48 --- llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.47 Tue Jan 30 17:01:46 2007 +++ llvm/lib/Target/ARM/ARMRegisterInfo.cpp Wed Jan 31 07:12:46 2007 @@ -573,8 +573,7 @@ // There is alloca()'s in this function, must reference off the frame // pointer instead. FrameReg = getFrameRegister(MF); - if (STI.isTargetDarwin()) - Offset -= AFI->getFramePtrSpillOffset(); + Offset -= AFI->getFramePtrSpillOffset(); } unsigned Opcode = MI.getOpcode(); @@ -882,6 +881,12 @@ } } + if (hasFP(MF)) { + MF.changePhyRegUsed(FramePtr, true); + NumGPRSpills++; + CanEliminateFrame = false; + } + if (!CanEliminateFrame) { AFI->setHasStackFrame(true); @@ -895,11 +900,6 @@ ForceLRSpill = false; } - if (STI.isTargetDarwin()) { - MF.changePhyRegUsed(FramePtr, true); - NumGPRSpills++; - } - // If stack and double are 8-byte aligned and we are spilling an odd number // of GPRs. Spill one extra callee save GPR so we won't have to pad between // the integer and double callee save areas. @@ -1030,7 +1030,7 @@ ++MBBI; // Point FP to the stack slot that contains the previous FP. - if (STI.isTargetDarwin()) + if (hasFP(MF)) BuildMI(MBB, MBBI, TII.get(isThumb ? ARM::tADDrSPi : ARM::ADDri), FramePtr) .addFrameIndex(FramePtrSpillFI).addImm(0); @@ -1116,7 +1116,7 @@ if (isThumb) emitSPUpdate(MBB, MBBI, NumBytes, isThumb, TII); else { - if (STI.isTargetDarwin()) { + if (hasFP(MF)){ NumBytes = AFI->getFramePtrSpillOffset() - NumBytes; // Reset SP based on frame pointer only if the stack frame extends beyond // frame pointer stack slot. @@ -1131,7 +1131,6 @@ } else if (NumBytes) { emitSPUpdate(MBB, MBBI, NumBytes, false, TII); } - // Move SP to start of integer callee save spill area 2. movePastCSLoadStoreOps(MBB, MBBI, ARM::FLDD, 3, STI); emitSPUpdate(MBB, MBBI, AFI->getDPRCalleeSavedAreaSize(), false, TII); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits