diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index c2de6578773c..f2a58774e99a 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -586,8 +586,13 @@ Expected clang(ArrayRef 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 &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 0bf1675e437b..812d5c1f4631 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 98859aa87fe8..9e2ef17a42fb 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"