diff options
| author | Matthias Braun <matze@braunis.de> | 2017-04-20 23:34:46 +0000 |
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2017-04-20 23:34:46 +0000 |
| commit | 63e3e8ce721e7319ffc53a275cb26b0ebf4c090b (patch) | |
| tree | 3400e6450393b711f0e65bca1bc3fbc70ed93b83 /llvm/lib | |
| parent | 8048b44a8cc35474b36c873280dcd2fe65f75298 (diff) | |
| download | bcm5719-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.cpp | 7 |
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); |

