diff options
| author | Bill Wendling <isanbard@gmail.com> | 2008-07-11 07:18:52 +0000 |
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2008-07-11 07:18:52 +0000 |
| commit | 5774466a3323459e3b9843546cf173e4066eda35 (patch) | |
| tree | 190829cf2c56b45a824f0ef0fcaeccb5bb778254 /llvm | |
| parent | 3994bed1a9baf3913b425a0f04275ab22c624d0c (diff) | |
| download | bcm5719-llvm-5774466a3323459e3b9843546cf173e4066eda35.tar.gz bcm5719-llvm-5774466a3323459e3b9843546cf173e4066eda35.zip | |
The frame address on an x86-64 box needs to be offset by -8, not -4.
llvm-svn: 53450
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/x86-64-frameaddr.ll | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 958f7425cde..5dd0116726e 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -5348,7 +5348,7 @@ SDOperand X86TargetLowering::LowerFRAMEADDR(SDOperand Op, SelectionDAG &DAG) { SDOperand RetAddrFI = getReturnAddressFrameIndex(DAG); return DAG.getNode(ISD::SUB, getPointerTy(), RetAddrFI, - DAG.getIntPtrConstant(4)); + DAG.getIntPtrConstant(!Subtarget->is64Bit() ? 4 : 8)); } SDOperand X86TargetLowering::LowerFRAME_TO_ARGS_OFFSET(SDOperand Op, diff --git a/llvm/test/CodeGen/X86/x86-64-frameaddr.ll b/llvm/test/CodeGen/X86/x86-64-frameaddr.ll new file mode 100644 index 00000000000..86a238f6ab5 --- /dev/null +++ b/llvm/test/CodeGen/X86/x86-64-frameaddr.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep {leaq -8(%rsp), %rax} +@llvm.noinline = appending global [1 x i8*] [ i8* bitcast (i64* ()* @stack_end_address to i8*) ], section "llvm.metadata" + +define internal i64* @stack_end_address() nounwind { +entry: + tail call i8* @llvm.frameaddress( i32 0 ) + bitcast i8* %0 to i64* + ret i64* %1 +} + +declare i8* @llvm.frameaddress(i32) nounwind readnone |

