Skip to content

Commit 315a535

Browse files
committed
[Driver][SYCL] Improve integration header usage when performing offload
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 0a990f8 commit 315a535

13 files changed

+294
-306
lines changed

clang/include/clang/Driver/Driver.h

Lines changed: 16 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<const char *> 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,17 @@ 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(const char *IntHeaderName,
696+
const std::string &FileName) const {
697+
IntegrationFileList.insert({FileName, IntHeaderName});
698+
}
699+
/// getIntegrationHeader - Get the integration header file
700+
const char *getIntegrationHeader(const std::string &FileName) const {
701+
return IntegrationFileList[FileName];
702+
}
687703
};
688704

689705
/// \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
@@ -3854,17 +3854,10 @@ class OffloadingActionBuilder final {
38543854
}
38553855
}
38563856

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

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

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

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4517,8 +4517,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
45174517
} else {
45184518
assert((isa<CompileJobAction>(JA) || isa<BackendJobAction>(JA)) &&
45194519
"Invalid action for clang tool.");
4520-
if (JA.getType() == types::TY_Nothing ||
4521-
JA.getType() == types::TY_SYCL_Header) {
4520+
if (JA.getType() == types::TY_Nothing) {
45224521
CmdArgs.push_back("-fsyntax-only");
45234522
} else if (JA.getType() == types::TY_LLVM_IR ||
45244523
JA.getType() == types::TY_LTO_IR) {
@@ -6622,17 +6621,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
66226621
// Add any options that are needed specific to SYCL offload while
66236622
// performing the host side compilation.
66246623
if (!IsSYCLOffloadDevice) {
6625-
// Host-side SYCL compilation receives the integration header file as
6626-
// Inputs[1]. Include the header with -include
6627-
if (SYCLDeviceInput) {
6628-
const char *IntHeaderPath =
6629-
Args.MakeArgString(SYCLDeviceInput->getFilename());
6624+
// Add the integration header option to generate the header.
6625+
const char *Header = D.getIntegrationHeader(Input.getBaseInput());
6626+
if (types::getPreprocessedType(InputType) != types::TY_INVALID &&
6627+
Header) {
66306628
CmdArgs.push_back("-include");
6631-
CmdArgs.push_back(IntHeaderPath);
6629+
CmdArgs.push_back(Header);
66326630
// When creating dependency information, filter out the generated
66336631
// header file.
66346632
CmdArgs.push_back("-dependency-filter");
6635-
CmdArgs.push_back(IntHeaderPath);
6633+
CmdArgs.push_back(Header);
66366634
}
66376635
// Let the FE know we are doing a SYCL offload compilation, but we are
66386636
// doing the host pass.
@@ -6653,12 +6651,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
66536651
}
66546652
}
66556653
}
6656-
if (IsSYCLOffloadDevice && JA.getType() == types::TY_SYCL_Header) {
6657-
// Generating a SYCL Header
6658-
SmallString<128> HeaderOpt("-fsycl-int-header=");
6659-
HeaderOpt += Output.getFilename();
6660-
CmdArgs.push_back(Args.MakeArgString(HeaderOpt));
6654+
if (IsSYCLOffloadDevice) {
6655+
// Add the integration header option to generate the header.
6656+
if (const char *Header = D.getIntegrationHeader(Input.getBaseInput())) {
6657+
SmallString<128> HeaderOpt("-fsycl-int-header=");
6658+
HeaderOpt.append(Header);
6659+
CmdArgs.push_back(Args.MakeArgString(HeaderOpt));
6660+
}
66616661
}
6662+
66626663
if (Args.hasArg(options::OPT_fsycl_unnamed_lambda))
66636664
CmdArgs.push_back("-fsycl-unnamed-lambda");
66646665

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)