Skip to content

Commit d7e2201

Browse files
mdtoguchiPavel Chupin
authored andcommitted
Update clang-offload-bundler behaviors and usage
1 parent 769caf3 commit d7e2201

File tree

8 files changed

+30
-30
lines changed

8 files changed

+30
-30
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2935,7 +2935,7 @@ static bool hasFPGABinary(Compilation &C, std::string Object, types::ID Type) {
29352935
// file and the target triple being looked for.
29362936
const char *Targets =
29372937
C.getArgs().MakeArgString(Twine("-targets=sycl-") + TT.str());
2938-
const char *Inputs = C.getArgs().MakeArgString(Twine("-inputs=") + Object);
2938+
const char *Inputs = C.getArgs().MakeArgString(Twine("-input=") + Object);
29392939
// Always use -type=ao for aocx/aocr bundle checking. The 'bundles' are
29402940
// actually archives.
29412941
SmallVector<StringRef, 6> BundlerArgs = {"clang-offload-bundler", "-type=ao",
@@ -2958,7 +2958,7 @@ static bool hasSYCLDefaultSection(Compilation &C, const StringRef &File) {
29582958
const char *Targets =
29592959
C.getArgs().MakeArgString(Twine("-targets=sycl-") + TT.str());
29602960
const char *Inputs =
2961-
C.getArgs().MakeArgString(Twine("-inputs=") + File.str());
2961+
C.getArgs().MakeArgString(Twine("-input=") + File.str());
29622962
// Always use -type=ao for bundle checking. The 'bundles' are
29632963
// actually archives.
29642964
SmallVector<StringRef, 6> BundlerArgs = {"clang-offload-bundler",
@@ -2979,7 +2979,7 @@ static bool hasOffloadSections(Compilation &C, const StringRef &Archive,
29792979
// TODO - Improve checking to check for explicit offload target instead
29802980
// of the generic host availability.
29812981
const char *Targets = Args.MakeArgString(Twine("-targets=host-") + TT.str());
2982-
const char *Inputs = Args.MakeArgString(Twine("-inputs=") + Archive.str());
2982+
const char *Inputs = Args.MakeArgString(Twine("-input=") + Archive.str());
29832983
// Always use -type=ao for bundle checking. The 'bundles' are
29842984
// actually archives.
29852985
SmallVector<StringRef, 6> BundlerArgs = {"clang-offload-bundler", "-type=ao",

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8682,18 +8682,16 @@ void OffloadBundler::ConstructJob(Compilation &C, const JobAction &JA,
86828682
} else {
86838683
UB += CurTC->getInputFilename(Inputs[I]);
86848684
}
8685-
// For -fintelfpga, when bundling objects we also want to bundle up the
8686-
// named dependency file.
8687-
if (IsFPGADepBundle) {
8688-
const char *BaseName = Clang::getBaseInputName(TCArgs, Inputs[0]);
8689-
SmallString<128> DepFile(C.getDriver().getFPGATempDepFile(BaseName));
8690-
if (!DepFile.empty()) {
8691-
UB += ',';
8692-
UB += DepFile;
8693-
}
8694-
}
86958685
CmdArgs.push_back(TCArgs.MakeArgString(UB));
86968686
}
8687+
// For -fintelfpga, when bundling objects we also want to bundle up the
8688+
// named dependency file.
8689+
if (IsFPGADepBundle) {
8690+
const char *BaseName = Clang::getBaseInputName(TCArgs, Inputs[0]);
8691+
SmallString<128> DepFile(C.getDriver().getFPGATempDepFile(BaseName));
8692+
if (!DepFile.empty())
8693+
CmdArgs.push_back(TCArgs.MakeArgString("-input=" + DepFile));
8694+
}
86978695
// All the inputs are encoded as commands.
86988696
C.addCommand(std::make_unique<Command>(
86998697
JA, *this, ResponseFileSupport::None(),
@@ -8838,18 +8836,20 @@ void OffloadBundler::ConstructJobMultipleOutputs(
88388836
TCArgs.MakeArgString(Twine("-input=") + InputFileName));
88398837

88408838
// Get unbundled files command.
8841-
SmallString<128> UB;
8842-
UB += "-outputs=";
88438839
// When dealing with -fintelfpga, there is an additional unbundle step
88448840
// that occurs for the dependency file. In that case, do not use the
88458841
// dependent information, but just the output file.
8846-
if (IsFPGADepUnbundle || IsFPGADepLibUnbundle)
8842+
if (IsFPGADepUnbundle || IsFPGADepLibUnbundle) {
8843+
SmallString<128> UB;
8844+
UB += "-output=";
88478845
UB += Outputs[0].getFilename();
8848-
else {
8846+
CmdArgs.push_back(TCArgs.MakeArgString(UB));
8847+
} else {
88498848
for (unsigned I = 0; I < Outputs.size(); ++I) {
8850-
if (I)
8851-
UB += ',';
8849+
SmallString<128> UB;
8850+
UB += "-output=";
88528851
UB += DepInfo[I].DependentToolChain->getInputFilename(Outputs[I]);
8852+
CmdArgs.push_back(TCArgs.MakeArgString(UB));
88538853
}
88548854
}
88558855
CmdArgs.push_back("-unbundle");

clang/test/Driver/sycl-offload-intelfpga-emu.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
// CHK-FPGA: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[OUTPUT4:.+\.txt]]" "[[OUTPUT3]]"
9292
// CHK-FPGA: clang-offload-wrapper{{.*}} "-o=[[OUTPUT_AOCX_BC:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_fpga" "-kind=sycl" "-batch" "[[OUTPUT4]]"
9393
// CHK-FPGA: llc{{.*}} "-filetype=obj" "-o" "[[FINALLINK:.+\.o]]" "[[OUTPUT_AOCX_BC]]"
94-
// CHK-FPGA: clang-offload-bundler{{.*}} "-type=o" "-targets=host-x86_64-unknown-linux-gnu,sycl-spir64_fpga-unknown-unknown" {{.*}} "-output=[[FINALLINK2:.+\.o]],[[OUTPUT1:.+\.o]]" "-unbundle"
94+
// CHK-FPGA: clang-offload-bundler{{.*}} "-type=o" "-targets=host-x86_64-unknown-linux-gnu,sycl-spir64_fpga-unknown-unknown" {{.*}} "-output=[[FINALLINK2:.+\.o]]" "-output=[[OUTPUT1:.+\.o]]" "-unbundle"
9595
// CHK-FPGA: spirv-to-ir-wrapper{{.*}} "[[OUTPUT1]]" "-o" "[[IROUTPUT1:.+\.bc]]"
9696
// CHK-FPGA: llvm-link{{.*}} "[[IROUTPUT1]]" "-o" "[[OUTPUT2_BC:.+\.bc]]"
9797
// CHK-FPGA: sycl-post-link{{.*}} "-O2" "-spec-const=default" "-o" "[[OUTPUT2:.+\.table]]" "[[OUTPUT2_BC]]"
@@ -169,7 +169,7 @@
169169
// CHK-FPGA-AOCX-OBJ: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]"
170170
// CHK-FPGA-AOCX-OBJ: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT]]"
171171
// CHK-FPGA-AOCX-OBJ: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.(o|obj)]]" "[[WRAPOUT]]"
172-
// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-output=[[HOSTOBJ:.+\.(o|obj)]],[[DEVICEOBJ:.+\.(o|obj)]]" "-unbundle"
172+
// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-output=[[HOSTOBJ:.+\.(o|obj)]]" "-output=[[DEVICEOBJ:.+\.(o|obj)]]" "-unbundle"
173173
// CHK-FPGA-AOCX-OBJ: spirv-to-ir-wrapper{{.*}} "[[DEVICEOBJ]]" "-o" "[[IROUTPUT:.+\.bc]]"
174174
// CHK-FPGA-AOCX-OBJ: llvm-link{{.*}} "[[IROUTPUT]]" "-o" "[[LLVMLINKOUT:.+\.bc]]" "--suppress-warnings"
175175
// CHK-FPGA-AOCX-OBJ: sycl-post-link{{.*}} "-O2" "-spec-const=default" "-o" "[[OUTPUT2:.+\.table]]" "[[LLVMLINKOUT]]"

clang/test/Driver/sycl-offload-intelfpga.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@
248248
// CHK-FPGA-AOCX-OBJ: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]"
249249
// CHK-FPGA-AOCX-OBJ: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT]]"
250250
// CHK-FPGA-AOCX-OBJ: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.(o|obj)]]" "[[WRAPOUT]]"
251-
// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-output=[[HOSTOBJ:.+\.(o|obj)]],[[DEVICEOBJ:.+\.(o|obj)]]" "-unbundle"
251+
// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-output=[[HOSTOBJ:.+\.(o|obj)]]" "-output=[[DEVICEOBJ:.+\.(o|obj)]]" "-unbundle"
252252
// CHK-FPGA-AOCX-OBJ: spirv-to-ir-wrapper{{.*}} "[[DEVICEOBJ]]" "-o" "[[IROUTPUT:.+\.bc]]"
253253
// CHK-FPGA-AOCX-OBJ: llvm-link{{.*}} "[[IROUTPUT]]" "-o" "[[LLVMLINKOUT:.+\.bc]]" "--suppress-warnings"
254254
// CHK-FPGA-AOCX-OBJ: sycl-post-link{{.*}} "-O2" "-spec-const=default" "-o" "[[POSTLINKOUT:.+\.table]]" "[[LLVMLINKOUT]]
@@ -267,7 +267,7 @@
267267
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ2 %s
268268
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fsycl-targets=spir64,spir64_fpga -Xshardware %t.o %t_aocx.a -### 2>&1 \
269269
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ2 %s
270-
// CHK-FPGA-AOCX-OBJ2: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-output=[[HOSTOBJ:.+\.(o|obj)]],[[DEVICEOBJ:.+\.(o|obj)]],[[DEVICEOBJ2:.+\.(o|obj)]]" "-unbundle"
270+
// CHK-FPGA-AOCX-OBJ2: clang-offload-bundler{{.*}} "-type=o" {{.*}} "-output=[[HOSTOBJ:.+\.(o|obj)]]" "-output=[[DEVICEOBJ:.+\.(o|obj)]]" "-output=[[DEVICEOBJ2:.+\.(o|obj)]]" "-unbundle"
271271
// CHK-FPGA-AOCX-OBJ2: spirv-to-ir-wrapper{{.*}} "[[DEVICEOBJ]]" "-o" "[[IROUTPUT:.+\.bc]]"
272272
// CHK-FPGA-AOCX-OBJ2: llvm-link{{.*}} "[[IROUTPUT]]" "-o" "[[LLVMLINKOUT:.+\.bc]]" "--suppress-warnings"
273273
// CHK-FPGA-AOCX-OBJ2: sycl-post-link{{.*}} "-O2" "-spec-const=rt" "-o" "[[POSTLINKOUT:.+\.table]]" "[[LLVMLINKOUT]]"
@@ -361,7 +361,7 @@
361361
// CHK-FPGA-DEP-FILES2-LIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown,host-x86_64-unknown-linux-gnu,sycl-fpga_dep" {{.*}} "-input={{.*}}.bc" "-input={{.*}}.o" "-input=[[INPUT1]]"
362362
// CHK-FPGA-DEP-FILES2-WIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown,host-x86_64-pc-windows-msvc,sycl-fpga_dep" {{.*}} "-input={{.*}}.bc" "-input={{.*}}.obj" "-input=[[INPUT1]]"
363363
// CHK-FPGA-DEP-FILES2: clang{{.*}} "-dependency-file" "[[INPUT2:.+\.d]]"
364-
// CHK-FPGA-DEP-FILES2-LIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown,host-x86_64-unknown-linux-gnu,sycl-fpga_dep" {{.*}} "-input={{.*}}.bc" "-input={{.*}}.o "-input=[[INPUT2]]"
364+
// CHK-FPGA-DEP-FILES2-LIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown,host-x86_64-unknown-linux-gnu,sycl-fpga_dep" {{.*}} "-input={{.*}}.bc" "-input={{.*}}.o" "-input=[[INPUT2]]"
365365
// CHK-FPGA-DEP-FILES2-WIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown,host-x86_64-pc-windows-msvc,sycl-fpga_dep" {{.*}} "-input={{.*}}.bc" "-input={{.*}}.obj" "-input=[[INPUT2]]"
366366

367367
/// -fintelfpga dependency file test to object with output designator

clang/test/Driver/sycl-offload-static-lib-2.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
// RUN: | FileCheck %s -check-prefixes=STATIC_LIB,STATIC_LIB_NVPTX -DBUNDLE_TRIPLE=sycl-nvptx64-nvidia-cuda-sm_50
2626
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=nvptx64-nvidia-cuda -L/dummy/dir %t_lib.lo -### %t_obj.o 2>&1 \
2727
// RUN: | FileCheck %s -check-prefixes=STATIC_LIB,STATIC_LIB_NVPTX -DBUNDLE_TRIPLE=sycl-nvptx64-nvidia-cuda-sm_50
28-
// STATIC_LIB: clang-offload-bundler{{.*}} "-type=o" "-targets={{.*}},[[BUNDLE_TRIPLE]]" "-input=[[INPUTO:.+\.o]]" "-output=[[HOSTOBJ:.+\.o]] -output={{.+\.o}}"
28+
// STATIC_LIB: clang-offload-bundler{{.*}} "-type=o" "-targets={{.*}},[[BUNDLE_TRIPLE]]" "-input=[[INPUTO:.+\.o]]" "-output=[[HOSTOBJ:.+\.o]]" "-output={{.+\.o}}"
2929
// STATIC_LIB: clang-offload-deps{{.*}} "-targets=[[BUNDLE_TRIPLE]]"
3030
// STATIC_LIB_DEF: clang-offload-bundler{{.*}} "-type=aoo" "-targets=[[BUNDLE_TRIPLE]]" "-input={{.*}}" "-output=[[OUTFILE:.+\.txt]]"
3131
// STATIC_LIB_NVPTX: clang-offload-bundler{{.*}} "-type=a" "-targets=[[BUNDLE_TRIPLE]]" "-input={{.*}}" "-output=[[OUTFILE:.+\.a]]"
@@ -45,7 +45,7 @@
4545
// RUN: | FileCheck %s -check-prefixes=STATIC_L_LIB,STATIC_L_LIB_DEF -DBUNDLE_TRIPLE=sycl-spir64-unknown-unknown
4646
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=nvptx64-nvidia-cuda -L%S/Inputs/SYCL -llin64 -### %t_obj.o 2>&1 \
4747
// RUN: | FileCheck %s -check-prefixes=STATIC_L_LIB,STATIC_L_LIB_NVPTX -DBUNDLE_TRIPLE=sycl-nvptx64-nvidia-cuda-sm_50
48-
// STATIC_L_LIB: clang-offload-bundler{{.*}} "-type=o" "-targets={{.*}},[[BUNDLE_TRIPLE]]" "-input=[[INPUTO:.+\.o]]" "-output=[[HOSTOBJ:.+\.o]] -output={{.+\.o}}"
48+
// STATIC_L_LIB: clang-offload-bundler{{.*}} "-type=o" "-targets={{.*}},[[BUNDLE_TRIPLE]]" "-input=[[INPUTO:.+\.o]]" "-output=[[HOSTOBJ:.+\.o]]" "-output={{.+\.o}}"
4949
// STATIC_L_LIB: clang-offload-deps{{.*}} "-targets=[[BUNDLE_TRIPLE]]"
5050
// STATIC_L_LIB_DEF: clang-offload-bundler{{.*}} "-type=aoo" "-targets=[[BUNDLE_TRIPLE]]" "-input={{.*}}liblin64.a" "-output=[[OUTFILE:.+\.txt]]"
5151
// STATIC_L_LIB_NVPTX: clang-offload-bundler{{.*}} "-type=a" "-targets=[[BUNDLE_TRIPLE]]" "-input={{.*}}liblin64.a" "-output=[[OUTFILE:.+\.a]]"
@@ -152,7 +152,7 @@
152152
// RUN: | FileCheck %s -check-prefix=STATIC_LIB_SRC2 -DBUNDLE_TRIPLE=sycl-nvptx64-nvidia-cuda-sm_50 -DDEPS_TRIPLE=sycl-nvptx64-nvidia-cuda-sm_50
153153
// STATIC_LIB_SRC2: clang{{.*}} "-emit-obj" {{.*}} "-o" "[[HOSTOBJ:.+\.o]]"
154154
// STATIC_LIB_SRC2: ld{{(.exe)?}}" {{.*}} "-o" "[[HOSTEXE:.+\.out]]"
155-
// STATIC_LIB_SRC2: clang-offload-deps{{.*}} "-targets=[[DEPS_TRIPLE]]" "-output=[[OUTDEPS:.+\.bc]]" "[[HOSTEXE]]"
155+
// STATIC_LIB_SRC2: clang-offload-deps{{.*}} "-targets=[[DEPS_TRIPLE]]" "-outputs=[[OUTDEPS:.+\.bc]]" "[[HOSTEXE]]"
156156
// STATIC_LIB_SRC2_DEF: clang-offload-bundler{{.*}} "-type=aoo" "-targets=[[BUNDLE_TRIPLE]]" {{.*}} "-output=[[OUTLIB:.+\.txt]]"
157157
// STATIC_LIB_SRC2_NVPTX: clang-offload-bundler{{.*}} "-type=a" "-targets=[[BUNDLE_TRIPLE]]" {{.*}} "-output=[[OUTLIB:.+\.a]]"
158158
// STATIC_LIB_SRC2_DEF: llvm-foreach{{.*}} "--out-ext=txt" "--in-file-list=[[OUTLIB]]" "--in-replace=[[OUTLIB]]" "--out-file-list=[[OUTLIBLIST:.+\.txt]]" "--out-replace=[[OUTLIBLIST]]" "--" {{.*}}spirv-to-ir-wrapper{{.*}} "[[OUTLIB]]" "-o" [[OUTLIBLIST]]"

clang/test/Driver/sycl-offload-static-lib.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
// RUN: | FileCheck %s -check-prefix=FOFFLOAD_STATIC_LIB_SRC2
8686
// FOFFLOAD_STATIC_LIB_SRC2: clang{{.*}} "-emit-obj" {{.*}} "-o" "[[HOSTOBJ:.+\.o]]"
8787
// FOFFLOAD_STATIC_LIB_SRC2: ld{{(.exe)?}}" {{.*}} "-o" "[[HOSTEXE:.+\.out]]"
88-
// FOFFLOAD_STATIC_LIB_SRC2: clang-offload-deps{{.*}} "-output=[[OUTDEPS:.+\.bc]]" "[[HOSTEXE]]"
88+
// FOFFLOAD_STATIC_LIB_SRC2: clang-offload-deps{{.*}} "-outputs=[[OUTDEPS:.+\.bc]]" "[[HOSTEXE]]"
8989
// FOFFLOAD_STATIC_LIB_SRC2: clang-offload-bundler{{.*}} "-type=aoo" {{.*}} "-output=[[OUTLIB:.+\.txt]]"
9090
// FOFFLOAD_STATIC_LIB_SRC2: 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]]"
9191
// FOFFLOAD_STATIC_LIB_SRC2: llvm-link{{.*}} "[[OUTDEPS]]" "-o" "[[OUTTEMP:.+\.bc]]"

clang/test/Driver/sycl-offload.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
// RUN: | FileCheck -check-prefix=CHECK_S_LLVM %s
6565
// CHECK_S_LLVM: clang{{.*}} "-fsycl-is-device"{{.*}} "-emit-llvm"{{.*}} "-o" "[[DEVICE:.+\.ll]]"
6666
// CHECK_S_LLVM: clang{{.*}} "-fsycl-is-host"{{.*}} "-emit-llvm"{{.*}} "-o" "[[HOST:.+\.ll]]"
67-
// CHECK_S_LLVM: clang-offload-bundler{{.*}} "-type=ll"{{.*}} "-input=[[DEVICE]]" -input="[[HOST]]"
67+
// CHECK_S_LLVM: clang-offload-bundler{{.*}} "-type=ll"{{.*}} "-input=[[DEVICE]]" "-input=[[HOST]]"
6868

6969
/// Check for default device triple compilations based on object, archive or
7070
/// forced from command line.

clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1972,7 +1972,7 @@ int main(int argc, const char **argv) {
19721972
return 0;
19731973
}
19741974

1975-
if (OutputFileNames.getNumOccurrences() == 0) {
1975+
if (OutputFileNames.getNumOccurrences() == 0 && !CheckSection) {
19761976
reportError(
19771977
createStringError(errc::invalid_argument, "no output file specified!"));
19781978
}

0 commit comments

Comments
 (0)