diff options
| author | Manman Ren <manman.ren@gmail.com> | 2016-01-16 16:39:46 +0000 |
|---|---|---|
| committer | Manman Ren <manman.ren@gmail.com> | 2016-01-16 16:39:46 +0000 |
| commit | 53a54c41d7d68d398302e7589f2263ad796feeca (patch) | |
| tree | 93291e6ef04dbc52af5721055250caf2288ed10a /llvm/lib | |
| parent | 8270fe5960664384a7cb5f38d0fddacf2e3319eb (diff) | |
| download | bcm5719-llvm-53a54c41d7d68d398302e7589f2263ad796feeca.tar.gz bcm5719-llvm-53a54c41d7d68d398302e7589f2263ad796feeca.zip | |
CXX_FAST_TLS calling convention: fix issue on x86-64.
%RBP can't be handled explicitly. We generate the following code:
pushq %rbp
movq %rsp, %rbp
...
movq %rbx, (%rbp) ## 8-byte Spill
where %rbp will be overwritten by the spilled value.
The fix is to let PEI handle %RBP.
PR26136
llvm-svn: 257997
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86CallingConv.td | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86CallingConv.td b/llvm/lib/Target/X86/X86CallingConv.td index e8b96e74a7a..ed2e8806716 100644 --- a/llvm/lib/Target/X86/X86CallingConv.td +++ b/llvm/lib/Target/X86/X86CallingConv.td @@ -832,10 +832,10 @@ def CSR_64_TLS_Darwin : CalleeSavedRegs<(add CSR_64, RCX, RDX, RSI, R8, R9, R10, R11)>; // CSRs that are handled by prologue, epilogue. -def CSR_64_CXX_TLS_Darwin_PE : CalleeSavedRegs<(add)>; +def CSR_64_CXX_TLS_Darwin_PE : CalleeSavedRegs<(add RBP)>; // CSRs that are handled explicitly via copies. -def CSR_64_CXX_TLS_Darwin_ViaCopy : CalleeSavedRegs<(add CSR_64_TLS_Darwin)>; +def CSR_64_CXX_TLS_Darwin_ViaCopy : CalleeSavedRegs<(sub CSR_64_TLS_Darwin, RBP)>; // All GPRs - except r11 def CSR_64_RT_MostRegs : CalleeSavedRegs<(add CSR_64, RAX, RCX, RDX, RSI, RDI, |

