diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-06-07 18:39:19 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-06-07 18:39:19 +0000 |
| commit | 55d1145bd5efdd50431cf9731aea6464a443aa1d (patch) | |
| tree | c86ffc52c32c620d45ffe9b3feee2a199f8ce811 | |
| parent | 5d53fcda7c4cf189b094caf1ed3270d416a9610f (diff) | |
| download | bcm5719-llvm-55d1145bd5efdd50431cf9731aea6464a443aa1d.tar.gz bcm5719-llvm-55d1145bd5efdd50431cf9731aea6464a443aa1d.zip | |
Use a base register instead of an index register with the local dynamic model.
Fixes pr13048.
llvm-svn: 158158
| -rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/tls-pic.ll | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 9dc5c7035d4..df7507ce3d6 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -596,6 +596,14 @@ static void LowerTlsAddr(MCStreamer &OutStreamer, LEA.addOperand(MCOperand::CreateReg(0)); // index LEA.addOperand(MCOperand::CreateExpr(symRef)); // disp LEA.addOperand(MCOperand::CreateReg(0)); // seg + } else if (SRVK == MCSymbolRefExpr::VK_TLSLDM) { + LEA.setOpcode(X86::LEA32r); + LEA.addOperand(MCOperand::CreateReg(X86::EAX)); // dest + LEA.addOperand(MCOperand::CreateReg(X86::EBX)); // base + LEA.addOperand(MCOperand::CreateImm(1)); // scale + LEA.addOperand(MCOperand::CreateReg(0)); // index + LEA.addOperand(MCOperand::CreateExpr(symRef)); // disp + LEA.addOperand(MCOperand::CreateReg(0)); // seg } else { LEA.setOpcode(X86::LEA32r); LEA.addOperand(MCOperand::CreateReg(X86::EAX)); // dest diff --git a/llvm/test/CodeGen/X86/tls-pic.ll b/llvm/test/CodeGen/X86/tls-pic.ll index c3e82167256..51c3d2363f8 100644 --- a/llvm/test/CodeGen/X86/tls-pic.ll +++ b/llvm/test/CodeGen/X86/tls-pic.ll @@ -75,7 +75,7 @@ entry: } ; X32: f5: -; X32: leal {{[jk]}}@TLSLDM +; X32: leal {{[jk]}}@TLSLDM(%ebx) ; X32-NEXT: calll ___tls_get_addr@PLT ; X32-NEXT: movl {{[jk]}}@DTPOFF(%eax) ; X32-NEXT: addl {{[jk]}}@DTPOFF(%eax) |

