From 506e311f0682de4e2a375a1f9cccc39283a55fc5 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 8 Jan 2021 15:55:15 -0800 Subject: [PATCH 01/13] [Driver][SYCL] Turn on -fsycl-dead-args-optimization by default Turn on -fsycl-dead-args-optimization by default for -fsycl compilations. Update tests to reflect the new behavior --- clang/lib/Driver/ToolChains/Clang.cpp | 4 ++-- clang/test/Driver/sycl-device-optimizations.cpp | 4 ++-- sycl/test/multi_ptr/multi_ptr.cpp | 4 ++-- sycl/test/scheduler/ReleaseResourcesTest.cpp | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 77ac3a8fe0531..d60c99589272e 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4295,7 +4295,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!RawTriple.isNVPTX() && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, - options::OPT_fno_sycl_dead_args_optimization, false)) + options::OPT_fno_sycl_dead_args_optimization, true)) CmdArgs.push_back("-fenable-sycl-dae"); // Pass the triple of host when doing SYCL @@ -8331,7 +8331,7 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!getToolChain().getTriple().isNVPTX() && TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization, - options::OPT_fno_sycl_dead_args_optimization, false)) + options::OPT_fno_sycl_dead_args_optimization, true)) addArgs(CmdArgs, TCArgs, {"-emit-param-info"}); if (JA.getType() == types::TY_LLVM_BC) { // single file output requested - this means only perform necessary IR diff --git a/clang/test/Driver/sycl-device-optimizations.cpp b/clang/test/Driver/sycl-device-optimizations.cpp index 7399454a9b3ad..a49f6672e3473 100644 --- a/clang/test/Driver/sycl-device-optimizations.cpp +++ b/clang/test/Driver/sycl-device-optimizations.cpp @@ -30,9 +30,9 @@ // CHECK-NO-SYCL-EARLY-OPTS: "-fno-sycl-early-optimizations" /// Check that Dead Parameter Elimination Optimization is enabled -// RUN: %clang -### -fsycl -fsycl-dead-args-optimization %s 2>&1 \ +// RUN: %clang -### -fsycl %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-DAE %s -// RUN: %clang_cl -### -fsycl -fsycl-dead-args-optimization %s 2>&1 \ +// RUN: %clang_cl -### -fsycl %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-DAE %s // CHECK-DAE: clang{{.*}} "-fenable-sycl-dae" // CHECK-DAE: sycl-post-link{{.*}} "-emit-param-info" diff --git a/sycl/test/multi_ptr/multi_ptr.cpp b/sycl/test/multi_ptr/multi_ptr.cpp index 2c011872fff58..b5fb18ec3cd6d 100644 --- a/sycl/test/multi_ptr/multi_ptr.cpp +++ b/sycl/test/multi_ptr/multi_ptr.cpp @@ -1,6 +1,6 @@ -// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -fsycl-dead-args-optimization %s -o %t.out +// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out // RUN: %RUN_ON_HOST %t.out -// RUN: %clangxx -DRESTRICT_WRITE_ACCESS_TO_CONSTANT_PTR -fsycl -fsycl-targets=%sycl_triple -fsycl-dead-args-optimization %s -o %t1.out +// RUN: %clangxx -DRESTRICT_WRITE_ACCESS_TO_CONSTANT_PTR -fsycl -fsycl-targets=%sycl_triple %s -o %t1.out // RUN: %RUN_ON_HOST %t1.out //==--------------- multi_ptr.cpp - SYCL multi_ptr test --------------------==// diff --git a/sycl/test/scheduler/ReleaseResourcesTest.cpp b/sycl/test/scheduler/ReleaseResourcesTest.cpp index e0651b201d00b..aca6f1c52bc58 100644 --- a/sycl/test/scheduler/ReleaseResourcesTest.cpp +++ b/sycl/test/scheduler/ReleaseResourcesTest.cpp @@ -1,4 +1,4 @@ -// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -fsycl-dead-args-optimization -I %sycl_source_dir %s -o %t.out +// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -I %sycl_source_dir %s -o %t.out // RUN: %RUN_ON_HOST %t.out //==------------------- ReleaseResourcesTests.cpp --------------------------==// From 01ef1d81942d5566fbf6e8627e6f68aff2c4fc2f Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Wed, 13 Jan 2021 14:46:31 -0800 Subject: [PATCH 02/13] Do not perform DAE when performing AOT --- clang/lib/Driver/ToolChains/Clang.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index d60c99589272e..fc8ad8c229d4a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4294,6 +4294,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } // Turn on Dead Parameter Elimination Optimization with early optimizations if (!RawTriple.isNVPTX() && + Triple.getSubArch() == llvm::Triple::NoSubArch && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) CmdArgs.push_back("-fenable-sycl-dae"); @@ -8330,6 +8331,7 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!getToolChain().getTriple().isNVPTX() && + getToolChain().getTriple().getSubArch() == llvm::Triple::NoSubArch && TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) addArgs(CmdArgs, TCArgs, {"-emit-param-info"}); From f29f85c1934b914013955136fea10c272e636532 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 15 Jan 2021 15:41:41 -0800 Subject: [PATCH 03/13] [Driver][SYCL] Adjustments for -fsycl-link --- clang/lib/Driver/Driver.cpp | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 0edf59f1d1f6b..1fb6e12eaf95d 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4378,7 +4378,7 @@ class OffloadingActionBuilder final { Args.getLastArg(options::OPT_fsycl_device_code_split_EQ); EnableDAE = Args.hasFlag(options::OPT_fsycl_dead_args_optimization, - options::OPT_fno_sycl_dead_args_optimization, false); + options::OPT_fno_sycl_dead_args_optimization, true); // -fsycl-device-code-split is an alias to // -fsycl-device-code-split=per_source DeviceCodeSplit = DeviceCodeSplitArg && diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index fc8ad8c229d4a..e54fbc11cb4d1 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4295,6 +4295,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!RawTriple.isNVPTX() && Triple.getSubArch() == llvm::Triple::NoSubArch && + !Args.hasArg(options::OPT_fsycl_link_EQ) && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) CmdArgs.push_back("-fenable-sycl-dae"); @@ -8332,6 +8333,7 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!getToolChain().getTriple().isNVPTX() && getToolChain().getTriple().getSubArch() == llvm::Triple::NoSubArch && + !TCArgs.hasArg(options::OPT_fsycl_link_EQ) && TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) addArgs(CmdArgs, TCArgs, {"-emit-param-info"}); From 6601218899f43cd43ab3e55fe537572a60de55f5 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 26 Feb 2021 11:37:51 -0800 Subject: [PATCH 04/13] Adjust test to disable DAE --- sycl/test/separate-compile/test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sycl/test/separate-compile/test.cpp b/sycl/test/separate-compile/test.cpp index a97c7e4c8ae88..ddde8b19e1fd3 100644 --- a/sycl/test/separate-compile/test.cpp +++ b/sycl/test/separate-compile/test.cpp @@ -3,13 +3,13 @@ // // >> ---- compile src1 // >> device compilation... -// RUN: %clangxx -fsycl-device-only -Xclang -fsycl-int-header=sycl_ihdr_a.h %s -c -o a_kernel.bc -I %sycl_include -Wno-sycl-strict +// RUN: %clangxx -fno-sycl-dead-args-optimization -fsycl-device-only -Xclang -fsycl-int-header=sycl_ihdr_a.h %s -c -o a_kernel.bc -I %sycl_include -Wno-sycl-strict // >> host compilation... // RUN: %clangxx -include sycl_ihdr_a.h -g -c %s -o a.o -I %sycl_include -Wno-sycl-strict // // >> ---- compile src2 // >> device compilation... -// RUN: %clangxx -DB_CPP=1 -fsycl-device-only -Xclang -fsycl-int-header=sycl_ihdr_b.h %s -c -o b_kernel.bc -I %sycl_include -Wno-sycl-strict +// RUN: %clangxx -DB_CPP=1 -fno-sycl-dead-args-optimization -fsycl-device-only -Xclang -fsycl-int-header=sycl_ihdr_b.h %s -c -o b_kernel.bc -I %sycl_include -Wno-sycl-strict // >> host compilation... // RUN: %clangxx -DB_CPP=1 -include sycl_ihdr_b.h -g -c %s -o b.o -I %sycl_include -Wno-sycl-strict // From 5366ffa118204bb88e37cc307ba2398bbb2c63ec Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 26 Feb 2021 17:12:54 -0800 Subject: [PATCH 05/13] Re-enable capability for AOT, adjust tests accordingly. --- clang/lib/Driver/ToolChains/Clang.cpp | 2 -- clang/test/Driver/sycl-device-lib.cpp | 2 +- clang/test/Driver/sycl-intelfpga-aoco-win.cpp | 8 ++--- clang/test/Driver/sycl-intelfpga-aoco.cpp | 12 +++---- .../test/Driver/sycl-intelfpga-static-lib.cpp | 2 +- clang/test/Driver/sycl-offload-intelfpga.cpp | 28 ++++++++-------- clang/test/Driver/sycl-offload-with-split.c | 32 +++++++++---------- clang/test/Driver/sycl-offload.c | 32 +++++++++---------- 8 files changed, 58 insertions(+), 60 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index e54fbc11cb4d1..7df169cc48096 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4294,7 +4294,6 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } // Turn on Dead Parameter Elimination Optimization with early optimizations if (!RawTriple.isNVPTX() && - Triple.getSubArch() == llvm::Triple::NoSubArch && !Args.hasArg(options::OPT_fsycl_link_EQ) && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) @@ -8332,7 +8331,6 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!getToolChain().getTriple().isNVPTX() && - getToolChain().getTriple().getSubArch() == llvm::Triple::NoSubArch && !TCArgs.hasArg(options::OPT_fsycl_link_EQ) && TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) diff --git a/clang/test/Driver/sycl-device-lib.cpp b/clang/test/Driver/sycl-device-lib.cpp index 49093ae36cee2..5861f22f5e5ad 100644 --- a/clang/test/Driver/sycl-device-lib.cpp +++ b/clang/test/Driver/sycl-device-lib.cpp @@ -117,7 +117,7 @@ /// ########################################################################### /// test llvm-link behavior for fno-sycl-device-lib -// RUN: %clangxx -fsycl -fno-sycl-device-lib=all %s -### 2>&1 \ +// RUN: %clangxx -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=SYCL_LLVM_LINK_NO_DEVICE_LIB // SYCL_LLVM_LINK_NO_DEVICE_LIB: clang{{.*}} "-cc1" {{.*}} "-fsycl-is-device" // SYCL_LLVM_LINK_NO_DEVICE_LIB-NOT: llvm-link{{.*}} "-only-needed" diff --git a/clang/test/Driver/sycl-intelfpga-aoco-win.cpp b/clang/test/Driver/sycl-intelfpga-aoco-win.cpp index 9bed6523e9ecf..649b598562157 100755 --- a/clang/test/Driver/sycl-intelfpga-aoco-win.cpp +++ b/clang/test/Driver/sycl-intelfpga-aoco-win.cpp @@ -7,9 +7,9 @@ // RUN: clang-offload-wrapper -o %t-aoco.bc -host=x86_64-pc-windows-msvc -kind=sycl -target=fpga_aoco-intel-unknown-sycldevice %t.aoco // RUN: llc -filetype=obj -o %t-aoco.o %t-aoco.bc // RUN: llvm-ar crv %t_aoco.a %t.o %t2.o %t-aoco.o -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s -// RUN: %clangxx -target x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clangxx -target x86_64-pc-windows-msvc -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s // CHK-FPGA-AOCO-PHASES-WIN: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl) @@ -39,9 +39,9 @@ // CHK-FPGA-AOCO-PHASES-WIN: 25: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image /// aoco test, checking tools -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO %s -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga %t_aoco.a -### %s 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t_aoco.a -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO %s // CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=a" "-targets=sycl-spir64_fpga-unknown-unknown-sycldevice" "-inputs=[[INPUTLIB:.+\.a]]" "-outputs=[[OUTLIB:.+\.a]]" "-unbundle" // CHK-FPGA-AOCO: llvm-link{{.*}} "[[OUTLIB]]" "-o" "[[LINKEDBC:.+\.bc]]" diff --git a/clang/test/Driver/sycl-intelfpga-aoco.cpp b/clang/test/Driver/sycl-intelfpga-aoco.cpp index f14b3cb3b3313..7840267a0c2d8 100755 --- a/clang/test/Driver/sycl-intelfpga-aoco.cpp +++ b/clang/test/Driver/sycl-intelfpga-aoco.cpp @@ -13,7 +13,7 @@ // RUN: llc -filetype=obj -o %t-aoco_cl.o %t-aoco_cl.bc // RUN: llvm-ar crv %t_aoco.a %t.o %t2.o %t-aoco.o // RUN: llvm-ar crv %t_aoco_cl.a %t.o %t2_cl.o %t-aoco_cl.o -// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga %t_aoco.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t_aoco.a %s -### -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO-PHASES %s // CHK-FPGA-AOCO-PHASES: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl) // CHK-FPGA-AOCO-PHASES: 1: input, "[[INPUTCPP:.+\.cpp]]", c++, (host-sycl) @@ -43,7 +43,7 @@ // CHK-FPGA-AOCO-PHASES: 25: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image /// FPGA AOCO Windows phases check -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -### -ccc-print-phases 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -### -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s // CHK-FPGA-AOCO-PHASES-WIN: 0: input, "{{.*}}", object, (host-sycl) // CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl) @@ -73,13 +73,13 @@ // CHK-FPGA-AOCO-PHASES-WIN: 25: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image /// aoco test, checking tools -// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-LIN %s -// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga %t_aoco.a -### %s 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t_aoco.a -### %s 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-LIN %s -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a -### %s 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a -### %s 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-WIN %s -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga %t_aoco_cl.a -### %s 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t_aoco_cl.a -### %s 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-WIN %s // CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=a" "-targets=sycl-spir64_fpga-unknown-unknown-sycldevice" "-inputs=[[INPUTLIB:.+\.a]]" "-outputs=[[OUTLIB:.+\.a]]" "-unbundle" // CHK-FPGA-AOCO: llvm-link{{.*}} "[[OUTLIB]]" "-o" "[[LINKEDBC:.+\.bc]]" diff --git a/clang/test/Driver/sycl-intelfpga-static-lib.cpp b/clang/test/Driver/sycl-intelfpga-static-lib.cpp index 8918aa0d6069d..b2cbfdf28108a 100644 --- a/clang/test/Driver/sycl-intelfpga-static-lib.cpp +++ b/clang/test/Driver/sycl-intelfpga-static-lib.cpp @@ -10,7 +10,7 @@ // RUN: llvm-ar cr %t.a %t1_bundle.o /// Check phases with static lib -// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga %t.a -ccc-print-phases 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t.a -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK_PHASES %s // CHECK_PHASES: 0: input, "[[INPUT:.+\.a]]", object, (host-sycl) // CHECK_PHASES: 1: linker, {0}, image, (host-sycl) diff --git a/clang/test/Driver/sycl-offload-intelfpga.cpp b/clang/test/Driver/sycl-offload-intelfpga.cpp index e35f4a50c75b8..b9536dcd1adc4 100644 --- a/clang/test/Driver/sycl-offload-intelfpga.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga.cpp @@ -21,11 +21,11 @@ /// -fintelfpga -fsycl-link tests // RUN: touch %t.o -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link %t.o -o libfoo.a 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -fsycl-link %t.o -o libfoo.a 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK,CHK-FPGA-EARLY %s -// RUN: %clangxx -### -O2 -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.o -o libfoo.a 2>&1 \ +// RUN: %clangxx -### -O2 -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.o -o libfoo.a 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK,CHK-FPGA-EARLY %s -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=image %t.o -o libfoo.a 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -fsycl-link=image %t.o -o libfoo.a 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK,CHK-FPGA-IMAGE %s // CHK-FPGA-LINK-NOT: clang-offload-bundler{{.*}} "-check-section" // CHK-FPGA-LINK: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown-sycldevice" "-inputs=[[INPUT:.+\.o]]" "-outputs=[[OUTPUT1:.+\.o]]" "-unbundle" @@ -58,9 +58,9 @@ /// -fintelfpga -fsycl-link clang-cl specific // RUN: touch %t.obj -// RUN: %clang_cl -### -fsycl -fintelfpga -fno-sycl-device-lib=all -fsycl-link %t.obj -Folibfoo.lib 2>&1 \ +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fintelfpga -fno-sycl-device-lib=all -fsycl-link %t.obj -Folibfoo.lib 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-WIN %s -// RUN: %clang_cl -### -fsycl -fintelfpga -fno-sycl-device-lib=all -fsycl-link %t.obj -o libfoo.lib 2>&1 \ +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fintelfpga -fno-sycl-device-lib=all -fsycl-link %t.obj -o libfoo.lib 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-WIN %s // CHK-FPGA-LINK-WIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown-sycldevice{{.*}}" "-inputs=[[INPUT:.+\.obj]]" "-outputs=[[OUTPUT1:.+\.obj]]" "-unbundle" // CHK-FPGA-LINK-WIN-NOT: clang-offload-bundler{{.*}} @@ -121,7 +121,7 @@ /// -fintelfpga with AOCR library and additional object // RUN: touch %t2.o -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fno-sycl-device-lib=all -fsycl -fintelfpga %t-aocr.a %t2.o 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fno-sycl-device-lib=all -fsycl -fno-sycl-dead-args-optimization -fintelfpga %t-aocr.a %t2.o 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA %s // CHK-FPGA: clang-offload-bundler{{.*}} "-type=aocr" "-targets=sycl-fpga_aocr-intel-unknown-sycldevice" "-inputs=[[INPUT:.+\.a]]" "-outputs=[[OUTPUT2:.+\.aocr]]" "-unbundle" // CHK-FPGA: llvm-foreach{{.*}} "--out-ext=aocx" "--in-file-list=[[OUTPUT2]]" "--in-replace=[[OUTPUT2]]" "--out-file-list=[[OUTPUT3:.+\.aocx]]" "--out-replace=[[OUTPUT3]]" "--" "{{.*}}aoc{{.*}}" "-o" "[[OUTPUT3]]" "[[OUTPUT2]]" "-sycl" {{.*}} "-g" @@ -174,9 +174,9 @@ // CHK-FPGA-AOCX-WIN: link{{.*}} "[[LIBINPUT]]" "[[LLCOUT2]]" /// AOCX with source -// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fno-sycl-device-lib=all %s %t_aocx.a -### 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fintelfpga -fno-sycl-device-lib=all %s %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-SRC,CHK-FPGA-AOCX-SRC-LIN %s -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga %s %t_aocx.a -### 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %s %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-SRC,CHK-FPGA-AOCX-SRC-WIN %s // CHK-FPGA-AOCX-SRC: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" // CHK-FPGA-AOCX-SRC: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]" @@ -197,9 +197,9 @@ /// AOCX with object // RUN: touch %t.o -// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga %t.o %t_aocx.a -### 2>&1 \ +// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t.o %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ,CHK-FPGA-AOCX-OBJ-LIN %s -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga %t.o %t_aocx.a -### 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %t.o %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ,CHK-FPGA-AOCX-OBJ-WIN %s // CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" // CHK-FPGA-AOCX-OBJ: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]" @@ -219,9 +219,9 @@ /// -fintelfpga -fsycl-link from source // RUN: touch %t.cpp -// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ +// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-SRC %s -// RUN: %clang_cl -### --target=x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ +// RUN: %clang_cl -### --target=x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-SRC %s // CHK-FPGA-LINK-SRC: 0: input, "[[INPUT:.+\.cpp]]", c++, (host-sycl) // CHK-FPGA-LINK-SRC: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) @@ -314,9 +314,9 @@ /// -fintelfpga dependency file use from object phases test // RUN: touch %t-1.o -// RUN: %clangxx -fsycl -fno-sycl-device-lib=all -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \ +// RUN: %clangxx -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-FPGA-DEP-FILES-OBJ-PHASES %s -// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \ +// RUN: %clang_cl -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-FPGA-DEP-FILES-OBJ-PHASES %s // CHK-FPGA-DEP-FILES-OBJ-PHASES: 0: input, "{{.*}}-1.o", object, (host-sycl) // CHK-FPGA-DEP-FILES-OBJ-PHASES: 1: clang-offload-unbundler, {0}, object, (host-sycl) diff --git a/clang/test/Driver/sycl-offload-with-split.c b/clang/test/Driver/sycl-offload-with-split.c index e44c173fbb334..bd1baae16b72a 100644 --- a/clang/test/Driver/sycl-offload-with-split.c +++ b/clang/test/Driver/sycl-offload-with-split.c @@ -306,25 +306,25 @@ // CHK-NO-SPLIT-NOT: sycl-post-link{{.*}} -split{{.*}} // Check ESIMD device code split. -// RUN: %clang -### -fsycl %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT -// RUN: %clang_cl -### -fsycl %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT -// RUN: %clang -### -fsycl -fsycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT -// RUN: %clang_cl -### -fsycl -fsycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT -// RUN: %clang -### -fsycl -fno-sycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT -// RUN: %clang_cl -### -fsycl -fno-sycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT -// RUN: %clang -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT -// RUN: %clang_cl -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization -fsycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fsycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-SPLIT +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-code-split-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-SPLIT // CHK-ESIMD-SPLIT: sycl-post-link{{.*}} "-split-esimd" // CHK-NO-ESIMD-SPLIT-NOT: sycl-post-link{{.*}} "-split-esimd" // Check lowering of ESIMD device code. -// RUN: %clang -### -fsycl %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER -// RUN: %clang_cl -### -fsycl %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER -// RUN: %clang -### -fsycl -fsycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER -// RUN: %clang_cl -### -fsycl -fsycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER -// RUN: %clang -### -fsycl -fno-sycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER -// RUN: %clang_cl -### -fsycl -fno-sycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER -// RUN: %clang -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER -// RUN: %clang_cl -### -fsycl -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization -fsycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fsycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-ESIMD-LOWER +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-code-lower-esimd %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization -fintelfpga %s 2>&1 | FileCheck %s -check-prefixes=CHK-NO-ESIMD-LOWER // CHK-ESIMD-LOWER: sycl-post-link{{.*}} "-lower-esimd" // CHK-NO-ESIMD-LOWER-NOT: sycl-post-link{{.*}} "-lower-esimd" diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 261e4671e5aa5..43a70e243009e 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -610,11 +610,11 @@ /// ########################################################################### /// Ahead of Time compilation for fpga, gen, cpu -// RUN: %clang -target x86_64-unknown-linux-gnu -ccc-print-phases -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice %s 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -ccc-print-phases -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice %s 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-PHASES-AOT,CHK-PHASES-FPGA -// RUN: %clang -target x86_64-unknown-linux-gnu -ccc-print-phases -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -ccc-print-phases -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-PHASES-AOT,CHK-PHASES-GEN -// RUN: %clang -target x86_64-unknown-linux-gnu -ccc-print-phases -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -ccc-print-phases -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-PHASES-AOT,CHK-PHASES-CPU // CHK-PHASES-AOT: 0: input, "[[INPUT:.+\.c]]", c++, (host-sycl) // CHK-PHASES-AOT: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) @@ -643,29 +643,29 @@ /// ########################################################################### /// Ahead of Time compilation for fpga, gen, cpu - tool invocation -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xshardware %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xshardware %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -Xshardware %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -Xshardware %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xssimulation %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xssimulation %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -Xssimulation %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -Xssimulation %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xsemulator %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xsemulator %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -Xsemulator %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fintelfpga -Xsemulator %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU // CHK-TOOLS-AOT: clang{{.*}} "-fsycl-is-device" {{.*}} "-o" "[[OUTPUT1:.+\.bc]]" // CHK-TOOLS-AOT: llvm-link{{.*}} "[[OUTPUT1]]" "-o" "[[OUTPUT2:.+\.bc]]" @@ -792,7 +792,7 @@ /// ########################################################################### /// offload with multiple targets, including AOT -// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64-unknown-unknown-sycldevice,spir64_fpga-unknown-unknown-sycldevice,spir64_gen-unknown-unknown-sycldevice -### -ccc-print-phases %s 2>&1 \ +// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-dead-args-optimization -fno-sycl-device-lib=all -fsycl-targets=spir64-unknown-unknown-sycldevice,spir64_fpga-unknown-unknown-sycldevice,spir64_gen-unknown-unknown-sycldevice -### -ccc-print-phases %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-PHASE-MULTI-TARG %s // CHK-PHASE-MULTI-TARG: 0: input, "[[INPUT:.+\.c]]", c++, (host-sycl) // CHK-PHASE-MULTI-TARG: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) From 39bf3ed294d11593fc3ba26caa3e4e20e793a54d Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Sat, 27 Feb 2021 16:47:13 -0800 Subject: [PATCH 06/13] clang format --- clang/lib/Driver/ToolChains/Clang.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 7df169cc48096..263517b9ed2e4 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4293,8 +4293,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-sycl-opt"); } // Turn on Dead Parameter Elimination Optimization with early optimizations - if (!RawTriple.isNVPTX() && - !Args.hasArg(options::OPT_fsycl_link_EQ) && + if (!RawTriple.isNVPTX() && !Args.hasArg(options::OPT_fsycl_link_EQ) && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, true)) CmdArgs.push_back("-fenable-sycl-dae"); From 39f7915e948d30fd8c0676124c2e6fac1a5bfbef Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Thu, 3 Jun 2021 18:16:10 -0700 Subject: [PATCH 07/13] Adjustments for default enabling level (-O2 or higher) --- clang/lib/Driver/ToolChains/Clang.cpp | 29 +++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 154d2151233ec..f7a35c499f041 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -700,6 +700,29 @@ static void addCoveragePrefixMapArg(const Driver &D, const ArgList &Args, } } +/// Simple check to see if the optimization level is at -O2 or higher. +/// For -fsycl (DPC++) -O2 is the default. +static bool isSYCLOptimizationO2orHigher(const ArgList &Args) { + if (Arg *A = Args.getLastArg(options::OPT_O_Group)) { + if (A->getOption().matches(options::OPT_O4) || + A->getOption().matches(options::OPT_Ofast)) + return true; + + if (A->getOption().matches(options::OPT_O0)) + return false; + + assert(A->getOption().matches(options::OPT_O) && "Must have a -O flag"); + + StringRef S(A->getValue()); + unsigned OptLevel = 0; + if (S.getAsInteger(10, OptLevel)) + return false; + return OptLevel > 1; + } + // No -O setting seen, default is -O2 for device. + return true; +} + /// Vectorize at all optimization levels greater than 1 except for -Oz. /// For -Oz the loop vectorizer is disabled, while the slp vectorizer is /// enabled. @@ -4582,7 +4605,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!RawTriple.isNVPTX() && !Args.hasArg(options::OPT_fsycl_link_EQ) && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, - options::OPT_fno_sycl_dead_args_optimization, true)) + options::OPT_fno_sycl_dead_args_optimization, + isSYCLOptimizationO2orHigher(Args))) CmdArgs.push_back("-fenable-sycl-dae"); bool IsMSVC = AuxT.isWindowsMSVCEnvironment(); if (IsMSVC) { @@ -8783,7 +8807,8 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA, if (!getToolChain().getTriple().isNVPTX() && !TCArgs.hasArg(options::OPT_fsycl_link_EQ) && TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization, - options::OPT_fno_sycl_dead_args_optimization, true)) + options::OPT_fno_sycl_dead_args_optimization, + isSYCLOptimizationO2orHigher(TCArgs))) addArgs(CmdArgs, TCArgs, {"-emit-param-info"}); if (JA.getType() == types::TY_LLVM_BC) { // single file output requested - this means only perform necessary IR From 2a396b72a4e2d1143f7ad11897f9771133d2569f Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Thu, 21 Oct 2021 17:09:15 -0700 Subject: [PATCH 08/13] Sync up tests --- sycl/test/multi_ptr/multi_ptr.cpp | 179 ------------------------------ 1 file changed, 179 deletions(-) delete mode 100644 sycl/test/multi_ptr/multi_ptr.cpp diff --git a/sycl/test/multi_ptr/multi_ptr.cpp b/sycl/test/multi_ptr/multi_ptr.cpp deleted file mode 100644 index b5fb18ec3cd6d..0000000000000 --- a/sycl/test/multi_ptr/multi_ptr.cpp +++ /dev/null @@ -1,179 +0,0 @@ -// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out -// RUN: %RUN_ON_HOST %t.out -// RUN: %clangxx -DRESTRICT_WRITE_ACCESS_TO_CONSTANT_PTR -fsycl -fsycl-targets=%sycl_triple %s -o %t1.out -// RUN: %RUN_ON_HOST %t1.out - -//==--------------- multi_ptr.cpp - SYCL multi_ptr test --------------------==// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include -#include -#include -#include - -using namespace cl::sycl; - -/* This is the class used to name the kernel for the runtime. - * This must be done when the kernel is expressed as a lambda. */ -template class testMultPtrKernel; -template class testMultPtrArrowOperatorKernel; - -template struct point { - point(const point &rhs) : x(rhs.x), y(rhs.y) {} - point(T x, T y) : x(x), y(y) {} - point(T v) : x(v), y(v) {} - point() : x(0), y(0) {} - bool operator==(const T &rhs) { return rhs == x && rhs == y; } - bool operator==(const point &rhs) { return rhs.x == x && rhs.y == y; } - T x; - T y; -}; - -template -void innerFunc(id<1> wiID, global_ptr ptr_1, global_ptr ptr_2, - local_ptr local_ptr) { - T t = ptr_1[wiID.get(0)]; - local_ptr[wiID.get(0)] = t; - t = local_ptr[wiID.get(0)]; - ptr_2[wiID.get(0)] = t; -} - -template void testMultPtr() { - T data_1[10]; - for (size_t i = 0; i < 10; ++i) { - data_1[i] = 1; - } - T data_2[10]; - for (size_t i = 0; i < 10; ++i) { - data_2[i] = 2; - } - - { - range<1> numOfItems{10}; - buffer bufferData_1(data_1, numOfItems); - buffer bufferData_2(data_2, numOfItems); - queue myQueue; - myQueue.submit([&](handler &cgh) { - accessor - accessorData_1(bufferData_1, cgh); - accessor - accessorData_2(bufferData_2, cgh); - accessor - localAccessor(numOfItems, cgh); - - cgh.parallel_for>(range<1>{10}, [=](id<1> wiID) { - auto ptr_1 = make_ptr( - accessorData_1.get_pointer()); - auto ptr_2 = make_ptr( - accessorData_2.get_pointer()); - auto local_ptr = make_ptr( - localAccessor.get_pointer()); - - // General conversions in multi_ptr class - T *RawPtr = nullptr; - global_ptr ptr_4(RawPtr); - ptr_4 = RawPtr; - - global_ptr ptr_5(accessorData_1); - - global_ptr ptr_6((void *)RawPtr); - - ptr_6 = (void *)RawPtr; - - // Explicit conversions for device_ptr/host_ptr to global_ptr - device_ptr ptr_7((void *)RawPtr); - global_ptr ptr_8 = global_ptr(ptr_7); - host_ptr ptr_9((void *)RawPtr); - global_ptr ptr_10 = global_ptr(ptr_9); - // TODO: need propagation of a7b763b26 patch to acl tool before testing - // these conversions - otherwise the test would fail on accelerator - // device during reversed translation from SPIR-V to LLVM IR - // device_ptr ptr_11(accessorData_1); - // global_ptr ptr_12 = global_ptr(ptr_11); - - innerFunc(wiID.get(0), ptr_1, ptr_2, local_ptr); - }); - }); - } - for (size_t i = 0; i < 10; ++i) { - assert(data_1[i] == 1 && "Expected data_1[i] == 1"); - } - for (size_t i = 0; i < 10; ++i) { - assert(data_2[i] == 1 && "Expected data_2[i] == 1"); - } -} - -template -void testMultPtrArrowOperator() { - point data_1[1] = {1}; - point data_2[1] = {2}; - point data_3[1] = {3}; - point data_4[1] = {4}; - - { - range<1> numOfItems{1}; - buffer, 1> bufferData_1(data_1, numOfItems); - buffer, 1> bufferData_2(data_2, numOfItems); - buffer, 1> bufferData_3(data_3, numOfItems); - buffer, 1> bufferData_4(data_4, numOfItems); - queue myQueue; - myQueue.submit([&](handler &cgh) { - accessor, 1, access::mode::read, access::target::global_buffer, - access::placeholder::false_t> - accessorData_1(bufferData_1, cgh); - accessor, 1, access::mode::read, access::target::constant_buffer, - access::placeholder::false_t> - accessorData_2(bufferData_2, cgh); - accessor, 1, access::mode::read_write, access::target::local, - access::placeholder::false_t> - accessorData_3(1, cgh); - accessor, 1, access::mode::read, access::target::global_buffer, - access::placeholder::false_t> - accessorData_4(bufferData_4, cgh); - - cgh.single_task>([=]() { - auto ptr_1 = make_ptr, access::address_space::global_space>( - accessorData_1.get_pointer()); - auto ptr_2 = make_ptr, access::address_space::constant_space>( - accessorData_2.get_pointer()); - auto ptr_3 = make_ptr, access::address_space::local_space>( - accessorData_3.get_pointer()); - auto ptr_4 = make_ptr, access::address_space::global_device_space>( - accessorData_4.get_pointer()); - - auto x1 = ptr_1->x; - auto x2 = ptr_2->x; - auto x3 = ptr_3->x; - auto x4 = ptr_4->x; - - static_assert(std::is_same::value, - "Expected decltype(ptr_1->x) == T"); - static_assert(std::is_same::value, - "Expected decltype(ptr_2->x) == T"); - static_assert(std::is_same::value, - "Expected decltype(ptr_3->x) == T"); - static_assert(std::is_same::value, - "Expected decltype(ptr_4->x) == T"); - }); - }); - } -} - -int main() { - testMultPtr(); - testMultPtr(); - testMultPtr>(); - testMultPtr>(); - - testMultPtrArrowOperator(); - testMultPtrArrowOperator(); - - return 0; -} From 426f8c462c08513e308efcf99eacf1bc83dc3266 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Wed, 8 Dec 2021 17:24:36 -0800 Subject: [PATCH 09/13] Do not force IR output with fsycl-link, allowing DAE --- clang/lib/Driver/Driver.cpp | 29 ++++++++++++++++++++++----- clang/lib/Driver/ToolChains/Clang.cpp | 3 +-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 84baae14b5011..664e376294599 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4204,8 +4204,11 @@ class OffloadingActionBuilder final { // device objects for future host link. Device libraries should // be linked by default to resolve any undefined reference. const auto *TC = ToolChains.front(); - if (TC->getTriple().getSubArch() != - llvm::Triple::SPIRSubArch_fpga) { + llvm::Triple TT(TC->getTriple()); + bool isAOT = TT.getSubArch() == llvm::Triple::SPIRSubArch_fpga || + TT.getSubArch() == llvm::Triple::SPIRSubArch_gen || + TT.getSubArch() == llvm::Triple::SPIRSubArch_x86_64; + if (TT.getSubArch() != llvm::Triple::SPIRSubArch_fpga) { SYCLDeviceLibLinked = addSYCLDeviceLibs(TC, FullSYCLLinkBinaryList, true, C.getDefaultToolChain() @@ -4220,11 +4223,27 @@ class OffloadingActionBuilder final { else FullDeviceLinkAction = DeviceLinkAction; auto *PostLinkAction = C.MakeAction( - FullDeviceLinkAction, types::TY_LLVM_BC, types::TY_LLVM_BC); + FullDeviceLinkAction, types::TY_LLVM_BC, + types::TY_Tempfiletable); + PostLinkAction->setRTSetsSpecConstants(!isAOT); + auto *ExtractIRFilesAction = C.MakeAction( + PostLinkAction, types::TY_Tempfilelist, + types::TY_Tempfilelist); + // single column w/o title fits TY_Tempfilelist format + ExtractIRFilesAction->addExtractColumnTform( + FileTableTformJobAction::COL_CODE, false /*drop titles*/); auto *TranslateAction = C.MakeAction( - PostLinkAction, types::TY_Image); + ExtractIRFilesAction, types::TY_Tempfilelist); + + ActionList TformInputs{PostLinkAction, TranslateAction}; + auto *ReplaceFilesAction = C.MakeAction( + TformInputs, types::TY_Tempfiletable, types::TY_Tempfiletable); + ReplaceFilesAction->addReplaceColumnTform( + FileTableTformJobAction::COL_CODE, + FileTableTformJobAction::COL_CODE); + SYCLLinkBinary = C.MakeAction( - TranslateAction, types::TY_Object); + ReplaceFilesAction, types::TY_Object); } else { auto *Link = C.MakeAction(SYCLLinkBinaryList, types::TY_Image); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index c00b7f999392b..58a585fa5f3fa 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4761,7 +4761,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } // Turn on Dead Parameter Elimination Optimization with early optimizations - if (!(RawTriple.isAMDGCN()) && !Args.hasArg(options::OPT_fsycl_link_EQ) && + if (!(RawTriple.isAMDGCN()) && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, isSYCLOptimizationO2orHigher(Args))) @@ -9157,7 +9157,6 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA, // Turn on Dead Parameter Elimination Optimization with early optimizations if (!(getToolChain().getTriple().isAMDGCN()) && - !TCArgs.hasArg(options::OPT_fsycl_link_EQ) && TCArgs.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization, isSYCLOptimizationO2orHigher(TCArgs))) From eb898afdddd8ffa9d174488bfc29d9ef19444734 Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Wed, 8 Dec 2021 18:25:09 -0800 Subject: [PATCH 10/13] Adjust test to reflect new fsycl-link toolchain behavior --- clang/test/Driver/sycl-offload.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 6ea8c915837ae..fee4f71de6153 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -471,9 +471,11 @@ // CHK-LINK-UB: 1: clang-offload-unbundler, {0}, object // CHK-LINK-UB: 2: linker, {1}, image, (device-sycl) // CHK-LINK-UB: 3: sycl-post-link, {2}, ir, (device-sycl) -// CHK-LINK-UB: 4: llvm-spirv, {3}, image, (device-sycl) -// CHK-LINK-UB: 5: clang-offload-wrapper, {4}, object, (device-sycl) -// CHK-LINK-UB: 6: offload, "device-sycl (spir64-unknown-unknown)" {5}, object +// CHK-LINK-UB: 4: file-table-tform, {3}, tempfilelist, (device-sycl) +// CHK-LINK-UB: 5: llvm-spirv, {4}, tempfilelist, (device-sycl) +// CHK-LINK-UB: 6: file-table-tform, {3, 5}, tempfiletable, (device-sycl) +// CHK-LINK-UB: 7: clang-offload-wrapper, {6}, object, (device-sycl) +// CHK-LINK-UB: 8: offload, "device-sycl (spir64-unknown-unknown)" {7}, object /// ########################################################################### @@ -487,9 +489,11 @@ // CHK-LINK: 2: compiler, {1}, ir, (device-sycl) // CHK-LINK: 3: linker, {2}, image, (device-sycl) // CHK-LINK: 4: sycl-post-link, {3}, ir, (device-sycl) -// CHK-LINK: 5: llvm-spirv, {4}, image, (device-sycl) -// CHK-LINK: 6: clang-offload-wrapper, {5}, object, (device-sycl) -// CHK-LINK: 7: offload, "device-sycl (spir64-unknown-unknown)" {6}, object +// CHK-LINK: 5: file-table-tform, {4}, tempfilelist, (device-sycl) +// CHK-LINK: 6: llvm-spirv, {5}, tempfilelist, (device-sycl) +// CHK-LINK: 7: file-table-tform, {4, 6}, tempfiletable, (device-sycl) +// CHK-LINK: 8: clang-offload-wrapper, {7}, object, (device-sycl) +// CHK-LINK: 9: offload, "device-sycl (spir64-unknown-unknown)" {8}, object /// ########################################################################### From 074421b70cd9d8ed474cbd39893bf84de951a6cf Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Wed, 8 Dec 2021 18:32:53 -0800 Subject: [PATCH 11/13] clang format --- clang/lib/Driver/Driver.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 664e376294599..6553b83ffde6f 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4227,8 +4227,7 @@ class OffloadingActionBuilder final { types::TY_Tempfiletable); PostLinkAction->setRTSetsSpecConstants(!isAOT); auto *ExtractIRFilesAction = C.MakeAction( - PostLinkAction, types::TY_Tempfilelist, - types::TY_Tempfilelist); + PostLinkAction, types::TY_Tempfilelist, types::TY_Tempfilelist); // single column w/o title fits TY_Tempfilelist format ExtractIRFilesAction->addExtractColumnTform( FileTableTformJobAction::COL_CODE, false /*drop titles*/); From 1b4bd6a6a12fc5dca340af55298562caf879c52e Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 10 Dec 2021 08:36:47 -0800 Subject: [PATCH 12/13] Add tests for disabling DAE --- clang/test/Driver/sycl-device-optimizations.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/clang/test/Driver/sycl-device-optimizations.cpp b/clang/test/Driver/sycl-device-optimizations.cpp index 110019f85c87c..a24bd73fcdb6c 100644 --- a/clang/test/Driver/sycl-device-optimizations.cpp +++ b/clang/test/Driver/sycl-device-optimizations.cpp @@ -37,6 +37,14 @@ // CHECK-DAE: clang{{.*}} "-fenable-sycl-dae" // CHECK-DAE: sycl-post-link{{.*}} "-emit-param-info" +/// Check that Dead Parameter Elimination Optimization is disabled +// RUN: %clang -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NO-DAE %s +// RUN: %clang_cl -### -fsycl -fno-sycl-dead-args-optimization %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NO-DAE %s +// CHECK-NO-DAE-NOT: clang{{.*}} "-fenable-sycl-dae" +// CHECK-NO-DAE-NOT: sycl-post-link{{.*}} "-emit-param-info" + // Check "-fgpu-inline-threshold" is passed to the front-end: // RUN: %clang -### -fsycl -fgpu-inline-threshold=100000 %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-THRESH %s From 7e608af212ca0721936f34f90441543d2895180b Mon Sep 17 00:00:00 2001 From: Michael D Toguchi Date: Fri, 10 Dec 2021 08:42:34 -0800 Subject: [PATCH 13/13] Add TODO to move enabling based on opt level out of driver --- clang/lib/Driver/ToolChains/Clang.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 58a585fa5f3fa..24a22a2b9772b 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4761,6 +4761,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } // Turn on Dead Parameter Elimination Optimization with early optimizations + // TODO: Enable DAE by default without the Optimization level check in the + // driver. The enabling can be done in CodeGenOpt, and we can pass an + // option to explicitly disable/disable here. if (!(RawTriple.isAMDGCN()) && Args.hasFlag(options::OPT_fsycl_dead_args_optimization, options::OPT_fno_sycl_dead_args_optimization,