https://github.com/YuriPlyakhin updated https://github.com/llvm/llvm-project/pull/200513
>From 7e8ba3e9d398b2572a04a9fd8876f434f23981b8 Mon Sep 17 00:00:00 2001 From: "Plyakhin, Yury" <[email protected]> Date: Wed, 27 May 2026 02:10:16 +0200 Subject: [PATCH 1/5] draft --- .../linker-wrapper-image.c | 2 +- .../OffloadTools/clang-sycl-linker/basic.ll | 20 ++---- .../clang-sycl-linker/split-mode.ll | 6 ++ .../ClangLinkerWrapper.cpp | 13 ---- .../clang-sycl-linker/ClangSYCLLinker.cpp | 72 ++++++++++++------- 5 files changed, 59 insertions(+), 54 deletions(-) diff --git a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c index 9d3c65fd36760..23f69773f8e8d 100644 --- a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c +++ b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c @@ -311,7 +311,7 @@ // RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-linux-gnu -r \ // RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=SYCL -// SYCL: @.sycl_offloading.binary = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] c"{{.*}}", section ".llvm.offloading" +// SYCL: @.sycl_offloading.binary = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] {{(c".*"|zeroinitializer)}}, section ".llvm.offloading" // SYCL: define internal void @sycl.descriptor_reg() section ".text.startup" { // SYCL-NEXT: entry: diff --git a/clang/test/OffloadTools/clang-sycl-linker/basic.ll b/clang/test/OffloadTools/clang-sycl-linker/basic.ll index 3bd40eda90f71..fb0e7acd3b5e5 100644 --- a/clang/test/OffloadTools/clang-sycl-linker/basic.ll +++ b/clang/test/OffloadTools/clang-sycl-linker/basic.ll @@ -24,16 +24,13 @@ ; RUN: not clang-sycl-linker %t-missing.bc -o %t.out 2>&1 | FileCheck %s --check-prefix=MISSING ; MISSING: Input file '{{.*}}-missing.bc' does not exist ; -; Test the dry run of a simple case to link two input files. +; Test a simple case to link two input files. +; Test that IMG_SPIRV image kind is set for non-AOT compilation. ; RUN: clang-sycl-linker --dry-run -v --module-split-mode=none %t/input1.bc %t/input2.bc -o %t/spirv.out 2>&1 \ ; RUN: | FileCheck %s --check-prefix=SIMPLE-FO ; SIMPLE-FO: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; SIMPLE-FO-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: {{.*}}_0.spv -; SIMPLE-FO-NOT: {{.+}} -; -; Test that IMG_SPIRV image kind is set for non-AOT compilation. -; RUN: llvm-objdump --offloading %t/spirv.out | FileCheck %s --check-prefix=IMAGE-KIND-SPIRV -; IMAGE-KIND-SPIRV: kind spir-v +; SIMPLE-FO-NEXT: sycl-bundle: image kind: spv,{{.*}} ; ; Test the dry run of a simple case with device library files specified. ; RUN: mkdir -p %t/libs @@ -87,27 +84,24 @@ ; NO-DIR-AS-LIB: 'libs' library file not found ; ; Test AOT compilation for an Intel GPU. +; Test that IMG_Object image kind is set for AOT compilation (Intel GPU). ; RUN: clang-sycl-linker --dry-run -v --module-split-mode=none -arch=bmg_g21 %t/input1.bc %t/input2.bc -o %t/aot-gpu.out 2>&1 \ ; RUN: --ocloc-options="-a -b" \ ; RUN: | FileCheck %s --check-prefix=AOT-INTEL-GPU ; AOT-INTEL-GPU: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; AOT-INTEL-GPU-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: [[SPIRVTRANSLATIONOUT:.*]]_0.spv ; AOT-INTEL-GPU-NEXT: "{{.*}}ocloc{{.*}}" {{.*}}-device bmg_g21 -a -b {{.*}}-output [[SPIRVTRANSLATIONOUT]]_0.out -file [[SPIRVTRANSLATIONOUT]]_0.spv -; -; Test that IMG_Object image kind is set for AOT compilation (Intel GPU). -; RUN: llvm-objdump --offloading %t/aot-gpu.out | FileCheck %s --check-prefix=IMAGE-KIND-OBJECT -; IMAGE-KIND-OBJECT: kind elf +; AOT-INTEL-GPU-NEXT: sycl-bundle: image kind: o,{{.*}} ; ; Test AOT compilation for an Intel CPU. +; Test that IMG_Object image kind is set for AOT compilation (Intel CPU). ; RUN: clang-sycl-linker --dry-run -v --module-split-mode=none -arch=graniterapids %t/input1.bc %t/input2.bc -o %t/aot-cpu.out 2>&1 \ ; RUN: --opencl-aot-options="-a -b" \ ; RUN: | FileCheck %s --check-prefix=AOT-INTEL-CPU ; AOT-INTEL-CPU: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; AOT-INTEL-CPU-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: [[SPIRVTRANSLATIONOUT:.*]]_0.spv ; AOT-INTEL-CPU-NEXT: "{{.*}}opencl-aot{{.*}}" {{.*}}--device=cpu -a -b {{.*}}-o [[SPIRVTRANSLATIONOUT]]_0.out [[SPIRVTRANSLATIONOUT]]_0.spv -; -; Test that IMG_Object image kind is set for AOT compilation (Intel CPU). -; RUN: llvm-objdump --offloading %t/aot-cpu.out | FileCheck %s --check-prefix=IMAGE-KIND-OBJECT +; AOT-INTEL-CPU-NEXT: sycl-bundle: image kind: o,{{.*}} ; ; Check that the output file must be specified. ; RUN: not clang-sycl-linker --dry-run %t/input1.bc %t/input2.bc 2>&1 \ diff --git a/clang/test/OffloadTools/clang-sycl-linker/split-mode.ll b/clang/test/OffloadTools/clang-sycl-linker/split-mode.ll index 56a6b3e082550..de44c1cb9ac70 100644 --- a/clang/test/OffloadTools/clang-sycl-linker/split-mode.ll +++ b/clang/test/OffloadTools/clang-sycl-linker/split-mode.ll @@ -14,6 +14,7 @@ ; RUN: | FileCheck %s --check-prefix=SPLIT-NONE ; SPLIT-NONE: link: inputs: {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; SPLIT-NONE-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: {{.*}}_0.spv +; SPLIT-NONE-NEXT: sycl-bundle: image kind: spv,{{.*}} ; SPLIT-NONE-NOT: {{.+}} ; ; Test the split mode ("kernel"): each SPIR_KERNEL function produces its own device image. @@ -27,6 +28,9 @@ ; SPLIT-KERNEL-NEXT: LLVM backend: input: [[SPLIT0]].bc, output: {{.*}}_0.spv ; SPLIT-KERNEL-NEXT: LLVM backend: input: [[SPLIT1]].bc, output: {{.*}}_1.spv ; SPLIT-KERNEL-NEXT: LLVM backend: input: [[SPLIT2]].bc, output: {{.*}}_2.spv +; SPLIT-KERNEL-NEXT: sycl-bundle: image kind: spv,{{.*}} +; SPLIT-KERNEL-NEXT: sycl-bundle: image kind: spv,{{.*}} +; SPLIT-KERNEL-NEXT: sycl-bundle: image kind: spv,{{.*}} ; SPLIT-KERNEL-NOT: {{.+}} ; ; Test default split mode ('source'): no --module-split-mode flag needed. @@ -45,6 +49,8 @@ ; SPLIT-SRC-NEXT: [[S1:.*]].bc [kernel_a ] ; SPLIT-SRC-NEXT: LLVM backend: input: [[S0]].bc, output: {{.*}}_0.spv ; SPLIT-SRC-NEXT: LLVM backend: input: [[S1]].bc, output: {{.*}}_1.spv +; SPLIT-SRC-NEXT: sycl-bundle: image kind: spv,{{.*}} +; SPLIT-SRC-NEXT: sycl-bundle: image kind: spv,{{.*}} ; SPLIT-SRC-NOT: {{.+}} target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64-G1" diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index c648bb38edf71..e67569b879af3 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -800,19 +800,6 @@ bundleOpenMP(ArrayRef<OffloadingImage> Images) { Expected<SmallVector<std::unique_ptr<MemoryBuffer>>> bundleSYCL(ArrayRef<OffloadingImage> Images) { SmallVector<std::unique_ptr<MemoryBuffer>> Buffers; - if (DryRun) { - // In dry-run mode there is an empty input which is insufficient for the - // testing. Therefore, we return here a stub image. - OffloadingImage Image; - Image.TheImageKind = IMG_None; - Image.TheOffloadKind = OffloadKind::OFK_SYCL; - Image.StringData["symbols"] = "stub"; - Image.Image = MemoryBuffer::getMemBufferCopy(""); - SmallString<0> SerializedImage = OffloadBinary::write(Image); - Buffers.emplace_back(MemoryBuffer::getMemBufferCopy(SerializedImage)); - return std::move(Buffers); - } - for (const OffloadingImage &Image : Images) { // clang-sycl-linker packs outputs into one binary blob. Therefore, it is // passed to Offload Wrapper as is. diff --git a/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp b/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp index 9e79bbf31464b..f3241fae30ab4 100644 --- a/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp +++ b/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp @@ -56,7 +56,7 @@ using namespace llvm::opt; using namespace llvm::object; using namespace clang; -/// Print commands/steps with arguments without executing. +/// Print commands with arguments without executing. static bool DryRun = false; /// Print verbose output. @@ -135,7 +135,7 @@ std::string getMainExecutable(const char *Name) { Expected<StringRef> createTempFile(const ArgList &Args, const Twine &Prefix, StringRef Extension) { SmallString<128> OutputFile; - if (Args.hasArg(OPT_save_temps)) { + if (Args.hasArg(OPT_save_temps) || DryRun) { // Generate a unique path name without creating a file sys::fs::createUniquePath(Prefix + "-%%%%%%." + Extension, OutputFile, /*MakeAbsolute=*/false); @@ -151,7 +151,7 @@ Expected<StringRef> createTempFile(const ArgList &Args, const Twine &Prefix, Expected<std::string> findProgram(const ArgList &Args, StringRef Name, ArrayRef<StringRef> Paths) { - if (Args.hasArg(OPT_dry_run)) + if (DryRun) return Name.str(); ErrorOr<std::string> Path = sys::findProgramByName(Name, Paths); if (!Path) @@ -176,10 +176,12 @@ Error executeCommands(StringRef ExecutablePath, ArrayRef<StringRef> Args) { if (Verbose || DryRun) printCommands(Args); - if (!DryRun) - if (sys::ExecuteAndWait(ExecutablePath, Args)) - return createStringError( - "'%s' failed", sys::path::filename(ExecutablePath).str().c_str()); + if (DryRun) + return Error::success(); + + if (sys::ExecuteAndWait(ExecutablePath, Args)) + return createStringError("'%s' failed", + sys::path::filename(ExecutablePath).str().c_str()); return Error::success(); } @@ -293,7 +295,7 @@ Expected<LinkResult> linkInputs(ArrayRef<std::string> InputFiles, if (!BitcodeOutput) return BitcodeOutput.takeError(); - if (Verbose || DryRun) { + if (Verbose) { std::string Inputs = llvm::join(InputFiles.begin(), InputFiles.end(), ", "); std::string LibInputs = llvm::join((*BCLibFiles).begin(), (*BCLibFiles).end(), ", "); @@ -349,11 +351,13 @@ Expected<LinkResult> linkInputs(ArrayRef<std::string> InputFiles, outs() << *LinkerOutput; // Write the final output into 'BitcodeOutput' file. - int FD = -1; - if (std::error_code EC = sys::fs::openFileForWrite(*BitcodeOutput, FD)) - return errorCodeToError(EC); - llvm::raw_fd_ostream OS(FD, true); - WriteBitcodeToFile(*LinkerOutput, OS); + if (!DryRun) { + int FD = -1; + if (std::error_code EC = sys::fs::openFileForWrite(*BitcodeOutput, FD)) + return errorCodeToError(EC); + llvm::raw_fd_ostream OS(FD, true); + WriteBitcodeToFile(*LinkerOutput, OS); + } return LinkResult{std::move(LinkerOutput), SmallString<256>(*BitcodeOutput), std::move(TargetTriple)}; @@ -375,6 +379,9 @@ static Error runCodeGen(StringRef File, const llvm::Triple &TargetTriple, errs() << formatv("LLVM backend: input: {0}, output: {1}\n", File, OutputFile); + if (DryRun) + return Error::success(); + // Parse input module. SMDiagnostic Err; std::unique_ptr<Module> M = parseIRFile(File, Err, C); @@ -624,11 +631,13 @@ splitDeviceCode(std::unique_ptr<Module> M, StringRef LinkedBitcodeFile, if (!BitcodeFileOrErr) return BitcodeFileOrErr.takeError(); - int FD = -1; - if (std::error_code EC = sys::fs::openFileForWrite(*BitcodeFileOrErr, FD)) - return errorCodeToError(EC); - raw_fd_ostream OS(FD, /*shouldClose=*/true); - WriteBitcodeToFile(*Part, OS); + if (!DryRun) { + int FD = -1; + if (std::error_code EC = sys::fs::openFileForWrite(*BitcodeFileOrErr, FD)) + return errorCodeToError(EC); + raw_fd_ostream OS(FD, /*shouldClose=*/true); + WriteBitcodeToFile(*Part, OS); + } SplitModules.push_back( {SmallString<256>(*BitcodeFileOrErr), @@ -640,7 +649,7 @@ splitDeviceCode(std::unique_ptr<Module> M, StringRef LinkedBitcodeFile, std::move(M), Categorizer, SplitCallback)) return Err; - if (Verbose || DryRun) { + if (Verbose) { errs() << formatv("sycl-module-split: input: {0}, mode: {1}\n", LinkedBitcodeFile, splitModeToString(Mode)); for (const SplitModule &SI : SplitModules) { @@ -750,13 +759,11 @@ Error runSYCLLink(ArrayRef<std::string> Files, const ArgList &Args) { SmallVector<OffloadingImage> Images; for (SplitModule &SI : SplitModules) { llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> FileOrErr = - llvm::MemoryBuffer::getFileOrSTDIN(SI.ModuleFilePath); - if (std::error_code EC = FileOrErr.getError()) { - if (DryRun) - FileOrErr = MemoryBuffer::getMemBuffer(""); - else - return createFileError(SI.ModuleFilePath, EC); - } + DryRun ? llvm::MemoryBuffer::getMemBuffer("") + : llvm::MemoryBuffer::getFileOrSTDIN(SI.ModuleFilePath); + if (!FileOrErr) + return createFileError(SI.ModuleFilePath, FileOrErr.getError()); + OffloadingImage TheImage{}; TheImage.TheImageKind = IsAOTCompileNeeded ? IMG_Object : IMG_SPIRV; TheImage.TheOffloadKind = OFK_SYCL; @@ -769,10 +776,21 @@ Error runSYCLLink(ArrayRef<std::string> Files, const ArgList &Args) { Images.emplace_back(std::move(TheImage)); } + if (Verbose) { + for (const OffloadingImage &Image : Images) + errs() << formatv( + "sycl-bundle: image kind: {0}, triple: {1}, arch: {2}\n", + getImageKindName(Image.TheImageKind), Image.StringData.lookup("triple"), + Image.StringData.lookup("arch")); + } + llvm::SmallString<0> Buffer = OffloadBinary::write(Images); if (Buffer.size() % OffloadBinary::getAlignment() != 0) return createStringError("Offload binary has invalid size alignment"); + if (DryRun) + return Error::success(); + auto OutputOrErr = FileOutputBuffer::create(OutputFile, Buffer.size()); if (!OutputOrErr) return OutputOrErr.takeError(); @@ -848,7 +866,7 @@ int main(int argc, char **argv) { reportError(std::move(Err)); // Remove the temporary files created. - if (!Args.hasArg(OPT_save_temps)) + if (!Args.hasArg(OPT_save_temps) && !DryRun) for (const auto &TempFile : TempFiles) if (std::error_code EC = sys::fs::remove(TempFile)) reportError(createFileError(TempFile, EC)); >From a5fb338795941533f29cc7d1bcb89c59e8811183 Mon Sep 17 00:00:00 2001 From: "Plyakhin, Yury" <[email protected]> Date: Sat, 30 May 2026 00:37:37 +0200 Subject: [PATCH 2/5] update --- .../clang-linker-wrapper/linker-wrapper-image.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c index 23f69773f8e8d..bc846e01d338b 100644 --- a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c +++ b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-image.c @@ -311,16 +311,16 @@ // RUN: clang-linker-wrapper --print-wrapped-module --dry-run --host-triple=x86_64-unknown-linux-gnu -r \ // RUN: --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 | FileCheck %s --check-prefixes=SYCL -// SYCL: @.sycl_offloading.binary = internal unnamed_addr constant [[[SIZE:[0-9]+]] x i8] {{(c".*"|zeroinitializer)}}, section ".llvm.offloading" +// SYCL: @.sycl_offloading.binary = internal unnamed_addr constant [0 x i8] zeroinitializer, section ".llvm.offloading" // SYCL: define internal void @sycl.descriptor_reg() section ".text.startup" { // SYCL-NEXT: entry: -// SYCL-NEXT: call void @__sycl_register_lib(ptr @.sycl_offloading.binary, i64 [[SIZE]]) +// SYCL-NEXT: call void @__sycl_register_lib(ptr @.sycl_offloading.binary, i64 0) // SYCL-NEXT: ret void // SYCL-NEXT: } // SYCL: define internal void @sycl.descriptor_unreg() section ".text.startup" { // SYCL-NEXT: entry: -// SYCL-NEXT: call void @__sycl_unregister_lib(ptr @.sycl_offloading.binary, i64 [[SIZE]]) +// SYCL-NEXT: call void @__sycl_unregister_lib(ptr @.sycl_offloading.binary, i64 0) // SYCL-NEXT: ret void // SYCL-NEXT: } >From 95f3afe8d992ed3d53bb87e40d512bd673ad4132 Mon Sep 17 00:00:00 2001 From: "Plyakhin, Yury" <[email protected]> Date: Sat, 30 May 2026 00:43:24 +0200 Subject: [PATCH 3/5] update --- clang/test/OffloadTools/clang-sycl-linker/basic.ll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/OffloadTools/clang-sycl-linker/basic.ll b/clang/test/OffloadTools/clang-sycl-linker/basic.ll index fb0e7acd3b5e5..ee1cf82981b9d 100644 --- a/clang/test/OffloadTools/clang-sycl-linker/basic.ll +++ b/clang/test/OffloadTools/clang-sycl-linker/basic.ll @@ -24,7 +24,7 @@ ; RUN: not clang-sycl-linker %t-missing.bc -o %t.out 2>&1 | FileCheck %s --check-prefix=MISSING ; MISSING: Input file '{{.*}}-missing.bc' does not exist ; -; Test a simple case to link two input files. +; Test the dry run of a simple case to link two input files. ; Test that IMG_SPIRV image kind is set for non-AOT compilation. ; RUN: clang-sycl-linker --dry-run -v --module-split-mode=none %t/input1.bc %t/input2.bc -o %t/spirv.out 2>&1 \ ; RUN: | FileCheck %s --check-prefix=SIMPLE-FO >From c6c35772e30a6055db80ee8463b4e68383a3ae7d Mon Sep 17 00:00:00 2001 From: "Plyakhin, Yury" <[email protected]> Date: Sat, 30 May 2026 00:52:19 +0200 Subject: [PATCH 4/5] update --- clang/test/OffloadTools/clang-sycl-linker/basic.ll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clang/test/OffloadTools/clang-sycl-linker/basic.ll b/clang/test/OffloadTools/clang-sycl-linker/basic.ll index ee1cf82981b9d..bed45ed64f1bb 100644 --- a/clang/test/OffloadTools/clang-sycl-linker/basic.ll +++ b/clang/test/OffloadTools/clang-sycl-linker/basic.ll @@ -31,6 +31,7 @@ ; SIMPLE-FO: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; SIMPLE-FO-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: {{.*}}_0.spv ; SIMPLE-FO-NEXT: sycl-bundle: image kind: spv,{{.*}} +; SIMPLE-FO-NOT: {{.+}} ; ; Test the dry run of a simple case with device library files specified. ; RUN: mkdir -p %t/libs @@ -40,6 +41,8 @@ ; RUN: | FileCheck %s --check-prefix=DEVLIBS ; DEVLIBS: link: inputs: {{.*}}.bc libfiles: {{.*}}lib1.bc, {{.*}}lib2.bc output: [[LLVMLINKOUT:.*]].bc ; DEVLIBS-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: a_0.spv +; DEVLIBS-NEXT: sycl-bundle: image kind: spv,{{.*}} +; DEVLIBS-NOT: {{.+}} ; ; Test -L short form (joined) and --bc-library= joined form. ; RUN: clang-sycl-linker --dry-run -v --module-split-mode=none %t/input1.bc -L%t/libs --bc-library=lib1.bc -o a.spv 2>&1 \ @@ -92,6 +95,7 @@ ; AOT-INTEL-GPU-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: [[SPIRVTRANSLATIONOUT:.*]]_0.spv ; AOT-INTEL-GPU-NEXT: "{{.*}}ocloc{{.*}}" {{.*}}-device bmg_g21 -a -b {{.*}}-output [[SPIRVTRANSLATIONOUT]]_0.out -file [[SPIRVTRANSLATIONOUT]]_0.spv ; AOT-INTEL-GPU-NEXT: sycl-bundle: image kind: o,{{.*}} +; AOT-INTEL-GPU-NOT: {{.+}} ; ; Test AOT compilation for an Intel CPU. ; Test that IMG_Object image kind is set for AOT compilation (Intel CPU). @@ -102,6 +106,7 @@ ; AOT-INTEL-CPU-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: [[SPIRVTRANSLATIONOUT:.*]]_0.spv ; AOT-INTEL-CPU-NEXT: "{{.*}}opencl-aot{{.*}}" {{.*}}--device=cpu -a -b {{.*}}-o [[SPIRVTRANSLATIONOUT]]_0.out [[SPIRVTRANSLATIONOUT]]_0.spv ; AOT-INTEL-CPU-NEXT: sycl-bundle: image kind: o,{{.*}} +; AOT-INTEL-CPU-NOT: {{.+}} ; ; Check that the output file must be specified. ; RUN: not clang-sycl-linker --dry-run %t/input1.bc %t/input2.bc 2>&1 \ >From 9462c25a5e0d8102b35ab15ca6670d3e73d2f6c6 Mon Sep 17 00:00:00 2001 From: "Plyakhin, Yury" <[email protected]> Date: Sat, 30 May 2026 00:59:28 +0200 Subject: [PATCH 5/5] update --- clang/test/OffloadTools/clang-sycl-linker/basic.ll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/test/OffloadTools/clang-sycl-linker/basic.ll b/clang/test/OffloadTools/clang-sycl-linker/basic.ll index bed45ed64f1bb..f27aae7cb6c1f 100644 --- a/clang/test/OffloadTools/clang-sycl-linker/basic.ll +++ b/clang/test/OffloadTools/clang-sycl-linker/basic.ll @@ -30,7 +30,7 @@ ; RUN: | FileCheck %s --check-prefix=SIMPLE-FO ; SIMPLE-FO: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; SIMPLE-FO-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: {{.*}}_0.spv -; SIMPLE-FO-NEXT: sycl-bundle: image kind: spv,{{.*}} +; SIMPLE-FO-NEXT: sycl-bundle: image kind: spv, triple: spirv64, arch: {{$}} ; SIMPLE-FO-NOT: {{.+}} ; ; Test the dry run of a simple case with device library files specified. @@ -41,7 +41,7 @@ ; RUN: | FileCheck %s --check-prefix=DEVLIBS ; DEVLIBS: link: inputs: {{.*}}.bc libfiles: {{.*}}lib1.bc, {{.*}}lib2.bc output: [[LLVMLINKOUT:.*]].bc ; DEVLIBS-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: a_0.spv -; DEVLIBS-NEXT: sycl-bundle: image kind: spv,{{.*}} +; DEVLIBS-NEXT: sycl-bundle: image kind: spv, triple: spirv64, arch: {{$}} ; DEVLIBS-NOT: {{.+}} ; ; Test -L short form (joined) and --bc-library= joined form. @@ -94,7 +94,7 @@ ; AOT-INTEL-GPU: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; AOT-INTEL-GPU-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: [[SPIRVTRANSLATIONOUT:.*]]_0.spv ; AOT-INTEL-GPU-NEXT: "{{.*}}ocloc{{.*}}" {{.*}}-device bmg_g21 -a -b {{.*}}-output [[SPIRVTRANSLATIONOUT]]_0.out -file [[SPIRVTRANSLATIONOUT]]_0.spv -; AOT-INTEL-GPU-NEXT: sycl-bundle: image kind: o,{{.*}} +; AOT-INTEL-GPU-NEXT: sycl-bundle: image kind: o, triple: spirv64, arch: bmg_g21 ; AOT-INTEL-GPU-NOT: {{.+}} ; ; Test AOT compilation for an Intel CPU. @@ -105,7 +105,7 @@ ; AOT-INTEL-CPU: link: inputs: {{.*}}.bc, {{.*}}.bc libfiles: output: [[LLVMLINKOUT:.*]].bc ; AOT-INTEL-CPU-NEXT: LLVM backend: input: [[LLVMLINKOUT]].bc, output: [[SPIRVTRANSLATIONOUT:.*]]_0.spv ; AOT-INTEL-CPU-NEXT: "{{.*}}opencl-aot{{.*}}" {{.*}}--device=cpu -a -b {{.*}}-o [[SPIRVTRANSLATIONOUT]]_0.out [[SPIRVTRANSLATIONOUT]]_0.spv -; AOT-INTEL-CPU-NEXT: sycl-bundle: image kind: o,{{.*}} +; AOT-INTEL-CPU-NEXT: sycl-bundle: image kind: o, triple: spirv64, arch: graniterapids ; AOT-INTEL-CPU-NOT: {{.+}} ; ; Check that the output file must be specified. _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
