[llvm-commits] CVS: llvm/lib/Target/ARM/ARMRegisterInfo.cpp
Lauro Ramos Venancio
lauro.venancio at gmail.com
Wed Jan 31 05:13:04 PST 2007
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);
More information about the llvm-commits
mailing list