[clang] [llvm] [ClangLinkerWrapper][SPIRV] Fix embed bitcode option (PR #213137)

via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 31 07:35:06 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-offload

Author: Nick Sarnie (sarnex)

<details>
<summary>Changes</summary>

We need to pass the right linker option and not try to containerize it.

Fixes two OpenMP offload JIT tests, the other has some front end assert I will look at.

---
Full diff: https://github.com/llvm/llvm-project/pull/213137.diff


3 Files Affected:

- (modified) clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp (+9-3) 
- (modified) offload/test/jit/empty_kernel_lvl1.c (-1) 
- (modified) offload/test/jit/empty_kernel_lvl2.c (-1) 


``````````diff
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index c2de6578773c7..f2a58774e99af 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -586,8 +586,13 @@ Expected<StringRef> clang(ArrayRef<StringRef> InputFiles, const ArgList &Args,
   if (SaveTemps && linkerSupportsLTO(Args))
     CmdArgs.push_back("-Wl,--save-temps");
 
-  if (Args.hasArg(OPT_embed_bitcode))
-    CmdArgs.push_back("-Wl,--lto-emit-llvm");
+  if (Args.hasArg(OPT_embed_bitcode)) {
+    // SPIR-V does not use the LTO linker path, it links bitcode via llvm-link.
+    if (Triple.isSPIRV())
+      CmdArgs.push_back("-emit-llvm");
+    else
+      CmdArgs.push_back("-Wl,--lto-emit-llvm");
+  }
 
   // For linking device code with the SYCL offload kind, special handling is
   // required. Passing --sycl-link to clang results in a call to
@@ -640,7 +645,8 @@ Error containerizeRawImage(std::unique_ptr<MemoryBuffer> &Img, OffloadKind Kind,
                            const ArgList &Args) {
   llvm::Triple Triple(Args.getLastArgValue(OPT_triple_EQ));
   if (Kind == OFK_OpenMP && Triple.isSPIRV() &&
-      Triple.getVendor() == llvm::Triple::Intel)
+      Triple.getVendor() == llvm::Triple::Intel &&
+      !Args.hasArg(OPT_embed_bitcode))
     return offloading::intel::containerizeOpenMPSPIRVImage(Img, Triple);
   return Error::success();
 }
diff --git a/offload/test/jit/empty_kernel_lvl1.c b/offload/test/jit/empty_kernel_lvl1.c
index 0bf1675e437b7..812d5c1f46314 100644
--- a/offload/test/jit/empty_kernel_lvl1.c
+++ b/offload/test/jit/empty_kernel_lvl1.c
@@ -29,6 +29,5 @@
 // clang-format on
 
 // REQUIRES: gpu
-// XFAIL: intelgpu
 
 #include "empty_kernel.inc"
diff --git a/offload/test/jit/empty_kernel_lvl2.c b/offload/test/jit/empty_kernel_lvl2.c
index 98859aa87fe86..9e2ef17a42fbd 100644
--- a/offload/test/jit/empty_kernel_lvl2.c
+++ b/offload/test/jit/empty_kernel_lvl2.c
@@ -24,6 +24,5 @@
 // clang-format on
 
 // REQUIRES: gpu
-// XFAIL: intelgpu
 
 #include "empty_kernel.inc"

``````````

</details>


https://github.com/llvm/llvm-project/pull/213137


More information about the cfe-commits mailing list