From a9295c1bf637598a5242c7b7959cab2e3d62afb0 Mon Sep 17 00:00:00 2001 From: jinge90 Date: Wed, 5 Mar 2025 09:51:08 +0800 Subject: [PATCH] [SYCL][Driver] Link Native BF16 devicelib for lnl target (#17154) Lunarlake platform supports native bf16 conversions, should link native bf16 devicelib. --------- Signed-off-by: jinge90 --- clang/lib/Driver/ToolChains/SYCL.cpp | 7 ++-- .../test/Driver/sycl-device-lib-bfloat16.cpp | 42 ++++++++++++++++--- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index c12ad1d525928..c7b99a8789488 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -309,8 +309,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_10", "intel_gpu_dg2_11", - "intel_dg2_g12", "intel_gpu_bmg_g21"}; + "intel_gpu_acm_g12", "intel_gpu_dg2_g10", "intel_gpu_dg2_g11", + "intel_dg2_g12", "intel_gpu_bmg_g21", "intel_gpu_lnl_m"}; const llvm::opt::ArgList &Args = C.getArgs(); bool NeedLibs = false; @@ -351,7 +351,8 @@ 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("dg2") || Device.starts_with("bmg") || + Device.starts_with("lnl"); }; 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 43993fbe7c021..5ccaa9be8d30e 100644 --- a/clang/test/Driver/sycl-device-lib-bfloat16.cpp +++ b/clang/test/Driver/sycl-device-lib-bfloat16.cpp @@ -99,7 +99,7 @@ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE -// Test test AOT-DG1 + JIT compilation uses native libs + no libs +// Test AOT-DG1 + JIT compilation uses native libs + no libs // RUN: %clangxx -fsycl -fsycl-targets=intel_gpu_dg1,spir64 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE @@ -113,7 +113,7 @@ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE -// Test test AOT-PVC + JIT compilation + AOT-DG2 uses native libs + no libs + native libs +// 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 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE-NATIVE @@ -127,7 +127,7 @@ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NONE-NATIVE -// Test test AOT-PVC + JIT compilation + AOT-DG1 uses fallback libs + no libs + fallback libs +// 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 \ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE-FALLBACK @@ -141,7 +141,7 @@ // RUN: --sysroot=%S/Inputs/SYCL %s -### 2>&1 \ // RUN: | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-NONE-FALLBACK -// Test test AOT-PVC + AOT-DG1 specified via different options, uses fallback libs +// Test AOT-PVC + AOT-DG1 specified via different options, uses fallback libs // RUN: %clangxx -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 @@ -149,7 +149,7 @@ // RUN: --sysroot=%S/Inputs/SYCL -Xsycl-target-backend=spir64_gen "-device pvc" \ // RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-FALLBACK-FALLBACK -// Test test AOT-PVC + AOT-BMG specified via different options, uses native libs +// Test AOT-PVC + AOT-BMG specified via different options, uses native libs // RUN: %clangxx -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 @@ -157,6 +157,38 @@ // 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 +// Test AOT-DG2 + AOT-DG1 specified via different options, uses fallback libs +// RUN: %clangxx -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 +// 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 + +// Test AOT-PVC + AOT-DG2 specified via different options, uses native libs +// RUN: %clangxx -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 +// 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 + +// Test AOT-PVC + 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 pvc" \ +// RUN: %s -### 2>&1 | FileCheck %s -check-prefix=BFLOAT16-NATIVE-NATIVE +// 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 + +// Test AOT-LNL + AOT-DG1 specified via different options, uses fallback libs +// RUN: %clangxx -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 +// 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 + // BFLOAT16-NOT: llvm-link{{.*}} "{{.*}}libsycl-{{fallback|native}}-bfloat16.bc" // BFLOAT16-NATIVE: llvm-link{{.*}} "{{.*}}libsycl-native-bfloat16.bc"