Author: Srividya Sundaram
Date: 2026-07-28T14:31:09Z
New Revision: 5a650306e4e1069d194d8fcfeee821d7e424f9b3

URL: 
https://github.com/llvm/llvm-project/commit/5a650306e4e1069d194d8fcfeee821d7e424f9b3
DIFF: 
https://github.com/llvm/llvm-project/commit/5a650306e4e1069d194d8fcfeee821d7e424f9b3.diff

LOG: [Driver][SYCL] Add compile-time device library linking for SPIR-V targets 
(#196656)

This PR implements compile-time device library linking for SYCL
offloading to SPIR-V targets, using `libclang_rt.builtins.bc` - an
in-tree compiler-rt artifact produced alongside the existing
`libclang_rt.builtins.a` for `SPIRV64`.

## Motivation

SYCL device compilations targeting SPIR-V need access to compiler
builtins (integer arithmetic, floating-point helpers, etc.) at compile
time so the compiler can optimize across user code and builtins, inline
aggressively, and eliminate dead code. This PR lays the foundation by
wiring up the first in-tree device library : `libclang_rt.builtins.bc` -
using the same `-mlink-builtin-bitcode` mechanism already used by
`libclc` and `HIP`.

## Changes

**compiler-rt (compiler-rt/lib/builtins/CMakeLists.txt)**
For the `spirv64` target, after building
`libclang_rt.builtins-spirv64.a`, runs `llvm-link` to merge all bitcode
objects into a single `libclang_rt.builtins.bc`. This file is installed
to `<ResourceDir>/lib/spirv64-unknown-unknown/` alongside the static
archive. The `-mlink-builtin-bitcode` flag requires raw LLVM IR and
cannot unpack a static archive directly, hence the extra step.

**Clang Driver (clang/lib/Driver/ToolChains/SYCL.cpp)**
`SYCLToolChain::getDeviceLibs()` now constructs the path to
`libclang_rt.builtins.bc` under the clang resource directory and returns
it for `-mlink-builtin-bitcode` injection during `spirv64` device
compilation. If the file is absent (e.g. compiler-rt was not built with
spirv64 support), a specific diagnostic is emitted. Linking is
suppressed when `--no-offloadlib` is passed.

**Diagnostics (clang/include/clang/Basic/DiagnosticDriverKinds.td)**
Added `err_drv_no_compiler_rt_builtins_bc`, following the
`err_drv_libclc_not_found` community pattern, with actionable guidance
on how to build compiler-rt with SPIR-V support.


### Test Infrastructure

1. `clang/test/Driver/sycl-device-lib-spirv64.cpp` - new test verifying
-mlink-builtin-bitcode is passed for spirv64, suppressed with
--no-offloadlib, and that a missing .bc produces the correct diagnostic.
2. `clang/test/Driver/Inputs/spirv64-sycl/` - dummy resource-dir fixture
used by driver tests.
3. All existing SYCL driver tests updated to pass -`resource-dir
%S/Inputs/spirv64-sycl `on -fsycl RUN lines, making them independent of
the installed clang resource directory on CI runners.

## Behavior

### Default

```bash
clang -fsycl myprogram.cpp
# Device compilation includes:
# "-mlink-builtin-bitcode" 
"<ResourceDir>/lib/spirv64-unknown-unknown/libclang_rt.builtins.bc"
```

Automatically links device libraries from `<clang-install>/lib/` during
device compilation.

### Without device libraries
```bash
clang -fsycl --no-offloadlib myprogram.cpp
# -mlink-builtin-bitcode is suppressed
```
Missing .bc (compiler-rt not built with spirv64 support)
```bash
error: no compiler-rt builtins bitcode library '...' found in the clang 
resource directory;
build compiler-rt with SPIR-V support or pass '--no-offloadlib' to compile 
without it ```

Added: 
    
clang/test/Driver/Inputs/spirv64-sycl/lib/spirv64-unknown-unknown/libclang_rt.builtins.bc
    clang/test/Driver/sycl-device-lib-spirv64.cpp

Modified: 
    clang/include/clang/Basic/DiagnosticDriverKinds.td
    clang/lib/Driver/ToolChains/SYCL.cpp
    clang/lib/Driver/ToolChains/SYCL.h
    clang/test/Driver/sycl-offload-jit-unix.cpp
    clang/test/Driver/sycl-offload-jit-xarch.cpp
    clang/test/Driver/sycl-offload-jit.cpp
    clang/test/Driver/sycl-print-internal-defines.cpp
    clang/test/Driver/sycl-rtlib-sysroot-mismatch.cpp
    clang/test/Driver/sycl-std-default.cpp
    clang/test/Driver/sycl-windows.cpp
    clang/test/Driver/sycl.cpp
    compiler-rt/lib/builtins/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index ae3eecc60fc78..eeefc838bda1d 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -441,6 +441,11 @@ def warn_drv_fraw_string_literals_in_cxx11 : Warning<
 
 def err_drv_libclc_not_found : Error<"no libclc library '%0' found in the 
clang resource directory">;
 
+def err_drv_no_compiler_rt_builtins_bc : Error<
+  "no compiler-rt builtins bitcode library '%0' found in the clang resource "
+  "directory; build compiler-rt with SPIR-V support or pass '--no-offloadlib' "
+  "to compile without it">;
+
 def err_drv_invalid_malign_branch_EQ : Error<
   "invalid argument '%0' to -malign-branch=; each element must be one of: %1">;
 

diff  --git a/clang/lib/Driver/ToolChains/SYCL.cpp 
b/clang/lib/Driver/ToolChains/SYCL.cpp
index 7208a8cac9436..7c27c56d7efc0 100644
--- a/clang/lib/Driver/ToolChains/SYCL.cpp
+++ b/clang/lib/Driver/ToolChains/SYCL.cpp
@@ -7,6 +7,8 @@
 
//===----------------------------------------------------------------------===//
 #include "SYCL.h"
 #include "clang/Driver/CommonArgs.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
 #include "llvm/Support/VirtualFileSystem.h"
 
 using namespace clang::driver;
@@ -127,6 +129,13 @@ void SYCLToolChain::addClangTargetOptions(
     const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
     BoundArch BA, Action::OffloadKind DeviceOffloadingKind) const {
   HostTC.addClangTargetOptions(DriverArgs, CC1Args, BA, DeviceOffloadingKind);
+
+  for (const auto &BCFile :
+       getDeviceLibs(DriverArgs, BA, DeviceOffloadingKind)) {
+    CC1Args.push_back(BCFile.ShouldInternalize ? "-mlink-builtin-bitcode"
+                                               : "-mlink-bitcode-file");
+    CC1Args.push_back(DriverArgs.MakeArgString(BCFile.Path));
+  }
 }
 
 llvm::opt::DerivedArgList *
@@ -200,3 +209,24 @@ void SYCLToolChain::AddClangCXXStdlibIncludeArgs(const 
ArgList &Args,
                                                  ArgStringList &CC1Args) const 
{
   HostTC.AddClangCXXStdlibIncludeArgs(Args, CC1Args);
 }
+
+llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12>
+SYCLToolChain::getDeviceLibs(
+    const llvm::opt::ArgList &DriverArgs, BoundArch /*BA*/,
+    const Action::OffloadKind /*DeviceOffloadingKind*/) const {
+  if (!getTriple().isSPIROrSPIRV())
+    return {};
+  if (!DriverArgs.hasFlag(options::OPT_offloadlib, options::OPT_no_offloadlib,
+                          true))
+    return {};
+  // compiler-rt always installs the spirv64 .bc file under lib/<triple>/
+  // regardless of LLVM_ENABLE_PER_TARGET_RUNTIME_DIR, so only check that path.
+  SmallString<128> BCPath(getDriver().ResourceDir);
+  llvm::sys::path::append(BCPath, "lib", getTriple().str(),
+                          "libclang_rt.builtins.bc");
+  if (!llvm::sys::fs::exists(BCPath)) {
+    getDriver().Diag(clang::diag::err_drv_no_compiler_rt_builtins_bc) << 
BCPath;
+    return {};
+  }
+  return {{std::string(BCPath), /*ShouldInternalize=*/true}};
+}

diff  --git a/clang/lib/Driver/ToolChains/SYCL.h 
b/clang/lib/Driver/ToolChains/SYCL.h
index d404ce2f93923..6af49d9a2df4c 100644
--- a/clang/lib/Driver/ToolChains/SYCL.h
+++ b/clang/lib/Driver/ToolChains/SYCL.h
@@ -55,6 +55,10 @@ class LLVM_LIBRARY_VISIBILITY SYCLToolChain : public 
ToolChain {
       const llvm::opt::ArgList &Args,
       llvm::opt::ArgStringList &CC1Args) const override;
 
+  llvm::SmallVector<BitCodeLibraryInfo, 12>
+  getDeviceLibs(const llvm::opt::ArgList &Args, BoundArch BA,
+                const Action::OffloadKind DeviceOffloadingKind) const override;
+
 private:
   const ToolChain &HostTC;
   SYCLInstallationDetector SYCLInstallation;

diff  --git 
a/clang/test/Driver/Inputs/spirv64-sycl/lib/spirv64-unknown-unknown/libclang_rt.builtins.bc
 
b/clang/test/Driver/Inputs/spirv64-sycl/lib/spirv64-unknown-unknown/libclang_rt.builtins.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d

diff  --git a/clang/test/Driver/sycl-device-lib-spirv64.cpp 
b/clang/test/Driver/sycl-device-lib-spirv64.cpp
new file mode 100644
index 0000000000000..467dffa50b1e9
--- /dev/null
+++ b/clang/test/Driver/sycl-device-lib-spirv64.cpp
@@ -0,0 +1,28 @@
+// Tests that the SYCL toolchain links libclang_rt.builtins.bc for spirv64
+// via -mlink-builtin-bitcode, that --no-offloadlib suppresses it, and that
+// -nolibsycl does not suppress it (builtins are target infrastructure, not
+// SYCL runtime).
+
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-BUILTIN-BC
+// CHECK-BUILTIN-BC: "-triple" "spirv64-unknown-unknown"
+// CHECK-BUILTIN-BC: "-mlink-builtin-bitcode" 
"{{.*}}lib{{[/\\]+}}spirv64-unknown-unknown{{[/\\]+}}libclang_rt.builtins.bc"
+
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-OFFLOADLIB
+// CHECK-NO-OFFLOADLIB: "-cc1" "-triple" "spirv64-unknown-unknown"
+// CHECK-NO-OFFLOADLIB-NOT: "-mlink-builtin-bitcode"
+
+// -nolibsycl suppresses the SYCL runtime library but NOT compiler-rt builtins.
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl -nolibsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-NOLIBSYCL
+// CHECK-NOLIBSYCL: "-triple" "spirv64-unknown-unknown"
+// CHECK-NOLIBSYCL: "-mlink-builtin-bitcode" 
"{{.*}}lib{{[/\\]+}}spirv64-unknown-unknown{{[/\\]+}}libclang_rt.builtins.bc"
+
+// RUN: not %clang -### --target=x86_64-unknown-linux-gnu -fsycl \
+// RUN:   -resource-dir=%T/nonexistent %s 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-MISSING
+// CHECK-MISSING: error: no compiler-rt builtins bitcode library 
'{{.*}}libclang_rt.builtins.bc' found in the clang resource directory

diff  --git a/clang/test/Driver/sycl-offload-jit-unix.cpp 
b/clang/test/Driver/sycl-offload-jit-unix.cpp
index 34812576f7874..c6d78a189ac56 100644
--- a/clang/test/Driver/sycl-offload-jit-unix.cpp
+++ b/clang/test/Driver/sycl-offload-jit-unix.cpp
@@ -10,7 +10,8 @@
 // RUN: rm -rf %t && mkdir -p %t/bin %t/lib/x86_64-unknown-linux-gnu
 // RUN: touch %t/lib/x86_64-unknown-linux-gnu/libLLVMSYCL.so
 // RUN: ln -s %clang %t/bin/clang
-// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl %s 2>&1 \
+// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl %s 2>&1 \
 // RUN:   | FileCheck 
-check-prefixes=CHECK-LSYCL,CHECK-SYCL-HEADERS-HOST,CHECK-SYCL-HEADERS-DEVICE %s
 // CHECK-SYCL-HEADERS-DEVICE: "-fsycl-is-device"{{.*}} "-internal-isystem" 
"{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include"
 // CHECK-SYCL-HEADERS-HOST: "-fsycl-is-host"{{.*}} "-internal-isystem" 
"{{.*}}bin{{[/\\]+}}..{{[/\\]+}}include"
@@ -20,7 +21,8 @@
 // RUN: rm -rf %t && mkdir -p %t/bin %t/lib
 // RUN: touch %t/lib/libLLVMSYCL.so
 // RUN: ln -s %clang %t/bin/clang
-// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl %s 2>&1 \
+// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-LSYCL-FLAT %s
 // CHECK-LSYCL-FLAT: clang-linker-wrapper{{.*}} 
"{{.*}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}libLLVMSYCL.so"
 
@@ -28,6 +30,7 @@
 // RUN: rm -rf %t && mkdir -p %t/bin %t/lib/x86_64-unknown-linux-gnu
 // RUN: touch %t/lib/x86_64-unknown-linux-gnu/libLLVMSYCL.so
 // RUN: ln -s %clang %t/bin/clang
-// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl -nolibsycl %s 2>&1 \
+// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl -nolibsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-NOLIBSYCL %s
 // CHECK-NOLIBSYCL-NOT: libLLVMSYCL.so

diff  --git a/clang/test/Driver/sycl-offload-jit-xarch.cpp 
b/clang/test/Driver/sycl-offload-jit-xarch.cpp
index 53af2b16a33f1..6801cb5e6da9b 100644
--- a/clang/test/Driver/sycl-offload-jit-xarch.cpp
+++ b/clang/test/Driver/sycl-offload-jit-xarch.cpp
@@ -2,12 +2,14 @@
 
 // Verify that -Xarch_spirv64 forwards options to the SYCL device compilation
 // and clang-linker-wrapper call.
-// RUN: %clang -fsycl --offload-targets=spirv64-unknown-unknown -Xarch_spirv64 
-O3 -### %s 2>&1 \
+// RUN: %clang -fsycl --no-offloadlib \
+// RUN:   --offload-targets=spirv64-unknown-unknown -Xarch_spirv64 -O3 -### %s 
2>&1 \
 // RUN: | FileCheck -check-prefix=SYCL-DEVICE-O3 %s
 // SYCL-DEVICE-O3: "-triple" "spirv64-unknown-unknown" "-aux-triple" "{{.*}}" 
"-O3"{{.*}} "-fsycl-is-device"
 // SYCL-DEVICE-O3: {{"[^"]*clang-linker-wrapper[^"]*".* 
"--device-compiler=spirv64-unknown-unknown=-O3"}}
 
 // Verify that `-Xarch_spirv64` forwards libraries to the device linker.
-// RUN: %clang -fsycl --offload-targets=spirv64-unknown-unknown -Xarch_spirv64 
-Wl,-lfoo -### %s 2>&1 \
+// RUN: %clang -fsycl --no-offloadlib \
+// RUN:   --offload-targets=spirv64-unknown-unknown -Xarch_spirv64 -Wl,-lfoo 
-### %s 2>&1 \
 // RUN: | FileCheck -check-prefix=DEVICE-LINKER %s
 // DEVICE-LINKER: {{"[^"]*clang-linker-wrapper[^"]*".* 
"--device-linker=spirv64-unknown-unknown=-lfoo"}}

diff  --git a/clang/test/Driver/sycl-offload-jit.cpp 
b/clang/test/Driver/sycl-offload-jit.cpp
index c8eff1a4dd28f..30005ab49d3a0 100644
--- a/clang/test/Driver/sycl-offload-jit.cpp
+++ b/clang/test/Driver/sycl-offload-jit.cpp
@@ -21,7 +21,8 @@
 
 /// Check expected default values for device compilation when using -fsycl as
 /// well as llvm-offload-binary inputs.
-// RUN: %clang -### -fsycl -c --target=x86_64-unknown-linux-gnu %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib \
+// RUN:   -c --target=x86_64-unknown-linux-gnu %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-DEVICE-TRIPLE %s
 // CHK-DEVICE-TRIPLE: "-cc1"{{.*}} "-triple" "spirv64-unknown-unknown"
 // CHK-DEVICE-TRIPLE-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
@@ -36,42 +37,46 @@
 
 /// Check -fsycl-is-device is passed when compiling for the device.
 /// Check -fsycl-is-host is passed when compiling for host.
-// RUN: %clang -### -fsycl -c %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -c %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=CHK-FSYCL-IS-DEVICE,CHK-FSYCL-IS-HOST %s
-// RUN: %clang -### -fsycl -fsycl-device-only %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -fsycl-device-only %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-FSYCL-IS-DEVICE %s
-// RUN: %clang_cl -### -fsycl -c -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib -c -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=CHK-FSYCL-IS-DEVICE,CHK-FSYCL-IS-HOST %s
-// RUN: %clang -### -fsycl -fsycl-host-only %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -fsycl-host-only %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-FSYCL-IS-HOST %s
 // CHK-FSYCL-IS-DEVICE: "-cc1"{{.*}} "-fsycl-is-device" {{.*}} "-emit-llvm-bc"
 // CHK-FSYCL-IS-HOST: "-cc1"{{.*}} "-fsycl-is-host"
 
 // Check that --allow-partial-linkage and --create-library are not passed to
 // clang-linker-wrapper for SYCL (they are spirv-link flags, not 
clang-sycl-linker flags).
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl %s 2>&1 \
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib 
%s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-NO-SPIRVLINK-FLAGS %s
 // CHECK-NO-SPIRVLINK-FLAGS-NOT: 
--device-linker=spirv64-unknown-unknown=--allow-partial-linkage
 // CHECK-NO-SPIRVLINK-FLAGS-NOT: 
--device-linker=spirv64-unknown-unknown=--create-library
 
 /// Check -fsycl-device-image-split= is forwarded to clang-sycl-linker as the
 /// corresponding --module-split-mode= value.
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl 
-fsycl-device-image-split=kernel %s 2>&1 \
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib \
+// RUN:   -fsycl-device-image-split=kernel %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-SPLIT-KERNEL %s
 // CHK-SPLIT-KERNEL: 
clang-linker-wrapper{{.*}}"--device-linker=spirv64-unknown-unknown=--module-split-mode=kernel"
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl 
-fsycl-device-image-split=translation_unit %s 2>&1 \
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib \
+// RUN:   -fsycl-device-image-split=translation_unit %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-SPLIT-TU %s
 // CHK-SPLIT-TU: 
clang-linker-wrapper{{.*}}"--device-linker=spirv64-unknown-unknown=--module-split-mode=translation_unit"
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl 
-fsycl-device-image-split=link_unit %s 2>&1 \
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib \
+// RUN:   -fsycl-device-image-split=link_unit %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-SPLIT-LU %s
 // CHK-SPLIT-LU: 
clang-linker-wrapper{{.*}}"--device-linker=spirv64-unknown-unknown=--module-split-mode=link_unit"
 
 /// Check the bare -fsycl-device-image-split flag aliases to 
'translation_unit'.
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl 
-fsycl-device-image-split %s 2>&1 \
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib \
+// RUN:   -fsycl-device-image-split %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-SPLIT-TU %s
 
 /// Check that without -fsycl-device-image-split, no --module-split-mode= is 
passed.
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl %s 2>&1 \
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fsycl --no-offloadlib 
%s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-NO-SPLIT %s
 // CHK-NO-SPLIT-NOT: --module-split-mode=
 
@@ -81,7 +86,8 @@
 // CHK-SPLIT-INVALID: error: invalid value 'bogus' in 
'-fsycl-device-image-split='
 
 /// Check -fsycl-device-image-split is unused when not linking (e.g. -c).
-// RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fsycl 
-fsycl-device-image-split=kernel %s 2>&1 \
+// RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fsycl 
--no-offloadlib \
+// RUN:   -fsycl-device-image-split=kernel %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHK-SPLIT-UNUSED %s
 // CHK-SPLIT-UNUSED: warning: argument unused during compilation: 
'-fsycl-device-image-split=kernel'
 

diff  --git a/clang/test/Driver/sycl-print-internal-defines.cpp 
b/clang/test/Driver/sycl-print-internal-defines.cpp
index 389aaf25608c6..b0efa278a5660 100644
--- a/clang/test/Driver/sycl-print-internal-defines.cpp
+++ b/clang/test/Driver/sycl-print-internal-defines.cpp
@@ -1,8 +1,8 @@
 // Test that clang can print defines in SYCL mode.
 
-// RUN: %clangxx -fsycl -dM -E %s 2>&1 | FileCheck --check-prefix 
CHECK-PRINT-INTERNAL-DEFINES %s
+// RUN: %clangxx -fsycl --no-offloadlib -dM -E %s 2>&1 | FileCheck 
--check-prefix CHECK-PRINT-INTERNAL-DEFINES %s
 // CHECK-PRINT-INTERNAL-DEFINES: #define
 
 // Printing defines also works when input is stdin.
-// RUN: %clangxx -fsycl -dM -E - < /dev/null 2>&1 | FileCheck 
--check-prefixes=CHECK-PRINT-INTERNAL-DEFINES,CHECK-NO-ERROR %s
+// RUN: %clangxx -fsycl --no-offloadlib -dM -E - < /dev/null 2>&1 | FileCheck 
--check-prefixes=CHECK-PRINT-INTERNAL-DEFINES,CHECK-NO-ERROR %s
 // CHECK-NO-ERROR-NOT: error:

diff  --git a/clang/test/Driver/sycl-rtlib-sysroot-mismatch.cpp 
b/clang/test/Driver/sycl-rtlib-sysroot-mismatch.cpp
index 87ed4ba1f9ff7..8a339edaeeeca 100644
--- a/clang/test/Driver/sycl-rtlib-sysroot-mismatch.cpp
+++ b/clang/test/Driver/sycl-rtlib-sysroot-mismatch.cpp
@@ -5,13 +5,15 @@
 // RUN: rm -rf %t && mkdir -p %t/bin %t/lib
 // RUN: touch %t/lib/libLLVMSYCL.so
 // RUN: ln -s %clang %t/bin/clang
-// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl --sysroot=/nonexistent-prefix %s 2>&1 \
+// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl --sysroot=/nonexistent-prefix 
%s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-FLAT %s
 
 // RUN: rm -rf %t && mkdir -p %t/bin %t/lib/x86_64-unknown-linux-gnu
 // RUN: touch %t/lib/x86_64-unknown-linux-gnu/libLLVMSYCL.so
 // RUN: ln -s %clang %t/bin/clang
-// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl --sysroot=/nonexistent-prefix %s 2>&1 \
+// RUN: %t/bin/clang -### -no-canonical-prefixes 
--target=x86_64-unknown-linux-gnu -fsycl \
+// RUN:   -resource-dir=%S/Inputs/spirv64-sycl --sysroot=/nonexistent-prefix 
%s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-PER-TARGET %s
 
 // CHECK-FLAT: "{{.*}}/bin/../lib/libLLVMSYCL.so"

diff  --git a/clang/test/Driver/sycl-std-default.cpp 
b/clang/test/Driver/sycl-std-default.cpp
index df377169a3944..ad73522bed1c6 100644
--- a/clang/test/Driver/sycl-std-default.cpp
+++ b/clang/test/Driver/sycl-std-default.cpp
@@ -1,6 +1,6 @@
 // Tests that SYCL defaults to C++17 when no -std= is specified
 
-// RUN: %clangxx -### -fsycl -c %s 2>&1 | FileCheck %s 
--check-prefixes=CHECK-DEVICE,CHECK-HOST
+// RUN: %clangxx -### -fsycl --no-offloadlib -c %s 2>&1 | FileCheck %s 
--check-prefixes=CHECK-DEVICE,CHECK-HOST
 
 // CHECK-DEVICE: "-cc1"{{.*}} "-fsycl-is-device"
 // CHECK-DEVICE-SAME: "-std=c++17"
@@ -8,7 +8,7 @@
 // CHECK-HOST-SAME: "-std=c++17"
 
 // Test that explicit -std= overrides the default
-// RUN: %clangxx -### -fsycl -std=c++20 -c %s 2>&1 | FileCheck %s 
--check-prefixes=CHECK-OVERRIDE-DEVICE,CHECK-OVERRIDE-HOST
+// RUN: %clangxx -### -fsycl --no-offloadlib -std=c++20 -c %s 2>&1 | FileCheck 
%s --check-prefixes=CHECK-OVERRIDE-DEVICE,CHECK-OVERRIDE-HOST
 
 // CHECK-OVERRIDE-DEVICE: "-cc1"{{.*}} "-fsycl-is-device"
 // CHECK-OVERRIDE-DEVICE-SAME: "-std=c++20"
@@ -34,7 +34,7 @@
 // CHECK-C99-ERROR: error: invalid argument '-std=c99' not allowed with 
'-fsycl'
 
 // Test on Windows with clang-cl (MSVC mode)
-// RUN: %clang_cl --target=x86_64-pc-windows-msvc -### -fsycl -- %s 2>&1 | 
FileCheck %s --check-prefixes=CHECK-MSVC-DEVICE,CHECK-MSVC-HOST
+// RUN: %clang_cl --target=x86_64-pc-windows-msvc -### -fsycl --no-offloadlib 
-- %s 2>&1 | FileCheck %s --check-prefixes=CHECK-MSVC-DEVICE,CHECK-MSVC-HOST
 
 // CHECK-MSVC-DEVICE: "-cc1"{{.*}} "-fsycl-is-device"
 // CHECK-MSVC-DEVICE-SAME: "-std=c++17"
@@ -42,7 +42,7 @@
 // CHECK-MSVC-HOST-SAME: "-std=c++17"
 
 // Test that /std: override works on Windows
-// RUN: %clang_cl --target=x86_64-pc-windows-msvc -### -fsycl /std:c++20 -- %s 
2>&1 | FileCheck %s 
--check-prefixes=CHECK-MSVC-OVERRIDE-DEVICE,CHECK-MSVC-OVERRIDE-HOST
+// RUN: %clang_cl --target=x86_64-pc-windows-msvc -### -fsycl --no-offloadlib 
/std:c++20 -- %s 2>&1 | FileCheck %s 
--check-prefixes=CHECK-MSVC-OVERRIDE-DEVICE,CHECK-MSVC-OVERRIDE-HOST
 
 // CHECK-MSVC-OVERRIDE-DEVICE: "-cc1"{{.*}} "-fsycl-is-device"
 // CHECK-MSVC-OVERRIDE-DEVICE-SAME: "-std=c++20"

diff  --git a/clang/test/Driver/sycl-windows.cpp 
b/clang/test/Driver/sycl-windows.cpp
index f07c05e74c3c7..e4b26feaa9292 100644
--- a/clang/test/Driver/sycl-windows.cpp
+++ b/clang/test/Driver/sycl-windows.cpp
@@ -6,7 +6,7 @@
 // -libpath: in linker output.
 
 /// Test 1: /MD (explicit) and release library dependency
-// RUN: %clang_cl -### -fsycl /MD --target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib /MD 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-MD %s
 // CHECK-MD: "-cc1"
 // CHECK-MD: "--dependent-lib=LLVMSYCL"
@@ -24,14 +24,14 @@
 // CHECK-MTD-ERROR: error: SYCL requires dynamic C++ runtime
 
 /// Test 4: /MD uses release library
-// RUN: %clang_cl -### -fsycl /MD --target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib /MD 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-RELEASE %s
 // CHECK-RELEASE: "-cc1"
 // CHECK-RELEASE: "--dependent-lib=LLVMSYCL"
 // CHECK-RELEASE-NOT: LLVMSYCLd
 
 /// Test 5: /MDd uses debug library
-// RUN: %clang_cl -### -fsycl /MDd --target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib /MDd 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-DEBUG %s
 // CHECK-DEBUG: "-cc1"
 // CHECK-DEBUG: "--dependent-lib=LLVMSYCLd"
@@ -44,70 +44,70 @@
 // CHECK-STATIC-ERROR: error: SYCL requires dynamic C++ runtime
 
 /// Test 7: -fms-runtime-lib=dll_dbg uses debug library
-// RUN: %clang_cl -### -fsycl -fms-runtime-lib=dll_dbg \
+// RUN: %clang_cl -### -fsycl --no-offloadlib -fms-runtime-lib=dll_dbg \
 // RUN:   --target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-FLAG-DEBUG %s
 // CHECK-FLAG-DEBUG: "-cc1"
 // CHECK-FLAG-DEBUG: "--dependent-lib=LLVMSYCLd"
 
 /// Test 8: LNK4078 warning is suppressed
-// RUN: %clang_cl -### -fsycl --target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib --target=x86_64-pc-windows-msvc 
-- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-IGNORE %s
 // CHECK-IGNORE: clang-linker-wrapper"
 // CHECK-IGNORE: "/IGNORE:4078"
 
 /// Test 9: -nolibsycl skips library dependency and CRT check
-// RUN: %clang_cl -### -fsycl -nolibsycl /MT \
+// RUN: %clang_cl -### -fsycl -nolibsycl --no-offloadlib /MT \
 // RUN:   --target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-NOLIBSYCL %s
 // CHECK-NOLIBSYCL-NOT: error:
 // CHECK-NOLIBSYCL-NOT: "--dependent-lib=LLVMSYCL"
 
 /// Test 10: Explicit /MD results in correct library
-// RUN: %clang_cl -### -fsycl /MD --target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib /MD 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-EXPLICIT-MD %s
 // CHECK-EXPLICIT-MD: "-cc1"
 // CHECK-EXPLICIT-MD: "--dependent-lib=LLVMSYCL"
 
 /// Test 11: Library search path is added at linker stage
-// RUN: %clang_cl -### -fsycl /MD --target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang_cl -### -fsycl --no-offloadlib /MD 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-LIBPATH %s
 // CHECK-LIBPATH: clang-linker-wrapper"
 // CHECK-LIBPATH: "-libpath:{{.*}}{{[/\\]+}}lib"
 
 /// Test 12: clang (non-clang-cl) with MSVC target uses -defaultlib:
-// RUN: %clang -### -fsycl -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-CLANG-DEFAULTLIB %s
 // CHECK-CLANG-DEFAULTLIB: clang-linker-wrapper"
 // CHECK-CLANG-DEFAULTLIB: "-libpath:{{.*}}{{[/\\]+}}lib"
 // CHECK-CLANG-DEFAULTLIB: "-defaultlib:LLVMSYCL"
 
 /// Test 13: clang with -fms-runtime-lib=dll_dbg uses debug library via 
-defaultlib:
-// RUN: %clang -### -fsycl -fms-runtime-lib=dll_dbg 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -fms-runtime-lib=dll_dbg 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-CLANG-DEBUG %s
 // CHECK-CLANG-DEBUG: clang-linker-wrapper"
 // CHECK-CLANG-DEBUG: "-defaultlib:LLVMSYCLd"
 
 /// Test 14: Default CRT behavior - release library when no CRT flag specified
-// RUN: %clang -### -fsycl -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-DEFAULT-CRT %s
 // CHECK-DEFAULT-CRT: "-cc1"
 // CHECK-DEFAULT-CRT: "--dependent-lib=LLVMSYCL"
 // CHECK-DEFAULT-CRT-NOT: LLVMSYCLd
 
 /// Test 15: Separate compilation - compile step embeds --dependent-lib in 
object
-// RUN: %clang -### -fsycl -c -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -c -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-SEP-COMPILE %s
 // CHECK-SEP-COMPILE: "--dependent-lib=LLVMSYCL"
 
 /// Test 16: Separate compilation - link step adds -libpath: and -defaultlib: 
for pre-compiled object
 // RUN: touch %t.obj
-// RUN: %clang -### -fsycl -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %t.obj 2>&1 \
+// RUN: %clang -### -fsycl --no-offloadlib -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %t.obj 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-SEP-LINK %s
 // CHECK-SEP-LINK: "-libpath:{{.*}}{{[/\\]+}}lib"
 // CHECK-SEP-LINK: "-defaultlib:LLVMSYCL"
 
 /// Test 17: clang (non-clang-cl) with -nolibsycl suppresses 
-defaultlib:LLVMSYCL
-// RUN: %clang -### -fsycl -nolibsycl -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
+// RUN: %clang -### -fsycl -nolibsycl --no-offloadlib -fms-runtime-lib=dll 
--target=x86_64-pc-windows-msvc -- %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-CLANG-NOLIBSYCL %s
 // CHECK-CLANG-NOLIBSYCL-NOT: "-defaultlib:LLVMSYCL"

diff  --git a/clang/test/Driver/sycl.cpp b/clang/test/Driver/sycl.cpp
index e78b2a7593323..fdd397579af0f 100644
--- a/clang/test/Driver/sycl.cpp
+++ b/clang/test/Driver/sycl.cpp
@@ -1,18 +1,18 @@
-// RUN: %clang -### -fsycl -c %s 2>&1 | FileCheck %s --check-prefix=ENABLED
-// RUN: %clang -### -fsycl %s 2>&1 | FileCheck %s --check-prefix=ENABLED
-// RUN: %clang -### -fsycl -sycl-std=1.2.1 %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
-// RUN: %clang -### -fsycl -sycl-std=121 %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
-// RUN: %clang -### -fsycl -sycl-std=2017 %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
-// RUN: %clang -### -fsycl -sycl-std=2020 %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
-// RUN: %clang -### -fsycl -sycl-std=sycl-1.2.1 %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
-// RUN: %clang -### -fno-sycl -fsycl %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib -c %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib -sycl-std=1.2.1 %s 2>&1 | FileCheck 
%s --check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib -sycl-std=121 %s 2>&1 | FileCheck 
%s --check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib -sycl-std=2017 %s 2>&1 | FileCheck 
%s --check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib -sycl-std=2020 %s 2>&1 | FileCheck 
%s --check-prefix=ENABLED
+// RUN: %clang -### -fsycl --no-offloadlib -sycl-std=sycl-1.2.1 %s 2>&1 | 
FileCheck %s --check-prefix=ENABLED
+// RUN: %clang -### -fno-sycl -fsycl --no-offloadlib %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
 // RUN: %clang -### -sycl-std=2017 %s 2>&1 | FileCheck %s 
--check-prefix=DISABLED
-// RUN: %clangxx -### -fsycl %s 2>&1 | FileCheck %s --check-prefix=ENABLED
+// RUN: %clangxx -### -fsycl --no-offloadlib %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
 // RUN: %clangxx -### -fno-sycl %s 2>&1 | FileCheck %s --check-prefix=DISABLED
 // RUN: %clangxx -### -fsycl -fno-sycl %s 2>&1 | FileCheck %s 
--check-prefix=DISABLED
 // RUN: %clangxx -### %s 2>&1 | FileCheck %s --check-prefix=DISABLED
-// RUN: %clang_cl -### -fsycl -sycl-std=2017 -- %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
-// RUN: %clang_cl -### -fsycl -- %s 2>&1 | FileCheck %s --check-prefix=ENABLED
+// RUN: %clang_cl -### -fsycl --no-offloadlib -sycl-std=2017 -- %s 2>&1 | 
FileCheck %s --check-prefix=ENABLED
+// RUN: %clang_cl -### -fsycl --no-offloadlib -- %s 2>&1 | FileCheck %s 
--check-prefix=ENABLED
 // RUN: %clang_cl -### -- %s 2>&1 | FileCheck %s --check-prefix=DISABLED
 
 // ENABLED: "-cc1"{{.*}} "-fsycl-is-device"
@@ -20,9 +20,9 @@
 // DISABLED-NOT: "-fsycl-is-device"
 // DISABLED-NOT: "-sycl-std="
 
-// RUN: %clang -### -fsycl  %s 2>&1 | FileCheck %s --check-prefix=DEFAULT
-// RUN: %clangxx -### -fsycl %s 2>&1 | FileCheck %s --check-prefix=DEFAULT
-// RUN: %clang_cl -### -fsycl -- %s 2>&1 | FileCheck %s --check-prefix=DEFAULT
+// RUN: %clang -### -fsycl --no-offloadlib %s 2>&1 | FileCheck %s 
--check-prefix=DEFAULT
+// RUN: %clangxx -### -fsycl --no-offloadlib %s 2>&1 | FileCheck %s 
--check-prefix=DEFAULT
+// RUN: %clang_cl -### -fsycl --no-offloadlib -- %s 2>&1 | FileCheck %s 
--check-prefix=DEFAULT
 
 // DEFAULT: "-sycl-std=2020"
 
@@ -32,5 +32,5 @@
 // CHECK-NO-OFFLOADLIB-NOT: warning: unknown argument ignored in clang-cl: 
'--no-offloadlib'
 
 // Verify that -fsycl with a C input is an error (enforced in the frontend).
-// RUN: not %clang -fsycl -x c %s 2>&1 | FileCheck %s 
--check-prefix=CHECK-C-INPUT
+// RUN: not %clang -fsycl --no-offloadlib -x c %s 2>&1 | FileCheck %s 
--check-prefix=CHECK-C-INPUT
 // CHECK-C-INPUT: error: invalid argument 'C' not allowed with '-fsycl'

diff  --git a/compiler-rt/lib/builtins/CMakeLists.txt 
b/compiler-rt/lib/builtins/CMakeLists.txt
index ea21c36d3d31f..8761e25ebc1a5 100644
--- a/compiler-rt/lib/builtins/CMakeLists.txt
+++ b/compiler-rt/lib/builtins/CMakeLists.txt
@@ -1147,6 +1147,38 @@ else ()
       get_compiler_rt_output_dir(${arch} BUILTIN_LIB_OUTPUT_DIR)
       set_output_name(BUILTIN_LIB_OUTPUT_NAME clang_rt.builtins ${arch})
       file(WRITE 
"${BUILTIN_LIB_OUTPUT_DIR}/${BUILTIN_LIB_OUTPUT_NAME}.sources.txt" 
"${${arch}_SOURCES}")
+
+      # For spirv64, produce a combined bitcode file alongside the static 
archive.
+      # -mlink-builtin-bitcode expects raw LLVM IR and cannot unpack a static 
archive,
+      # so we use llvm-link to merge the archive members into a single .bc 
file.
+      if("${arch}" MATCHES "^spirv64")
+        find_program(LLVM_LINK llvm-link
+          PATHS ${LLVM_TOOLS_BINARY_DIR}
+          NO_DEFAULT_PATH)
+        if(LLVM_LINK)
+          set(SPIRV64_BC_OUTPUT 
"${BUILTIN_LIB_OUTPUT_DIR}/lib${BUILTIN_LIB_OUTPUT_NAME}.bc")
+          add_custom_command(
+            OUTPUT "${SPIRV64_BC_OUTPUT}"
+            COMMAND "${LLVM_LINK}"
+                    "$<TARGET_FILE:clang_rt.builtins-spirv64>"
+                    -o "${SPIRV64_BC_OUTPUT}"
+            DEPENDS clang_rt.builtins-${arch}
+            COMMENT "Linking lib${BUILTIN_LIB_OUTPUT_NAME}.bc"
+            VERBATIM)
+          add_custom_target(clang_rt.builtins-spirv64-bc ALL
+            DEPENDS "${SPIRV64_BC_OUTPUT}")
+          add_dependencies(builtins clang_rt.builtins-spirv64-bc)
+          get_compiler_rt_install_dir(${arch} BUILTIN_INSTALL_DIR)
+          install(FILES "${SPIRV64_BC_OUTPUT}"
+                  DESTINATION "${BUILTIN_INSTALL_DIR}"
+                  COMPONENT builtins)
+        else()
+          message(WARNING
+            "llvm-link not found 
(LLVM_TOOLS_BINARY_DIR='${LLVM_TOOLS_BINARY_DIR}'); "
+            "skipping libclang_rt.builtins.bc for spirv64")
+        endif()
+      endif()
+
       cmake_pop_check_state()
     endif ()
   endforeach ()


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to