From 536b30e12c22db4f72a77d42a389ea1141fbcb70 Mon Sep 17 00:00:00 2001 From: Dmitry Babokin Date: Thu, 14 Jan 2016 17:26:38 +0300 Subject: [PATCH] LLVM 3.9 version support --- alloy.py | 16 +++++++++++----- builtins/dispatch.ll | 2 ++ builtins/target-knl.ll | 2 ++ builtins/util-nvptx.m4 | 4 ++++ builtins/util.m4 | 16 ++++++++++++++-- ispc.h | 2 +- ispc_version.h | 3 ++- 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/alloy.py b/alloy.py index 4f734128..cbebe94d 100755 --- a/alloy.py +++ b/alloy.py @@ -124,6 +124,9 @@ def build_LLVM(version_LLVM, revision, folder, tarball, debug, selfbuild, extra, FOLDER_NAME=version_LLVM if version_LLVM == "trunk": SVN_PATH="trunk" + if version_LLVM == "3.8": + SVN_PATH="branches/release_38" + version_LLVM = "3_8" if version_LLVM == "3.7": SVN_PATH="tags/RELEASE_370/final" version_LLVM = "3_7" @@ -300,6 +303,7 @@ def unsupported_llvm_targets(LLVM_VERSION): "3.6":["avx512knl-i32x16"], "3.7":[], "3.8":[], + "3.9":[], "trunk":[]} return prohibited_list[LLVM_VERSION] @@ -419,8 +423,10 @@ def build_ispc(version_LLVM, make): temp = "3_6" if version_LLVM == "3.7": temp = "3_7" - if version_LLVM == "trunk": + if version_LLVM == "3.8": temp = "3_8" + if version_LLVM == "trunk": + temp = "3_9" os.environ["LLVM_VERSION"] = "LLVM_" + temp try_do_LLVM("clean ISPC for building", "msbuild ispc.vcxproj /t:clean", True) try_do_LLVM("build ISPC with LLVM version " + version_LLVM + " ", "msbuild ispc.vcxproj /V:m /p:Platform=Win32 /p:Configuration=Release /t:rebuild", True) @@ -560,7 +566,7 @@ def validation_run(only, only_targets, reference_branch, number, notify, update, archs.append("x86-64") if "native" in only: sde_targets_t = [] - for i in ["3.2", "3.3", "3.4", "3.5", "3.6", "3.7", "trunk"]: + for i in ["3.2", "3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "trunk"]: if i in only: LLVM.append(i) if "current" in only: @@ -843,7 +849,7 @@ def Main(): if os.environ.get("SMTP_ISPC") == None: error("you have no SMTP_ISPC in your environment for option notify", 1) if options.only != "": - test_only_r = " 3.2 3.3 3.4 3.5 3.6 3.7 trunk current build stability performance x86 x86-64 x86_64 -O0 -O2 native debug nodebug " + test_only_r = " 3.2 3.3 3.4 3.5 3.6 3.7 3.8 trunk current build stability performance x86 x86-64 x86_64 -O0 -O2 native debug nodebug " test_only = options.only.split(" ") for iterator in test_only: if not (" " + iterator + " " in test_only_r): @@ -953,7 +959,7 @@ if __name__ == '__main__': llvm_group = OptionGroup(parser, "Options for building LLVM", "These options must be used with -b option.") llvm_group.add_option('--version', dest='version', - help='version of llvm to build: 3.2 3.3 3.4 3.5 3.6 3.7 trunk. Default: trunk', default="trunk") + help='version of llvm to build: 3.2 3.3 3.4 3.5 3.6 3.7 3.8 trunk. Default: trunk', default="trunk") llvm_group.add_option('--with-gcc-toolchain', dest='gcc_toolchain_path', help='GCC install dir to use when building clang. It is important to set when ' + 'you have alternative gcc installation. Note that otherwise gcc from standard ' + @@ -994,7 +1000,7 @@ if __name__ == '__main__': run_group.add_option('--only', dest='only', help='set types of tests. Possible values:\n' + '-O0, -O2, x86, x86-64, stability (test only stability), performance (test only performance),\n' + - 'build (only build with different LLVM), 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, trunk, native (do not use SDE),\n' + + 'build (only build with different LLVM), 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, trunk, native (do not use SDE),\n' + 'current (do not rebuild ISPC), debug (only with debug info), nodebug (only without debug info, default).', default="") run_group.add_option('--perf_LLVM', dest='perf_llvm', diff --git a/builtins/dispatch.ll b/builtins/dispatch.ll index 8a252f56..3d01c910 100644 --- a/builtins/dispatch.ll +++ b/builtins/dispatch.ll @@ -149,6 +149,8 @@ define(`PTR_OP_ARGS', ifelse(LLVM_VERSION, LLVM_3_7, ``$1 , $1 *'', LLVM_VERSION, LLVM_3_8, + ``$1 , $1 *'', + LLVM_VERSION, LLVM_3_9, ``$1 , $1 *'', ``$1 *'' ) diff --git a/builtins/target-knl.ll b/builtins/target-knl.ll index 2272e658..903e3e80 100644 --- a/builtins/target-knl.ll +++ b/builtins/target-knl.ll @@ -35,6 +35,8 @@ define(`WIDTH',`16') ifelse(LLVM_VERSION, LLVM_3_7, `include(`target-avx512-common.ll')', LLVM_VERSION, LLVM_3_8, + `include(`target-avx512-common.ll')', + LLVM_VERSION, LLVM_3_9, `include(`target-avx512-common.ll')' ) diff --git a/builtins/util-nvptx.m4 b/builtins/util-nvptx.m4 index 6b61b850..e8511a3d 100644 --- a/builtins/util-nvptx.m4 +++ b/builtins/util-nvptx.m4 @@ -54,6 +54,10 @@ define(`MASK_HIGH_BIT_ON', define(`PTR_OP_ARGS', ifelse(LLVM_VERSION, LLVM_3_7, ``$1 , $1 *'', + ifelse(LLVM_VERSION, LLVM_3_8, + ``$1 , $1 *'', + ifelse(LLVM_VERSION, LLVM_3_9, + ``$1 , $1 *'', ``$1 *'' ) ) diff --git a/builtins/util.m4 b/builtins/util.m4 index dcd8addc..cdc75e7f 100644 --- a/builtins/util.m4 +++ b/builtins/util.m4 @@ -55,6 +55,8 @@ define(`PTR_OP_ARGS', ifelse(LLVM_VERSION, LLVM_3_7, ``$1 , $1 *'', LLVM_VERSION, LLVM_3_8, + ``$1 , $1 *'', + LLVM_VERSION, LLVM_3_9, ``$1 , $1 *'', ``$1 *'' ) @@ -64,6 +66,8 @@ define(`PTR_OP_ARGS', define(`MdORi64', ifelse(LLVM_VERSION, LLVM_3_8, + ``i64'', + LLVM_VERSION, LLVM_3_9, ``i64'', ``double'' ) @@ -71,6 +75,8 @@ define(`MdORi64', define(`MfORi32', ifelse(LLVM_VERSION, LLVM_3_8, + ``i32'', + LLVM_VERSION, LLVM_3_9, ``i32'', ``float'' ) @@ -1564,7 +1570,7 @@ define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp, %cmp_LANE_ID = extractelement <$1 x $2> %cmp, i32 LANE %val_LANE_ID = extractelement <$1 x $2> %val, i32 LANE - ;; 3.5, 3.6, 3.7 and 3.8 code is the same since m4 has no OR and AND operators + ;; 3.5, 3.6, 3.7, 3.8 and 3.9 code is the same since m4 has no OR and AND operators ifelse(LLVM_VERSION,LLVM_3_5,` %r_LANE_ID_t = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst seq_cst %r_LANE_ID = extractvalue { $2, i1 } %r_LANE_ID_t, 0 @@ -1577,6 +1583,9 @@ define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp, ',LLVM_VERSION,LLVM_3_8,` %r_LANE_ID_t = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst seq_cst %r_LANE_ID = extractvalue { $2, i1 } %r_LANE_ID_t, 0 + ',LLVM_VERSION,LLVM_3_9,` + %r_LANE_ID_t = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst seq_cst + %r_LANE_ID = extractvalue { $2, i1 } %r_LANE_ID_t, 0 ',` %r_LANE_ID = cmpxchg $2 * %ptr, $2 %cmp_LANE_ID, $2 %val_LANE_ID seq_cst ') @@ -1589,7 +1598,7 @@ define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp, define $2 @__atomic_compare_exchange_uniform_$3_global($2* %ptr, $2 %cmp, $2 %val) nounwind alwaysinline { - ;; 3.5, 3.6, 3.7 and 3.8 code is the same since m4 has no OR and AND operators + ;; 3.5, 3.6, 3.7, 3.8 and 3.9 code is the same since m4 has no OR and AND operators ifelse(LLVM_VERSION,LLVM_3_5,` %r_t = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst seq_cst %r = extractvalue { $2, i1 } %r_t, 0 @@ -1602,6 +1611,9 @@ define $2 @__atomic_compare_exchange_uniform_$3_global($2* %ptr, $2 %cmp, ',LLVM_VERSION,LLVM_3_8,` %r_t = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst seq_cst %r = extractvalue { $2, i1 } %r_t, 0 + ',LLVM_VERSION,LLVM_3_9,` + %r_t = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst seq_cst + %r = extractvalue { $2, i1 } %r_t, 0 ',` %r = cmpxchg $2 * %ptr, $2 %cmp, $2 %val seq_cst ') diff --git a/ispc.h b/ispc.h index 0c4128ca..6231062a 100644 --- a/ispc.h +++ b/ispc.h @@ -41,7 +41,7 @@ #include "ispc_version.h" #if ISPC_LLVM_VERSION < OLDEST_SUPPORTED_LLVM || ISPC_LLVM_VERSION > LATEST_SUPPORTED_LLVM -#error "Only LLVM 3.2, 3.3, 3.4, 3.5, 3.6, 3.7 and 3.8 development branch are supported" +#error "Only LLVM 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8 and 3.9 development branch are supported" #endif #if defined(_WIN32) || defined(_WIN64) diff --git a/ispc_version.h b/ispc_version.h index fd73934a..6b2bad4a 100644 --- a/ispc_version.h +++ b/ispc_version.h @@ -50,9 +50,10 @@ #define ISPC_LLVM_3_6 30600 #define ISPC_LLVM_3_7 30700 #define ISPC_LLVM_3_8 30800 +#define ISPC_LLVM_3_9 30900 #define OLDEST_SUPPORTED_LLVM ISPC_LLVM_3_2 -#define LATEST_SUPPORTED_LLVM ISPC_LLVM_3_8 +#define LATEST_SUPPORTED_LLVM ISPC_LLVM_3_9 #ifdef __ispc__xstr #undef __ispc__xstr