diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 969b278562b8..07415ed3e328 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -10312,9 +10312,15 @@ void OffloadBundler::ConstructJob(Compilation &C, const JobAction &JA, T.setArchName(ArchName); Triples += T.normalize(); } else { - Triples += llvm::Triple(CurTC->ComputeEffectiveClangTriple( - TCArgs, CurDep->getOffloadingArch())) - .normalize(llvm::Triple::CanonicalForm::FOUR_IDENT); + llvm::Triple EffTriple(CurTC->ComputeEffectiveClangTriple( + TCArgs, CurDep->getOffloadingArch())); + // SYCL old-model bundler uses 3-component triples for SPIR-V and NVPTX + // targets to match the triple format used during unbundling. + if (CurKind == Action::OFK_SYCL && + (EffTriple.isSPIROrSPIRV() || EffTriple.isNVPTX())) + Triples += EffTriple.normalize(); + else + Triples += EffTriple.normalize(llvm::Triple::CanonicalForm::FOUR_IDENT); } if (CurKind != Action::OFK_Host && !CurDep->getOffloadingArch().empty() && !TCArgs.hasArg(options::OPT_fno_bundle_offload_arch)) { diff --git a/clang/test/Driver/sycl-offload-win-old-model.cpp b/clang/test/Driver/sycl-offload-win-old-model.cpp index bf9087125c17..ce1019ee04d3 100644 --- a/clang/test/Driver/sycl-offload-win-old-model.cpp +++ b/clang/test/Driver/sycl-offload-win-old-model.cpp @@ -15,7 +15,7 @@ // RUN: | FileCheck %s -check-prefix=FOFFLOAD_STATIC_LIB // RUN: %clang_cl --target=x86_64-pc-windows-msvc -fsycl --no-offload-new-driver --no-offloadlib %t-orig.obj -### /link %t-orig.lib 2>&1 \ // RUN: | FileCheck %s -check-prefix=FOFFLOAD_STATIC_LIB -// FOFFLOAD_STATIC_LIB: clang-offload-bundler{{(.exe)?}}{{.+}} "-type=o" "-targets=host-x86_64-pc-windows-msvc,sycl-spir64-unknown-unknown" "-input={{.*}}-orig.obj" "-output={{.+}}.{{(o|obj)}}" "-output={{.+}}.{{(o|obj)}}" "-unbundle" +// FOFFLOAD_STATIC_LIB: clang-offload-bundler{{(.exe)?}}{{.+}} "-type=o" "-targets=host-x86_64-pc-windows-msvc{{[^,]*}},sycl-spir64-unknown-unknown" "-input={{.*}}-orig.obj" "-output={{.+}}.{{(o|obj)}}" "-output={{.+}}.{{(o|obj)}}" "-unbundle" // FOFFLOAD_STATIC_LIB: clang-offload-bundler{{(.exe)?}}{{.+}} "-type=aoo" "-targets=sycl-spir64-{{.+}}" "-input={{.*}}-orig.lib" "-output=[[OUTLIB:.+\.txt]]" "-unbundle" // FOFFLOAD_STATIC_LIB: llvm-foreach{{.*}} "--out-ext=txt" "--in-file-list=[[OUTLIB]]" "--in-replace=[[OUTLIB]]" "--out-file-list=[[OUTLIST:.+\.txt]]" "--out-replace=[[OUTLIST]]" "--" {{.*}}spirv-to-ir-wrapper{{.*}} "[[OUTLIB]]" "-o" "[[OUTLIST]]" // FOFFLOAD_STATIC_LIB: llvm-link{{(.exe)?}}{{.*}} "@[[OUTLIST]]" @@ -33,7 +33,7 @@ // RUN: | FileCheck %s -check-prefix=FOFFLOAD_STATIC_LIB2 // RUN: env LIB=%t_dir %clang_cl --target=x86_64-pc-windows-msvc -fsycl --no-offload-new-driver --no-offloadlib %t-orig.obj -### /link %basename_t-orig2.lib 2>&1 \ // RUN: | FileCheck %s -check-prefix=FOFFLOAD_STATIC_LIB2 -// FOFFLOAD_STATIC_LIB2: clang-offload-bundler{{(.exe)?}}{{.+}} "-type=o" "-targets=host-x86_64-pc-windows-msvc,sycl-spir64-unknown-unknown" "-input={{.*}}-orig.obj" "-output={{.+}}.{{(o|obj)}}" "-output={{.+}}.{{(o|obj)}}" "-unbundle" +// FOFFLOAD_STATIC_LIB2: clang-offload-bundler{{(.exe)?}}{{.+}} "-type=o" "-targets=host-x86_64-pc-windows-msvc{{[^,]*}},sycl-spir64-unknown-unknown" "-input={{.*}}-orig.obj" "-output={{.+}}.{{(o|obj)}}" "-output={{.+}}.{{(o|obj)}}" "-unbundle" // FOFFLOAD_STATIC_LIB2: clang-offload-bundler{{(.exe)?}}{{.+}} "-type=aoo" "-targets=sycl-spir64-{{.+}}" "-input={{.*}}-orig2.lib" "-output=[[OUTLIB:.+\.txt]]" "-unbundle" // FOFFLOAD_STATIC_LIB2: llvm-foreach{{.*}} "--out-ext=txt" "--in-file-list=[[OUTLIB]]" "--in-replace=[[OUTLIB]]" "--out-file-list=[[OUTLIST:.+\.txt]]" "--out-replace=[[OUTLIST]]" "--" {{.*}}spirv-to-ir-wrapper{{.*}} "[[OUTLIB]]" "-o" "[[OUTLIST]]" // FOFFLOAD_STATIC_LIB2: llvm-link{{(.exe)?}}{{.*}} "@[[OUTLIST]]" @@ -122,7 +122,7 @@ // RUN: %clang_cl --target=x86_64-pc-windows-msvc -fsycl --no-offload-new-driver -P %s -### 2>&1 | FileCheck -check-prefix=FSYCL_P %s // FSYCL_P: clang{{.*}} "-cc1" "-triple" "spir64-unknown-unknown" {{.*}} "-E" {{.*}} "-o" "[[DEVICEPP:.+\.ii]]" // FSYCL_P: clang{{.*}} "-cc1" "-triple" "x86_64-pc-windows-msvc{{.*}}" {{.*}} "-E" {{.*}} "-o" "[[HOSTPP:.+\.ii]]"{{.*}} -// FSYCL_P: clang-offload-bundler{{.*}} "-type=ii" "-targets=sycl-spir64-unknown-unknown,host-x86_64-pc-windows-msvc" {{.*}} "-input=[[DEVICEPP]]" "-input=[[HOSTPP]]" +// FSYCL_P: clang-offload-bundler{{.*}} "-type=ii" "-targets=sycl-spir64-unknown-unknown,host-x86_64-pc-windows-msvc{{[^"]*}}" {{.*}} "-input=[[DEVICEPP]]" "-input=[[HOSTPP]]" // RUN: touch %t-orig.lib // RUN: %clang_cl --target=x86_64-pc-windows-msvc -fsycl --no-offload-new-driver %t-orig.lib %s -### /link -out:force_out_file 2>&1 \