From 45b306480ec9cef365c5f96303f887fe2eef752a Mon Sep 17 00:00:00 2001 From: Dmitry Babokin Date: Wed, 20 Jul 2016 22:16:50 +0300 Subject: [PATCH] -Adding support for LLVM 4.0 -Switching 3.9 support to branch/release_39 -Switching 3.8 support to tags/release_381 --- alloy.py | 18 ++++++++++++------ builtins/dispatch.ll | 2 ++ builtins/target-knl.ll | 4 ++++ builtins/target-skx.ll | 4 ++++ builtins/util-nvptx.m4 | 6 ++++-- builtins/util.m4 | 12 ++++++++++++ ispc.h | 2 +- ispc_version.h | 3 ++- module.cpp | 1 + 9 files changed, 42 insertions(+), 10 deletions(-) diff --git a/alloy.py b/alloy.py index 306310fd..0d9a5b44 100755 --- a/alloy.py +++ b/alloy.py @@ -124,8 +124,11 @@ 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.9": + SVN_PATH="branches/release_39" + version_LLVM = "3_9" if version_LLVM == "3.8": - SVN_PATH="tags/RELEASE_380/final" + SVN_PATH="tags/RELEASE_381/final" version_LLVM = "3_8" if version_LLVM == "3.7": SVN_PATH="tags/RELEASE_370/final" @@ -352,6 +355,7 @@ def unsupported_llvm_targets(LLVM_VERSION): "3.7":["avx512skx-i32x16"], "3.8":[], "3.9":[], + "4.0":[], "trunk":[]} return prohibited_list[LLVM_VERSION] @@ -476,8 +480,10 @@ def build_ispc(version_LLVM, make): temp = "3_7" if version_LLVM == "3.8": temp = "3_8" - if version_LLVM == "trunk": + if version_LLVM == "3.9": temp = "3_9" + if version_LLVM == "trunk": + temp = "4_0" 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) @@ -617,7 +623,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", "3.8", "trunk"]: + for i in ["3.2", "3.3", "3.4", "3.5", "3.6", "3.7", "3.8", "3.9", "trunk"]: if i in only: LLVM.append(i) if "current" in only: @@ -903,7 +909,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 3.8 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 3.9 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): @@ -1013,7 +1019,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 3.8 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 3.9 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 ' + @@ -1054,7 +1060,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, 3.8, 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, 3.9, 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 2b8d8dff..ea17cf99 100644 --- a/builtins/dispatch.ll +++ b/builtins/dispatch.ll @@ -151,6 +151,8 @@ define(`PTR_OP_ARGS', LLVM_VERSION, LLVM_3_8, ``$1 , $1 *'', LLVM_VERSION, LLVM_3_9, + ``$1 , $1 *'', + LLVM_VERSION, LLVM_4_0, ``$1 , $1 *'', ``$1 *'' ) diff --git a/builtins/target-knl.ll b/builtins/target-knl.ll index bf75c20e..7676efcc 100644 --- a/builtins/target-knl.ll +++ b/builtins/target-knl.ll @@ -36,6 +36,8 @@ ifelse(LLVM_VERSION, LLVM_3_7, LLVM_VERSION, LLVM_3_8, `include(`target-avx512-common.ll')', LLVM_VERSION, LLVM_3_9, + `include(`target-avx512-common.ll')', + LLVM_VERSION, LLVM_4_0, `include(`target-avx512-common.ll')' ) @@ -60,6 +62,8 @@ ifelse(LLVM_VERSION, LLVM_3_7, LLVM_VERSION, LLVM_3_8, rcp_rsqrt_varying_float_knl(), LLVM_VERSION, LLVM_3_9, + rcp_rsqrt_varying_float_knl(), + LLVM_VERSION, LLVM_4_0, rcp_rsqrt_varying_float_knl() ) diff --git a/builtins/target-skx.ll b/builtins/target-skx.ll index d330f259..18dad12c 100644 --- a/builtins/target-skx.ll +++ b/builtins/target-skx.ll @@ -35,6 +35,8 @@ define(`WIDTH',`16') ifelse(LLVM_VERSION, LLVM_3_8, `include(`target-avx512-common.ll')', LLVM_VERSION, LLVM_3_9, + `include(`target-avx512-common.ll')', + LLVM_VERSION, LLVM_4_0, `include(`target-avx512-common.ll')' ) @@ -80,6 +82,8 @@ define <16 x float> @__rsqrt_varying_float(<16 x float> %v) nounwind readonly al ifelse(LLVM_VERSION, LLVM_3_8, rcp_rsqrt_varying_float_skx(), LLVM_VERSION, LLVM_3_9, + rcp_rsqrt_varying_float_skx(), + LLVM_VERSION, LLVM_4_0, rcp_rsqrt_varying_float_skx() ) diff --git a/builtins/util-nvptx.m4 b/builtins/util-nvptx.m4 index 2ed57b73..98a2844c 100644 --- a/builtins/util-nvptx.m4 +++ b/builtins/util-nvptx.m4 @@ -54,9 +54,11 @@ define(`MASK_HIGH_BIT_ON', define(`PTR_OP_ARGS', ifelse(LLVM_VERSION, LLVM_3_7, ``$1 , $1 *'', - ifelse(LLVM_VERSION, LLVM_3_8, + LLVM_VERSION, LLVM_3_8, ``$1 , $1 *'', - ifelse(LLVM_VERSION, LLVM_3_9, + LLVM_VERSION, LLVM_3_9, + ``$1 , $1 *'', + LLVM_VERSION, LLVM_4_0, ``$1 , $1 *'', ``$1 *'' ) diff --git a/builtins/util.m4 b/builtins/util.m4 index 3f2f5737..62ca36c8 100644 --- a/builtins/util.m4 +++ b/builtins/util.m4 @@ -57,6 +57,8 @@ define(`PTR_OP_ARGS', LLVM_VERSION, LLVM_3_8, ``$1 , $1 *'', LLVM_VERSION, LLVM_3_9, + ``$1 , $1 *'', + LLVM_VERSION, LLVM_4_0, ``$1 , $1 *'', ``$1 *'' ) @@ -69,6 +71,8 @@ define(`MdORi64', ``i64'', LLVM_VERSION, LLVM_3_9, ``i64'', + LLVM_VERSION, LLVM_4_0, + ``i64'', ``double'' ) ) @@ -78,6 +82,8 @@ define(`MfORi32', ``i32'', LLVM_VERSION, LLVM_3_9, ``i32'', + LLVM_VERSION, LLVM_4_0, + ``i32'', ``float'' ) ) @@ -1586,6 +1592,9 @@ define <$1 x $2> @__atomic_compare_exchange_$3_global($2* %ptr, <$1 x $2> %cmp, ',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 + ',LLVM_VERSION,LLVM_4_0,` + %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 ') @@ -1614,6 +1623,9 @@ define $2 @__atomic_compare_exchange_uniform_$3_global($2* %ptr, $2 %cmp, ',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 + ',LLVM_VERSION,LLVM_4_0,` + %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 b4d0e22c..c73d1345 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, 3.8 and 3.9 development branch are supported" +#error "Only LLVM 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9 and 4.0 development branch are supported" #endif #if defined(_WIN32) || defined(_WIN64) diff --git a/ispc_version.h b/ispc_version.h index 940585fd..7122d55c 100644 --- a/ispc_version.h +++ b/ispc_version.h @@ -51,9 +51,10 @@ #define ISPC_LLVM_3_7 30700 #define ISPC_LLVM_3_8 30800 #define ISPC_LLVM_3_9 30900 +#define ISPC_LLVM_4_0 40000 #define OLDEST_SUPPORTED_LLVM ISPC_LLVM_3_2 -#define LATEST_SUPPORTED_LLVM ISPC_LLVM_3_9 +#define LATEST_SUPPORTED_LLVM ISPC_LLVM_4_0 #ifdef __ispc__xstr #undef __ispc__xstr diff --git a/module.cpp b/module.cpp index ebf46c25..05ab6934 100644 --- a/module.cpp +++ b/module.cpp @@ -124,6 +124,7 @@ #include #include #include +#include #include #include #include