[SystemZ] Support transactional execution on zEC12
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Wed, 1 Apr 2015 12:54:25 +0000 (12:54 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Wed, 1 Apr 2015 12:54:25 +0000 (12:54 +0000)
commit3a610ebf1e7c44309880b2bd7ec9325d3f1db0bd
treedcda64cd90746e94d74abf2688919bd2928a3680
parent57c85f53baf9ea6c14a7f4af52cda2624470cbed
[SystemZ] Support transactional execution on zEC12

The zEC12 provides the transactional-execution facility.  This is exposed
to users via a set of builtin routines on other compilers.  This patch
adds clang support to enable those builtins.  In partciular, the patch:

- enables the transactional-execution feature by default on zEC12
- allows to override presence of that feature via the -mhtm/-mno-htm options
- adds a predefined macro __HTM__ if the feature is enabled
- adds support for the transactional-execution GCC builtins
- adds Sema checking to verify the __builtin_tabort abort code
- adds the s390intrin.h header file (for GCC compatibility)
- adds s390 sections to the htmintrin.h and htmxlintrin.h header files

Since this is first use of target-specific intrinsics on the platform,
the patch creates the include/clang/Basic/BuiltinsSystemZ.def file and
hooks it up in TargetBuiltins.h and lib/Basic/Targets.cpp.

An associated LLVM patch adds the required LLVM IR intrinsics.

For reference, the transactional-execution instructions are documented
in the z/Architecture Principles of Operation for the zEC12:
http://publibfp.boulder.ibm.com/cgi-bin/bookmgr/download/DZ9ZR009.pdf
The associated builtins are documented in the GCC manual:
http://gcc.gnu.org/onlinedocs/gcc/S_002f390-System-z-Built-in-Functions.html
The htmxlintrin.h intrinsics provided for compatibility with the IBM XL
compiler are documented in the "z/OS XL C/C++ Programming Guide".

llvm-svn: 233804
16 files changed:
clang/include/clang/Basic/BuiltinsSystemZ.def [new file with mode: 0644]
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Basic/TargetBuiltins.h
clang/include/clang/Sema/Sema.h
clang/lib/Basic/Targets.cpp
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/CodeGen/CodeGenFunction.h
clang/lib/Driver/Tools.cpp
clang/lib/Headers/htmintrin.h
clang/lib/Headers/htmxlintrin.h
clang/lib/Headers/s390intrin.h [new file with mode: 0644]
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/builtins-systemz-error.c [new file with mode: 0644]
clang/test/CodeGen/builtins-systemz.c [new file with mode: 0644]
clang/test/Driver/systemz-features.cpp [new file with mode: 0644]
clang/test/Preprocessor/predefined-arch-macros.c