Skip to content

Commit f110dd4

Browse files
authored
[Driver][SYCL] Improve integration header usage when performing offload (#3471)
When generating the integration header, we were performing an additional compilation step which is not needed, as we can create the output file and the integration header at the same time. Improve this behavior by tracking the integration files based on given input files, creating and using the files accordingly when needed during the compilation flow.
1 parent cdbb44b commit f110dd4

15 files changed

+297
-309
lines changed

clang/include/clang/Driver/Driver.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,11 @@ class Driver {
648648
/// Track filename used for the FPGA dependency info.
649649
mutable llvm::StringMap<const std::string> FPGATempDepFiles;
650650

651+
/// A list of inputs and their corresponding integration headers. These
652+
/// files are generated during the device compilation and are consumed
653+
/// by the host compilation.
654+
mutable llvm::StringMap<StringRef> IntegrationFileList;
655+
651656
public:
652657
/// GetReleaseVersion - Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and
653658
/// return the grouped values as integers. Numbers which are not
@@ -684,6 +689,16 @@ class Driver {
684689
const std::string getFPGATempDepFile(const std::string &FileName) const {
685690
return FPGATempDepFiles[FileName];
686691
}
692+
693+
/// addIntegrationFiles - Add the integration files that will be populated
694+
/// by the device compilation and used by the host compile.
695+
void addIntegrationFiles(StringRef IntHeaderName, StringRef FileName) const {
696+
IntegrationFileList.insert({FileName, IntHeaderName});
697+
}
698+
/// getIntegrationHeader - Get the integration header file
699+
StringRef getIntegrationHeader(StringRef FileName) const {
700+
return IntegrationFileList[FileName];
701+
}
687702
};
688703

689704
/// \return True if the last defined optimization level is -Ofast.

clang/include/clang/Driver/Types.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ TYPE("dependencies", Dependencies, INVALID, "d", phases
101101
TYPE("cuda-fatbin", CUDA_FATBIN, INVALID, "fatbin", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
102102
TYPE("hip-fatbin", HIP_FATBIN, INVALID, "hipfb", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
103103
TYPE("spirv", SPIRV, INVALID, "spv", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
104-
TYPE("sycl-header", SYCL_Header, INVALID, "h", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
105104
TYPE("sycl-fatbin", SYCL_FATBIN, INVALID, nullptr, phases::Compile, phases::Backend, phases::Assemble, phases::Link)
106105
TYPE("tempfilelist", Tempfilelist, INVALID, "txt", phases::Compile, phases::Backend, phases::Assemble, phases::Link)
107106
TYPE("tempfiletable", Tempfiletable,INVALID, "table", phases::Compile, phases::Backend, phases::Assemble, phases::Link)

clang/lib/Driver/Driver.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3853,17 +3853,10 @@ class OffloadingActionBuilder final {
38533853
}
38543854
}
38553855

3856-
// FIXME: This adds the integration header generation pass before the
3857-
// Host compilation pass so the Host can use the header generated. This
3858-
// can be improved upon to where the header generation and spv generation
3859-
// is done in the same step. Currently, its not too efficient.
3860-
// The host depends on the generated integrated header from the device
3861-
// compilation.
3856+
// Device compilation generates LLVM BC.
38623857
if (CurPhase == phases::Compile) {
38633858
bool SYCLDeviceOnly = Args.hasArg(options::OPT_fsycl_device_only);
38643859
for (Action *&A : SYCLDeviceActions) {
3865-
DeviceCompilerInput =
3866-
C.MakeAction<CompileJobAction>(A, types::TY_SYCL_Header);
38673860
types::ID OutputType = types::TY_LLVM_BC;
38683861
if (SYCLDeviceOnly) {
38693862
if (Args.hasArg(options::OPT_S))
@@ -3878,6 +3871,7 @@ class OffloadingActionBuilder final {
38783871
}
38793872
}
38803873
A = C.MakeAction<CompileJobAction>(A, OutputType);
3874+
DeviceCompilerInput = A;
38813875
}
38823876
const auto *TC = ToolChains.front();
38833877
const char *BoundArch = nullptr;
@@ -5112,6 +5106,21 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
51125106

51135107
handleArguments(C, Args, Inputs, Actions);
51145108

5109+
// When compiling for -fsycl, generate the integration header files that
5110+
// will be used during the compilation.
5111+
if (Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false)) {
5112+
for (auto &I : Inputs) {
5113+
if (!types::isSrcFile(I.first))
5114+
continue;
5115+
std::string SrcFileName(I.second->getAsString(Args));
5116+
std::string TmpFileNameHeader = C.getDriver().GetTemporaryPath(
5117+
llvm::sys::path::stem(SrcFileName).str() + "-header", "h");
5118+
StringRef TmpFileHeader =
5119+
C.addTempFile(C.getArgs().MakeArgString(TmpFileNameHeader));
5120+
addIntegrationFiles(TmpFileHeader, SrcFileName);
5121+
}
5122+
}
5123+
51155124
// Builder to be used to build offloading actions.
51165125
OffloadingActionBuilder OffloadBuilder(C, Args, Inputs);
51175126

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4527,8 +4527,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
45274527
} else {
45284528
assert((isa<CompileJobAction>(JA) || isa<BackendJobAction>(JA)) &&
45294529
"Invalid action for clang tool.");
4530-
if (JA.getType() == types::TY_Nothing ||
4531-
JA.getType() == types::TY_SYCL_Header) {
4530+
if (JA.getType() == types::TY_Nothing) {
45324531
CmdArgs.push_back("-fsyntax-only");
45334532
} else if (JA.getType() == types::TY_LLVM_IR ||
45344533
JA.getType() == types::TY_LTO_IR) {
@@ -6649,17 +6648,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
66496648
// Add any options that are needed specific to SYCL offload while
66506649
// performing the host side compilation.
66516650
if (!IsSYCLOffloadDevice) {
6652-
// Host-side SYCL compilation receives the integration header file as
6653-
// Inputs[1]. Include the header with -include
6654-
if (SYCLDeviceInput) {
6655-
const char *IntHeaderPath =
6656-
Args.MakeArgString(SYCLDeviceInput->getFilename());
6651+
// Add the integration header option to generate the header.
6652+
StringRef Header = D.getIntegrationHeader(Input.getBaseInput());
6653+
if (types::getPreprocessedType(InputType) != types::TY_INVALID &&
6654+
!Header.empty()) {
66576655
CmdArgs.push_back("-include");
6658-
CmdArgs.push_back(IntHeaderPath);
6656+
CmdArgs.push_back(Args.MakeArgString(Header));
66596657
// When creating dependency information, filter out the generated
66606658
// header file.
66616659
CmdArgs.push_back("-dependency-filter");
6662-
CmdArgs.push_back(IntHeaderPath);
6660+
CmdArgs.push_back(Args.MakeArgString(Header));
66636661
}
66646662
// Let the FE know we are doing a SYCL offload compilation, but we are
66656663
// doing the host pass.
@@ -6680,12 +6678,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
66806678
}
66816679
}
66826680
}
6683-
if (IsSYCLOffloadDevice && JA.getType() == types::TY_SYCL_Header) {
6684-
// Generating a SYCL Header
6685-
SmallString<128> HeaderOpt("-fsycl-int-header=");
6686-
HeaderOpt += Output.getFilename();
6687-
CmdArgs.push_back(Args.MakeArgString(HeaderOpt));
6681+
if (IsSYCLOffloadDevice) {
6682+
// Add the integration header option to generate the header.
6683+
StringRef Header(D.getIntegrationHeader(Input.getBaseInput()));
6684+
if (!Header.empty()) {
6685+
SmallString<128> HeaderOpt("-fsycl-int-header=");
6686+
HeaderOpt.append(Header);
6687+
CmdArgs.push_back(Args.MakeArgString(HeaderOpt));
6688+
}
66886689
}
6690+
66896691
if (Args.hasArg(options::OPT_fsycl_unnamed_lambda))
66906692
CmdArgs.push_back("-fsycl-unnamed-lambda");
66916693

clang/test/Driver/sycl-intelfpga-aoco-win.cpp

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,35 @@
77
// RUN: clang-offload-wrapper -o %t-aoco.bc -host=x86_64-pc-windows-msvc -kind=sycl -target=fpga_aoco-intel-unknown-sycldevice %t.aoco
88
// RUN: llc -filetype=obj -o %t-aoco.o %t-aoco.bc
99
// RUN: llvm-ar crv %t_aoco.a %t.o %t2.o %t-aoco.o
10-
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \
10+
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -ccc-print-phases 2>&1 \
1111
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s
12-
// RUN: %clangxx -target x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \
12+
// RUN: %clangxx -target x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a %s -ccc-print-phases 2>&1 \
1313
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s
1414
// CHK-FPGA-AOCO-PHASES-WIN: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl)
1515
// CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl)
1616
// CHK-FPGA-AOCO-PHASES-WIN: 2: preprocessor, {1}, c++-cpp-output, (host-sycl)
1717
// CHK-FPGA-AOCO-PHASES-WIN: 3: input, "[[INPUTSRC]]", c++, (device-sycl)
1818
// CHK-FPGA-AOCO-PHASES-WIN: 4: preprocessor, {3}, c++-cpp-output, (device-sycl)
19-
// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, sycl-header, (device-sycl)
19+
// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, ir, (device-sycl)
2020
// CHK-FPGA-AOCO-PHASES-WIN: 6: offload, "host-sycl (x86_64-pc-windows-msvc)" {2}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {5}, c++-cpp-output
2121
// CHK-FPGA-AOCO-PHASES-WIN: 7: compiler, {6}, ir, (host-sycl)
2222
// CHK-FPGA-AOCO-PHASES-WIN: 8: backend, {7}, assembler, (host-sycl)
2323
// CHK-FPGA-AOCO-PHASES-WIN: 9: assembler, {8}, object, (host-sycl)
2424
// CHK-FPGA-AOCO-PHASES-WIN: 10: linker, {0, 9}, image, (host-sycl)
25-
// CHK-FPGA-AOCO-PHASES-WIN: 11: compiler, {4}, ir, (device-sycl)
26-
// CHK-FPGA-AOCO-PHASES-WIN: 12: linker, {0, 9}, image, (host-sycl)
27-
// CHK-FPGA-AOCO-PHASES-WIN: 13: clang-offload-deps, {12}, ir, (host-sycl)
28-
// CHK-FPGA-AOCO-PHASES-WIN: 14: input, "[[INPUTA]]", archive
29-
// CHK-FPGA-AOCO-PHASES-WIN: 15: clang-offload-unbundler, {14}, archive
30-
// CHK-FPGA-AOCO-PHASES-WIN: 16: linker, {11, 13, 15}, ir, (device-sycl)
31-
// CHK-FPGA-AOCO-PHASES-WIN: 17: sycl-post-link, {16}, ir, (device-sycl)
32-
// CHK-FPGA-AOCO-PHASES-WIN: 18: llvm-spirv, {17}, spirv, (device-sycl)
33-
// CHK-FPGA-AOCO-PHASES-WIN: 19: input, "[[INPUTA]]", archive
34-
// CHK-FPGA-AOCO-PHASES-WIN: 20: clang-offload-unbundler, {19}, fpga_dependencies_list
35-
// CHK-FPGA-AOCO-PHASES-WIN: 21: input, "[[INPUTA]]", fpga_aoco
36-
// CHK-FPGA-AOCO-PHASES-WIN: 22: clang-offload-unbundler, {21}, fpga_aoco
37-
// CHK-FPGA-AOCO-PHASES-WIN: 23: backend-compiler, {18, 20, 22}, fpga_aocx, (device-sycl)
38-
// CHK-FPGA-AOCO-PHASES-WIN: 24: clang-offload-wrapper, {23}, object, (device-sycl)
39-
// CHK-FPGA-AOCO-PHASES-WIN: 25: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image
25+
// CHK-FPGA-AOCO-PHASES-WIN: 11: linker, {0, 9}, image, (host-sycl)
26+
// CHK-FPGA-AOCO-PHASES-WIN: 12: clang-offload-deps, {11}, ir, (host-sycl)
27+
// CHK-FPGA-AOCO-PHASES-WIN: 13: input, "[[INPUTA]]", archive
28+
// CHK-FPGA-AOCO-PHASES-WIN: 14: clang-offload-unbundler, {13}, archive
29+
// CHK-FPGA-AOCO-PHASES-WIN: 15: linker, {5, 12, 14}, ir, (device-sycl)
30+
// CHK-FPGA-AOCO-PHASES-WIN: 16: sycl-post-link, {15}, ir, (device-sycl)
31+
// CHK-FPGA-AOCO-PHASES-WIN: 17: llvm-spirv, {16}, spirv, (device-sycl)
32+
// CHK-FPGA-AOCO-PHASES-WIN: 18: input, "[[INPUTA]]", archive
33+
// CHK-FPGA-AOCO-PHASES-WIN: 19: clang-offload-unbundler, {18}, fpga_dependencies_list
34+
// CHK-FPGA-AOCO-PHASES-WIN: 20: input, "[[INPUTA]]", fpga_aoco
35+
// CHK-FPGA-AOCO-PHASES-WIN: 21: clang-offload-unbundler, {20}, fpga_aoco
36+
// CHK-FPGA-AOCO-PHASES-WIN: 22: backend-compiler, {17, 19, 21}, fpga_aocx, (device-sycl)
37+
// CHK-FPGA-AOCO-PHASES-WIN: 23: clang-offload-wrapper, {22}, object, (device-sycl)
38+
// CHK-FPGA-AOCO-PHASES-WIN: 24: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {23}, image
4039

4140
/// aoco test, checking tools
4241
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \

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

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,57 +20,55 @@
2020
// CHK-FPGA-AOCO-PHASES: 2: preprocessor, {1}, c++-cpp-output, (host-sycl)
2121
// CHK-FPGA-AOCO-PHASES: 3: input, "[[INPUTCPP]]", c++, (device-sycl)
2222
// CHK-FPGA-AOCO-PHASES: 4: preprocessor, {3}, c++-cpp-output, (device-sycl)
23-
// CHK-FPGA-AOCO-PHASES: 5: compiler, {4}, sycl-header, (device-sycl)
23+
// CHK-FPGA-AOCO-PHASES: 5: compiler, {4}, ir, (device-sycl)
2424
// CHK-FPGA-AOCO-PHASES: 6: offload, "host-sycl (x86_64-unknown-linux-gnu)" {2}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {5}, c++-cpp-output
2525
// CHK-FPGA-AOCO-PHASES: 7: compiler, {6}, ir, (host-sycl)
2626
// CHK-FPGA-AOCO-PHASES: 8: backend, {7}, assembler, (host-sycl)
2727
// CHK-FPGA-AOCO-PHASES: 9: assembler, {8}, object, (host-sycl)
2828
// CHK-FPGA-AOCO-PHASES: 10: linker, {0, 9}, image, (host-sycl)
29-
// CHK-FPGA-AOCO-PHASES: 11: compiler, {4}, ir, (device-sycl)
30-
// CHK-FPGA-AOCO-PHASES: 12: linker, {0, 9}, image, (host-sycl)
31-
// CHK-FPGA-AOCO-PHASES: 13: clang-offload-deps, {12}, ir, (host-sycl)
32-
// CHK-FPGA-AOCO-PHASES: 14: input, "[[INPUTA]]", archive
33-
// CHK-FPGA-AOCO-PHASES: 15: clang-offload-unbundler, {14}, archive
34-
// CHK-FPGA-AOCO-PHASES: 16: linker, {11, 13, 15}, ir, (device-sycl)
35-
// CHK-FPGA-AOCO-PHASES: 17: sycl-post-link, {16}, ir, (device-sycl)
36-
// CHK-FPGA-AOCO-PHASES: 18: llvm-spirv, {17}, spirv, (device-sycl)
37-
// CHK-FPGA-AOCO-PHASES: 19: input, "[[INPUTA]]", archive
38-
// CHK-FPGA-AOCO-PHASES: 20: clang-offload-unbundler, {19}, fpga_dependencies_list
39-
// CHK-FPGA-AOCO-PHASES: 21: input, "[[INPUTA]]", fpga_aoco
40-
// CHK-FPGA-AOCO-PHASES: 22: clang-offload-unbundler, {21}, fpga_aoco
41-
// CHK-FPGA-AOCO-PHASES: 23: backend-compiler, {18, 20, 22}, fpga_aocx, (device-sycl)
42-
// CHK-FPGA-AOCO-PHASES: 24: clang-offload-wrapper, {23}, object, (device-sycl)
43-
// CHK-FPGA-AOCO-PHASES: 25: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image
29+
// CHK-FPGA-AOCO-PHASES: 11: linker, {0, 9}, image, (host-sycl)
30+
// CHK-FPGA-AOCO-PHASES: 12: clang-offload-deps, {11}, ir, (host-sycl)
31+
// CHK-FPGA-AOCO-PHASES: 13: input, "[[INPUTA]]", archive
32+
// CHK-FPGA-AOCO-PHASES: 14: clang-offload-unbundler, {13}, archive
33+
// CHK-FPGA-AOCO-PHASES: 15: linker, {5, 12, 14}, ir, (device-sycl)
34+
// CHK-FPGA-AOCO-PHASES: 16: sycl-post-link, {15}, ir, (device-sycl)
35+
// CHK-FPGA-AOCO-PHASES: 17: llvm-spirv, {16}, spirv, (device-sycl)
36+
// CHK-FPGA-AOCO-PHASES: 18: input, "[[INPUTA]]", archive
37+
// CHK-FPGA-AOCO-PHASES: 19: clang-offload-unbundler, {18}, fpga_dependencies_list
38+
// CHK-FPGA-AOCO-PHASES: 20: input, "[[INPUTA]]", fpga_aoco
39+
// CHK-FPGA-AOCO-PHASES: 21: clang-offload-unbundler, {20}, fpga_aoco
40+
// CHK-FPGA-AOCO-PHASES: 22: backend-compiler, {17, 19, 21}, fpga_aocx, (device-sycl)
41+
// CHK-FPGA-AOCO-PHASES: 23: clang-offload-wrapper, {22}, object, (device-sycl)
42+
// CHK-FPGA-AOCO-PHASES: 24: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {23}, image
4443

4544
/// FPGA AOCO Windows phases check
46-
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -### -ccc-print-phases 2>&1 \
45+
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -ccc-print-phases 2>&1 \
4746
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s
48-
// CHK-FPGA-AOCO-PHASES-WIN: 0: input, "{{.*}}", object, (host-sycl)
47+
// CHK-FPGA-AOCO-PHASES-WIN: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl)
4948
// CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl)
5049
// CHK-FPGA-AOCO-PHASES-WIN: 2: preprocessor, {1}, c++-cpp-output, (host-sycl)
5150
// CHK-FPGA-AOCO-PHASES-WIN: 3: input, "[[INPUTSRC]]", c++, (device-sycl)
5251
// CHK-FPGA-AOCO-PHASES-WIN: 4: preprocessor, {3}, c++-cpp-output, (device-sycl)
53-
// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, sycl-header, (device-sycl)
52+
// CHK-FPGA-AOCO-PHASES-WIN: 5: compiler, {4}, ir, (device-sycl)
5453
// CHK-FPGA-AOCO-PHASES-WIN: 6: offload, "host-sycl (x86_64-pc-windows-msvc)" {2}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {5}, c++-cpp-output
5554
// CHK-FPGA-AOCO-PHASES-WIN: 7: compiler, {6}, ir, (host-sycl)
5655
// CHK-FPGA-AOCO-PHASES-WIN: 8: backend, {7}, assembler, (host-sycl)
5756
// CHK-FPGA-AOCO-PHASES-WIN: 9: assembler, {8}, object, (host-sycl)
5857
// CHK-FPGA-AOCO-PHASES-WIN: 10: linker, {0, 9}, image, (host-sycl)
59-
// CHK-FPGA-AOCO-PHASES-WIN: 11: compiler, {4}, ir, (device-sycl)
60-
// CHK-FPGA-AOCO-PHASES-WIN: 12: linker, {0, 9}, image, (host-sycl)
61-
// CHK-FPGA-AOCO-PHASES-WIN: 13: clang-offload-deps, {12}, ir, (host-sycl)
62-
// CHK-FPGA-AOCO-PHASES-WIN: 14: input, "[[INPUTA:.+\.a]]", archive
63-
// CHK-FPGA-AOCO-PHASES-WIN: 15: clang-offload-unbundler, {14}, archive
64-
// CHK-FPGA-AOCO-PHASES-WIN: 16: linker, {11, 13, 15}, ir, (device-sycl)
65-
// CHK-FPGA-AOCO-PHASES-WIN: 17: sycl-post-link, {16}, ir, (device-sycl)
66-
// CHK-FPGA-AOCO-PHASES-WIN: 18: llvm-spirv, {17}, spirv, (device-sycl)
67-
// CHK-FPGA-AOCO-PHASES-WIN: 19: input, "[[INPUTA]]", archive
68-
// CHK-FPGA-AOCO-PHASES-WIN: 20: clang-offload-unbundler, {19}, fpga_dependencies_list
69-
// CHK-FPGA-AOCO-PHASES-WIN: 21: input, "[[INPUTA]]", fpga_aoco
70-
// CHK-FPGA-AOCO-PHASES-WIN: 22: clang-offload-unbundler, {21}, fpga_aoco
71-
// CHK-FPGA-AOCO-PHASES-WIN: 23: backend-compiler, {18, 20, 22}, fpga_aocx, (device-sycl)
72-
// CHK-FPGA-AOCO-PHASES-WIN: 24: clang-offload-wrapper, {23}, object, (device-sycl)
73-
// CHK-FPGA-AOCO-PHASES-WIN: 25: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {24}, image
58+
// CHK-FPGA-AOCO-PHASES-WIN: 11: linker, {0, 9}, image, (host-sycl)
59+
// CHK-FPGA-AOCO-PHASES-WIN: 12: clang-offload-deps, {11}, ir, (host-sycl)
60+
// CHK-FPGA-AOCO-PHASES-WIN: 13: input, "[[INPUTA]]", archive
61+
// CHK-FPGA-AOCO-PHASES-WIN: 14: clang-offload-unbundler, {13}, archive
62+
// CHK-FPGA-AOCO-PHASES-WIN: 15: linker, {5, 12, 14}, ir, (device-sycl)
63+
// CHK-FPGA-AOCO-PHASES-WIN: 16: sycl-post-link, {15}, ir, (device-sycl)
64+
// CHK-FPGA-AOCO-PHASES-WIN: 17: llvm-spirv, {16}, spirv, (device-sycl)
65+
// CHK-FPGA-AOCO-PHASES-WIN: 18: input, "[[INPUTA]]", archive
66+
// CHK-FPGA-AOCO-PHASES-WIN: 19: clang-offload-unbundler, {18}, fpga_dependencies_list
67+
// CHK-FPGA-AOCO-PHASES-WIN: 20: input, "[[INPUTA]]", fpga_aoco
68+
// CHK-FPGA-AOCO-PHASES-WIN: 21: clang-offload-unbundler, {20}, fpga_aoco
69+
// CHK-FPGA-AOCO-PHASES-WIN: 22: backend-compiler, {17, 19, 21}, fpga_aocx, (device-sycl)
70+
// CHK-FPGA-AOCO-PHASES-WIN: 23: clang-offload-wrapper, {22}, object, (device-sycl)
71+
// CHK-FPGA-AOCO-PHASES-WIN: 24: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {23}, image
7472

7573
/// aoco test, checking tools
7674
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \

0 commit comments

Comments
 (0)