X86 TLS: optimize the implementation of "local exec" model.
authorLauro Ramos Venancio <lauro.venancio@gmail.com>
Mon, 23 Apr 2007 01:28:10 +0000 (01:28 +0000)
committerLauro Ramos Venancio <lauro.venancio@gmail.com>
Mon, 23 Apr 2007 01:28:10 +0000 (01:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36359 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrInfo.td

index 1885547ebc0b420009fdc2b3010f48afafc4a69d..c330bf99080ccaba92a8ccd02eaa6cd9f02a5fee 100644 (file)
@@ -2467,9 +2467,15 @@ def TLS_addr : I<0, Pseudo, (ops GR32:$dst, i32imm:$sym),
                Imp<[EBX],[]>;
 
 let AddedComplexity = 10 in
-def TLS_gs : I<0, Pseudo, (ops GR32:$dst, GR32:$src),
-               "movl %gs:($src), $dst",
-               [(set GR32:$dst, (load (add X86TLStp, GR32:$src)))]>;
+def TLS_gs_rr : I<0, Pseudo, (ops GR32:$dst, GR32:$src),
+                  "movl %gs:($src), $dst",
+                  [(set GR32:$dst, (load (add X86TLStp, GR32:$src)))]>;
+
+let AddedComplexity = 15 in
+def TLS_gs_ri : I<0, Pseudo, (ops GR32:$dst, i32imm:$src),
+                  "movl %gs:${src:mem}, $dst",
+                  [(set GR32:$dst,
+                    (load (add X86TLStp, (X86Wrapper tglobaltlsaddr:$src))))]>;
 
 def TLS_tp : I<0, Pseudo, (ops GR32:$dst),
                "movl %gs:0, $dst",
@@ -2491,6 +2497,7 @@ def DWARF_LOC   : I<0, Pseudo, (ops i32imm:$line, i32imm:$col, i32imm:$file),
 // ConstantPool GlobalAddress, ExternalSymbol, and JumpTable
 def : Pat<(i32 (X86Wrapper tconstpool  :$dst)), (MOV32ri tconstpool  :$dst)>;
 def : Pat<(i32 (X86Wrapper tjumptable  :$dst)), (MOV32ri tjumptable  :$dst)>;
+def : Pat<(i32 (X86Wrapper tglobaltlsaddr:$dst)), (MOV32ri tglobaltlsaddr:$dst)>;
 def : Pat<(i32 (X86Wrapper tglobaladdr :$dst)), (MOV32ri tglobaladdr :$dst)>;
 def : Pat<(i32 (X86Wrapper texternalsym:$dst)), (MOV32ri texternalsym:$dst)>;