diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 8692d242268af..b835f000aeb68 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -248,7 +248,8 @@ static bool selectBfloatLibs(const llvm::Triple &Triple, const Compilation &C, static llvm::SmallSet GPUArchsWithNBF16{ "intel_gpu_pvc", "intel_gpu_acm_g10", "intel_gpu_acm_g11", "intel_gpu_acm_g12", "intel_gpu_dg2_g10", "intel_gpu_dg2_g11", - "intel_dg2_g12", "intel_gpu_bmg_g21", "intel_gpu_lnl_m"}; + "intel_dg2_g12", "intel_gpu_bmg_g21", "intel_gpu_lnl_m", + "intel_gpu_ptl_h", "intel_gpu_ptl_u"}; const llvm::opt::ArgList &Args = C.getArgs(); bool NeedLibs = false; @@ -290,7 +291,7 @@ static bool selectBfloatLibs(const llvm::Triple &Triple, const Compilation &C, auto checkBF = [](StringRef Device) { return Device.starts_with("pvc") || Device.starts_with("ats") || Device.starts_with("dg2") || Device.starts_with("bmg") || - Device.starts_with("lnl"); + Device.starts_with("lnl") || Device.starts_with("ptl"); }; auto checkSpirvJIT = [](StringRef Target) { diff --git a/clang/test/Driver/sycl-device-lib-bfloat16.cpp b/clang/test/Driver/sycl-device-lib-bfloat16.cpp index 5ccaa9be8d30e..0dda961123560 100644 --- a/clang/test/Driver/sycl-device-lib-bfloat16.cpp +++ b/clang/test/Driver/sycl-device-lib-bfloat16.cpp @@ -8,11 +8,16 @@ /// Test that no bfloat16 libraries are added in JIT mode. // RUN: %clangxx -fsycl %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16 --dump-input=always +// RUN: %clang_cl -fsycl %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16 --dump-input=always // Test that no bfloat16 libraries are added in JIT mode with generic target. // RUN: %clangxx -fsycl -fsycl-targets=spir64 %s \ // RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16 +// RUN: %clang_cl -fsycl -fsycl-targets=spir64 %s \ +// RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16 // Test that a PVC AOT compilation uses the native library. // RUN: %clangxx -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ @@ -21,68 +26,108 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc %s \ // RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ +// RUN: "-device pvc" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE // Test that unless all targets support bfloat16, AOT compilation uses the // fallback library. // RUN: %clangxx -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ // RUN: "-device pvc,gen9" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ +// RUN: "-device pvc,gen9" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK // Test that when all targets support bfloat16, AOT compilation uses the // native library. // RUN: %clangxx -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ // RUN: "-device pvc-sdv,ats-m75" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ +// RUN: "-device pvc-sdv,ats-m75" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE // Test that a gen9 AOT compilation uses the fallback library. // RUN: %clangxx -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ // RUN: "-device gen9" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ +// RUN: "-device gen9" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK // Test that a generic AOT compilation uses the fallback library. // RUN: %clangxx -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ // RUN: "-device *" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_gen -Xsycl-target-backend \ +// RUN: "-device *" %s --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK // Test that a mixed JIT + AOT-PVC compilation uses no libs + fallback libs. // RUN: %clangxx -fsycl -fsycl-targets=spir64,spir64_gen \ // RUN: -Xsycl-target-backend=spir64_gen "-device pvc" %s \ // RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NONE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=spir64,spir64_gen \ +// RUN: -Xsycl-target-backend=spir64_gen "-device pvc" %s \ +// RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NONE-NATIVE // Test that a mixed JIT + AOT-Gen9 compilation uses no libs + native libs. // RUN: %clangxx -fsycl -fsycl-targets=spir64,spir64_gen \ // RUN: -Xsycl-target-backend=spir64_gen "-device gen9" %s \ // RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NONE-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=spir64,spir64_gen \ +// RUN: -Xsycl-target-backend=spir64_gen "-device gen9" %s \ +// RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NONE-FALLBACK // Test that an AOT-CPU + AOT-PVC compilation fallback + fallback libs. // RUN: %clangxx -fsycl -fsycl-targets=spir64_x86_64,spir64_gen \ // RUN: -Xsycl-target-backend=spir64_gen "-device pvc" %s \ // RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_x86_64,spir64_gen \ +// RUN: -Xsycl-target-backend=spir64_gen "-device pvc" %s \ +// RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NATIVE // Test that an AOT-CPU + AOT-Gen9 compilation uses fallback + native libs. // RUN: %clangxx -fsycl -fsycl-targets=spir64_x86_64,spir64_gen \ // RUN: -Xsycl-target-backend=spir64_gen "-device gen9" %s \ // RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=spir64_x86_64,spir64_gen \ +// RUN: -Xsycl-target-backend=spir64_gen "-device gen9" %s \ +// RUN: --sysroot=%S/Inputs/SYCL -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK // Test AOT-DG2 compilation uses native libs + native libs. // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_acm_g10 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_acm_g10 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE // Test AOT-PVC + AOT-DG2 compilation uses native libs + native libs. // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,intel_gpu_acm_g10 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_pvc,intel_gpu_acm_g10 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE // Test AOT-PVC + AOT-DG1 compilation uses native libs + native libs. // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,intel_gpu_acm_g10 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_dg1,intel_gpu_acm_g10 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK // Test AOT-PVC + JIT compilation uses native libs + no libs @@ -98,6 +143,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spirv64-unknown-unknown \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_pvc,spir64 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE // Test AOT-DG1 + JIT compilation uses native libs + no libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spir64 \ @@ -112,6 +160,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spirv64-unknown-unknown \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_dg1,spir64 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE // Test AOT-PVC + JIT compilation + AOT-DG2 uses native libs + no libs + native libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spir64,intel_gpu_acm_g10 \ @@ -126,6 +177,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spirv64-unknown-unknown,intel_gpu_acm_g10 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_pvc,spir64,intel_gpu_acm_g10 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE-NATIVE // Test AOT-PVC + JIT compilation + AOT-DG1 uses fallback libs + no libs + fallback libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spir64,intel_gpu_dg1 \ @@ -140,6 +194,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spirv64-unknown-unknown,intel_gpu_dg1 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_pvc,spir64,intel_gpu_dg1 \ +// RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ +// RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE-FALLBACK // Test AOT-PVC + AOT-DG1 specified via different options, uses fallback libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spir64_gen \ @@ -148,6 +205,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spir64_gen \ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device pvc" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_pvc,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg1" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK // Test AOT-PVC + AOT-BMG specified via different options, uses native libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_bmg_g21,spir64_gen \ @@ -156,6 +216,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spir64_gen \ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device bmg-g21-a0" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_bmg_g21,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device pvc" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE // Test AOT-DG2 + AOT-DG1 specified via different options, uses fallback libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g10,spir64_gen \ @@ -164,6 +227,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spir64_gen \ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg2_g12" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_dg2_g10,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg1" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK // Test AOT-PVC + AOT-DG2 specified via different options, uses native libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg2_g11,spir64_gen \ @@ -172,6 +238,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spir64_gen \ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg2_g12" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_dg2_g11,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device pvc" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE // Test AOT-PVC + AOT-LNL specified via different options, uses native libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ @@ -180,6 +249,9 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_pvc,spir64_gen \ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device lnl_m" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device pvc" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE // Test AOT-LNL + AOT-DG1 specified via different options, uses fallback libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ @@ -188,7 +260,37 @@ // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spir64_gen \ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device lnl_m" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg1" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// Test AOT-PTL + AOT-LNL specified via different options, uses native libs +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device ptl_h" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device ptl_u" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_ptl_h,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device lnl_m" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_ptl_u,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device lnl_m" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_lnl_m,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device ptl_h" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE + +// Test AOT-PTL + AOT-DG1 specified via different options, uses fallback libs +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_ptl_h,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg1" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device ptl_u" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK +// RUN: %clang_cl -fsycl -fsycl-targets=intel_gpu_ptl_h,spir64_gen \ +// RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device dg1" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK // BFLOAT16-NOT: llvm-link{{.*}} "{{.*}}libsycl-{{fallback|native}}-bfloat16.bc" // BFLOAT16-NATIVE: llvm-link{{.*}} "{{.*}}libsycl-native-bfloat16.bc"