[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)
commitbebd59c74ba55cdda62466f72c5031274c37b93b
treec34c3d4c8319dd1a1c1f92fc26d519784f08e7a3
parent5d27960454e35781341229dc3e539f6a6c37fe23
[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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229654 91177308-0d34-0410-b5e6-96231b3b80d8
21 files changed:
lib/Target/SystemZ/CMakeLists.txt
lib/Target/SystemZ/SystemZ.h
lib/Target/SystemZ/SystemZAsmPrinter.cpp
lib/Target/SystemZ/SystemZConstantPoolValue.cpp
lib/Target/SystemZ/SystemZConstantPoolValue.h
lib/Target/SystemZ/SystemZISelLowering.cpp
lib/Target/SystemZ/SystemZISelLowering.h
lib/Target/SystemZ/SystemZInstrInfo.h
lib/Target/SystemZ/SystemZInstrInfo.td
lib/Target/SystemZ/SystemZLDCleanup.cpp [new file with mode: 0644]
lib/Target/SystemZ/SystemZMCInstLower.cpp
lib/Target/SystemZ/SystemZMachineFunctionInfo.h
lib/Target/SystemZ/SystemZOperators.td
lib/Target/SystemZ/SystemZTargetMachine.cpp
test/CodeGen/SystemZ/tls-01.ll
test/CodeGen/SystemZ/tls-02.ll [new file with mode: 0644]
test/CodeGen/SystemZ/tls-03.ll [new file with mode: 0644]
test/CodeGen/SystemZ/tls-04.ll [new file with mode: 0644]
test/CodeGen/SystemZ/tls-05.ll [new file with mode: 0644]
test/CodeGen/SystemZ/tls-06.ll [new file with mode: 0644]
test/CodeGen/SystemZ/tls-07.ll [new file with mode: 0644]