mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 18:06:05 +00:00

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
10 lines
348 B
C
10 lines
348 B
C
// REQUIRES: systemz-registered-target
|
|
// RUN: %clang_cc1 -target-cpu zEC12 -triple s390x-unknown-unknown \
|
|
// RUN: -Wall -Wno-unused -Werror -fsyntax-only -verify %s
|
|
|
|
void test1(void) {
|
|
__builtin_tabort (0); // expected-error {{invalid transaction abort code}}
|
|
__builtin_tabort (255); // expected-error {{invalid transaction abort code}}
|
|
}
|
|
|