summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86FrameLowering.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-02-10 21:22:05 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-02-10 21:22:05 +0000
commit13d0b11d7b4e22da01dcef85e5302296edd8aa9e (patch)
tree17bb90aa7728ceab24990d4c060126bc9f6bed13 /llvm/lib/Target/X86/X86FrameLowering.cpp
parentcffff26b68517ba2851fb34c67bdf6faf073ac5d (diff)
downloadbcm5719-llvm-13d0b11d7b4e22da01dcef85e5302296edd8aa9e.tar.gz
bcm5719-llvm-13d0b11d7b4e22da01dcef85e5302296edd8aa9e.zip
X86: Make @llvm.frameaddress work correctly with Windows unwind codes
Simply loading or storing the frame pointer is not sufficient for Windows targets. Instead, create a synthetic frame object that we will lower later. References to this synthetic object will be replaced with the correct reference to the frame address. llvm-svn: 228748
Diffstat (limited to 'llvm/lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r--llvm/lib/Target/X86/X86FrameLowering.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index adeb46df8d5..d049c02da77 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -1242,6 +1242,9 @@ int X86FrameLowering::getFrameIndexOffset(const MachineFunction &MF,
NumBytes = FrameSize - CSSize;
}
uint64_t SEHFrameOffset = calculateSetFPREG(NumBytes);
+ if (FI && FI == X86FI->getFAIndex())
+ return -SEHFrameOffset;
+
// FPDelta is the offset from the "traditional" FP location of the old base
// pointer followed by return address and the location required by the
// restricted Win64 prologue.
OpenPOWER on IntegriCloud