From b316f90e57aa4d4a5d2f3337c5dd33d784d6e74a Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 11 Mar 2009 22:40:04 +0000 Subject: [PATCH] optimize i8 and i16 tls values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66725 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrInfo.td | 18 ++++++++++++++++++ test/CodeGen/X86/tls11.ll | 10 ++++++++++ test/CodeGen/X86/tls12.ll | 10 ++++++++++ 3 files changed, 38 insertions(+) create mode 100644 test/CodeGen/X86/tls11.ll create mode 100644 test/CodeGen/X86/tls12.ll diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index 00ebce740a5..64d002171a4 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -2937,6 +2937,24 @@ def TLS_gs_ri : I<0x8B, Pseudo, (outs GR32:$dst), (ins i32imm:$src), (load (add X86TLStp, (X86Wrapper tglobaltlsaddr:$src))))]>, SegGS; +let AddedComplexity = 15 in +def TLS_ext16_gs_ri : I<0x8B, Pseudo, (outs GR32:$dst), (ins i32imm:$src), + "movzwl\t%gs:${src:mem}, $dst", + [(set GR32:$dst, + (extloadi32i16 + (add X86TLStp, + (X86Wrapper tglobaltlsaddr:$src))))]>, + SegGS; + +let AddedComplexity = 15 in +def TLS_ext8_gs_ri : I<0x8B, Pseudo, (outs GR32:$dst), (ins i32imm:$src), + "movzbl\t%gs:${src:mem}, $dst", + [(set GR32:$dst, + (extloadi32i8 + (add X86TLStp, + (X86Wrapper tglobaltlsaddr:$src))))]>, + SegGS; + def TLS_tp : I<0x8B, Pseudo, (outs GR32:$dst), (ins), "movl\t%gs:0, $dst", [(set GR32:$dst, X86TLStp)]>, SegGS; diff --git a/test/CodeGen/X86/tls11.ll b/test/CodeGen/X86/tls11.ll new file mode 100644 index 00000000000..32d0a1204ca --- /dev/null +++ b/test/CodeGen/X86/tls11.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu > %t +; RUN: grep {movzwl %gs:i@NTPOFF, %eax} %t + +@i = thread_local global i16 15 + +define i16 @f() { +entry: + %tmp1 = load i16* @i + ret i16 %tmp1 +} diff --git a/test/CodeGen/X86/tls12.ll b/test/CodeGen/X86/tls12.ll new file mode 100644 index 00000000000..c6f766d4472 --- /dev/null +++ b/test/CodeGen/X86/tls12.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu > %t +; RUN: grep {movzbl %gs:i@NTPOFF, %eax} %t + +@i = thread_local global i8 15 + +define i8 @f() { +entry: + %tmp1 = load i8* @i + ret i8 %tmp1 +}