summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2017-04-20 23:34:46 +0000
committerMatthias Braun <matze@braunis.de>2017-04-20 23:34:46 +0000
commit63e3e8ce721e7319ffc53a275cb26b0ebf4c090b (patch)
tree3400e6450393b711f0e65bca1bc3fbc70ed93b83 /llvm/lib
parent8048b44a8cc35474b36c873280dcd2fe65f75298 (diff)
downloadbcm5719-llvm-63e3e8ce721e7319ffc53a275cb26b0ebf4c090b.tar.gz
bcm5719-llvm-63e3e8ce721e7319ffc53a275cb26b0ebf4c090b.zip
X86RegisterInfo: eliminateFrameIndex: Force SP for AfterFPPop; NFC
AfterFPPop is used for tailcall/tailjump instructions. We shouldn't ever have frame-pointer/base-pointer relative addressing for those. After all the frame/base pointer should already be restored to their previous values at the return. Make this fact explicit in preparation for an upcoming refactoring. Differential Revision: https://reviews.llvm.org/D32205 llvm-svn: 300922
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86RegisterInfo.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp
index 9bab9a4cf3b..b3683851b4d 100644
--- a/llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp
@@ -675,12 +675,13 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
bool AfterFPPop = Opc == X86::TAILJMPm64 || Opc == X86::TAILJMPm ||
Opc == X86::TCRETURNmi || Opc == X86::TCRETURNmi64;
- if (hasBasePointer(MF))
+ if (AfterFPPop) {
+ assert(FrameIndex < 0 && "Should only reference fixed stack objects here");
+ BasePtr = StackPtr;
+ } else if (hasBasePointer(MF))
BasePtr = (FrameIndex < 0 ? FramePtr : getBaseRegister());
else if (needsStackRealignment(MF))
BasePtr = (FrameIndex < 0 ? FramePtr : StackPtr);
- else if (AfterFPPop)
- BasePtr = StackPtr;
else
BasePtr = (TFI->hasFP(MF) ? FramePtr : StackPtr);
OpenPOWER on IntegriCloud