From 452f9a249c90e9e776f3d2899a5d382fe72e6465 Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Thu, 21 Sep 2023 16:55:35 +0200 Subject: [PATCH 1/4] [SYCL] Gracefully handle unknown device Don't throw ICE when an unknown device is specified explicitly via `-Xsycl-target-backend --offload-arch=`. We don't enable macros or other niceties from sycl_ext_oneapi_device_architecture, but at least the code compiles. Fixes #8112, #11203 --- clang/lib/Driver/ToolChains/Clang.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index f0d2a6781927a..8138c2c232757 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5413,7 +5413,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Triple.getSubArch() == llvm::Triple::SPIRSubArch_gen) || Triple.isNVPTX() || Triple.isAMDGCN()) { StringRef Device = JA.getOffloadingArch(); - if (!Device.empty()) { + if (!Device.empty() && !SYCL::gen::getGenDeviceMacro(Device).empty()) { Macro = "-D"; Macro += SYCL::gen::getGenDeviceMacro(Device); } From 4dcf5b695bbde29f02e0a1eac52d2f6b5613dd7c Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Mon, 27 Nov 2023 19:46:38 +0100 Subject: [PATCH 2/4] Add test --- clang/test/Driver/sycl-unsupported-arch.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 clang/test/Driver/sycl-unsupported-arch.cpp diff --git a/clang/test/Driver/sycl-unsupported-arch.cpp b/clang/test/Driver/sycl-unsupported-arch.cpp new file mode 100644 index 0000000000000..95dd244a6841a --- /dev/null +++ b/clang/test/Driver/sycl-unsupported-arch.cpp @@ -0,0 +1,8 @@ +/// Verify that compiler passes are correctly determined +// RUN: %clangxx -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_30 -c -ccc-print-phases %s 2>&1 | FileCheck %s --check-prefix=CHECK-PHASES +// CHECK-PHASES: offload, "device-sycl (nvptx64-nvidia-cuda:sm_30)" + +/// Verify that preprocessor works (#8112) +// RUN: %clangxx -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_30 -E %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREPROCESSOR +// CHECK-PREPROCESSOR: // __CLANG_OFFLOAD_BUNDLE____START__ sycl-nvptx64-nvidia-cuda-sm_30 + From 3d1639046fe9fe4e061c6beb3d00d215545712ca Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Tue, 28 Nov 2023 12:00:37 +0100 Subject: [PATCH 3/4] Use AMDGCN target instead of NVPTX for testing Seems more stable --- clang/test/Driver/sycl-unsupported-arch.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/test/Driver/sycl-unsupported-arch.cpp b/clang/test/Driver/sycl-unsupported-arch.cpp index 95dd244a6841a..99033dbeca484 100644 --- a/clang/test/Driver/sycl-unsupported-arch.cpp +++ b/clang/test/Driver/sycl-unsupported-arch.cpp @@ -1,8 +1,8 @@ /// Verify that compiler passes are correctly determined -// RUN: %clangxx -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_30 -c -ccc-print-phases %s 2>&1 | FileCheck %s --check-prefix=CHECK-PHASES -// CHECK-PHASES: offload, "device-sycl (nvptx64-nvidia-cuda:sm_30)" +// RUN: %clangxx -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx600 -c -ccc-print-phases %s 2>&1 | FileCheck %s --check-prefix=CHECK-PHASES +// CHECK-PHASES: offload, "device-sycl (amdgcn-amd-amdhsa:gfx600)" /// Verify that preprocessor works (#8112) -// RUN: %clangxx -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_30 -E %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREPROCESSOR -// CHECK-PREPROCESSOR: // __CLANG_OFFLOAD_BUNDLE____START__ sycl-nvptx64-nvidia-cuda-sm_30 +// RUN: %clangxx -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx600 -E %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREPROCESSOR +// CHECK-PREPROCESSOR: // __CLANG_OFFLOAD_BUNDLE____START__ sycl-amdgcn-amd-amdhsa-gfx600 From 081d821f0d42799b9fefdc4dc2bbdf52903d5d28 Mon Sep 17 00:00:00 2001 From: Andrey Alekseenko Date: Tue, 28 Nov 2023 14:10:33 +0100 Subject: [PATCH 4/4] Add nogpulib flag to tests --- clang/test/Driver/sycl-unsupported-arch.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/Driver/sycl-unsupported-arch.cpp b/clang/test/Driver/sycl-unsupported-arch.cpp index 99033dbeca484..e5fd47f339fd5 100644 --- a/clang/test/Driver/sycl-unsupported-arch.cpp +++ b/clang/test/Driver/sycl-unsupported-arch.cpp @@ -1,8 +1,8 @@ /// Verify that compiler passes are correctly determined -// RUN: %clangxx -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx600 -c -ccc-print-phases %s 2>&1 | FileCheck %s --check-prefix=CHECK-PHASES +// RUN: %clangxx -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx600 -nogpulib -c -ccc-print-phases %s 2>&1 | FileCheck %s --check-prefix=CHECK-PHASES // CHECK-PHASES: offload, "device-sycl (amdgcn-amd-amdhsa:gfx600)" /// Verify that preprocessor works (#8112) -// RUN: %clangxx -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx600 -E %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREPROCESSOR +// RUN: %clangxx -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx600 -nogpulib -E %s 2>&1 | FileCheck %s --check-prefix=CHECK-PREPROCESSOR // CHECK-PREPROCESSOR: // __CLANG_OFFLOAD_BUNDLE____START__ sycl-amdgcn-amd-amdhsa-gfx600