summaryrefslogtreecommitdiffstats
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
commit55d1145bd5efdd50431cf9731aea6464a443aa1d (patch)
treec86ffc52c32c620d45ffe9b3feee2a199f8ce811
parent5d53fcda7c4cf189b094caf1ed3270d416a9610f (diff)
downloadbcm5719-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.cpp8
-rw-r--r--llvm/test/CodeGen/X86/tls-pic.ll2
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)
OpenPOWER on IntegriCloud