[SystemZ] Support all TLS access models - CodeGen part
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Wed, 18 Feb 2015 09:13:27 +0000 (09:13 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Wed, 18 Feb 2015 09:13:27 +0000 (09:13 +0000)
commit7db6918e2b2f33efb1f8546672a7f731b00b479d
tree4618c5e34d07f2056903e09faef70331404f695b
parentb2b31cfc3f053b84e62bf6fcd6a607229861ae1a
[SystemZ] Support all TLS access models - CodeGen part

The current SystemZ back-end only supports the local-exec TLS access model.
This patch adds all required CodeGen support for the other TLS models, which
means in particular:

- Expand initial-exec TLS accesses by loading TLS offsets from the GOT
  using @indntpoff relocations.

- Expand general-dynamic and local-dynamic accesses by generating the
  appropriate calls to __tls_get_offset.  Note that this routine has
  a non-standard ABI and requires loading the GOT pointer into %r12,
  so the patch also adds support for the GLOBAL_OFFSET_TABLE ISD node.

- Add a new platform-specific optimization pass to remove redundant
  __tls_get_offset calls in the local-dynamic model (modeled after
  the corresponding X86 pass).

- Add test cases verifying all access models and optimizations.

llvm-svn: 229654
21 files changed:
llvm/lib/Target/SystemZ/CMakeLists.txt
llvm/lib/Target/SystemZ/SystemZ.h
llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
llvm/lib/Target/SystemZ/SystemZConstantPoolValue.cpp
llvm/lib/Target/SystemZ/SystemZConstantPoolValue.h
llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
llvm/lib/Target/SystemZ/SystemZISelLowering.h
llvm/lib/Target/SystemZ/SystemZInstrInfo.h
llvm/lib/Target/SystemZ/SystemZInstrInfo.td
llvm/lib/Target/SystemZ/SystemZLDCleanup.cpp [new file with mode: 0644]
llvm/lib/Target/SystemZ/SystemZMCInstLower.cpp
llvm/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
llvm/lib/Target/SystemZ/SystemZOperators.td
llvm/lib/Target/SystemZ/SystemZTargetMachine.cpp
llvm/test/CodeGen/SystemZ/tls-01.ll
llvm/test/CodeGen/SystemZ/tls-02.ll [new file with mode: 0644]
llvm/test/CodeGen/SystemZ/tls-03.ll [new file with mode: 0644]
llvm/test/CodeGen/SystemZ/tls-04.ll [new file with mode: 0644]
llvm/test/CodeGen/SystemZ/tls-05.ll [new file with mode: 0644]
llvm/test/CodeGen/SystemZ/tls-06.ll [new file with mode: 0644]
llvm/test/CodeGen/SystemZ/tls-07.ll [new file with mode: 0644]