aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-06-07 18:39:19 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-06-07 18:39:19 +0000
commitc07f5bbd3b3d93e087160c87f0e5be7419772687 (patch)
tree108ff19066cd1b04eb1ddbea61af13c595935b90
parent83569cb062930a62e96ba87a47b002366e00124d (diff)
downloadexternal_llvm-c07f5bbd3b3d93e087160c87f0e5be7419772687.zip
external_llvm-c07f5bbd3b3d93e087160c87f0e5be7419772687.tar.gz
external_llvm-c07f5bbd3b3d93e087160c87f0e5be7419772687.tar.bz2
Use a base register instead of an index register with the local dynamic model.
Fixes pr13048. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158158 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86MCInstLower.cpp8
-rw-r--r--test/CodeGen/X86/tls-pic.ll2
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/Target/X86/X86MCInstLower.cpp b/lib/Target/X86/X86MCInstLower.cpp
index 9dc5c70..df7507c 100644
--- a/lib/Target/X86/X86MCInstLower.cpp
+++ b/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/test/CodeGen/X86/tls-pic.ll b/test/CodeGen/X86/tls-pic.ll
index c3e8216..51c3d23 100644
--- a/test/CodeGen/X86/tls-pic.ll
+++ b/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)