Skip to content

Commit b5fe206

Browse files
authored
[Driver][SYCL][FPGA] Do not unbundle aoco as an archive for hardware (#4477)
The AOCO archives should be considered only for the aoco bits that are within those archives when building for FPGA hardware. Do not perform a normal device extraction for the aoco archive unless we are performing emulation compilation.
1 parent 665a0a2 commit b5fe206

File tree

3 files changed

+34
-35
lines changed

3 files changed

+34
-35
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5649,13 +5649,18 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
56495649
// ignored since we are adding offload-static-libs as normal libraries to
56505650
// the host link command.
56515651
if (hasOffloadSections(C, LA, Args)) {
5652-
unbundleStaticLib(types::TY_Archive, LA);
56535652
// Pass along the static libraries to check if we need to add them for
56545653
// unbundling for FPGA AOT static lib usage. Uses FPGA aoco type to
56555654
// differentiate if aoco unbundling is needed. Unbundling of aoco is not
56565655
// needed for emulation, as these are treated as regular archives.
56575656
if (!C.getDriver().isFPGAEmulationMode())
56585657
unbundleStaticLib(types::TY_FPGA_AOCO, LA);
5658+
// Do not unbundle any AOCO archive as a regular archive when we are
5659+
// in FPGA Hardware/Simulation mode.
5660+
if (!C.getDriver().isFPGAEmulationMode() &&
5661+
hasFPGABinary(C, LA.str(), types::TY_FPGA_AOCO))
5662+
continue;
5663+
unbundleStaticLib(types::TY_Archive, LA);
56595664
}
56605665
}
56615666

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

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,29 @@
2525
// CHK-FPGA-AOCO-PHASES-WIN: 11: linker, {0, 10}, image, (host-sycl)
2626
// CHK-FPGA-AOCO-PHASES-WIN: 12: linker, {0, 10}, host_dep_image, (host-sycl)
2727
// 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, {6, 13, 15}, ir, (device-sycl)
31-
// CHK-FPGA-AOCO-PHASES-WIN: 17: sycl-post-link, {16}, tempfiletable, (device-sycl)
32-
// CHK-FPGA-AOCO-PHASES-WIN: 18: file-table-tform, {17}, tempfilelist, (device-sycl)
33-
// CHK-FPGA-AOCO-PHASES-WIN: 19: llvm-spirv, {18}, tempfilelist, (device-sycl)
34-
// CHK-FPGA-AOCO-PHASES-WIN: 20: input, "[[INPUTA]]", archive
35-
// CHK-FPGA-AOCO-PHASES-WIN: 21: clang-offload-unbundler, {20}, fpga_dep_list
36-
// CHK-FPGA-AOCO-PHASES-WIN: 22: input, "[[INPUTA]]", fpga_aoco
37-
// CHK-FPGA-AOCO-PHASES-WIN: 23: clang-offload-unbundler, {22}, fpga_aoco
38-
// CHK-FPGA-AOCO-PHASES-WIN: 24: backend-compiler, {19, 21, 23}, fpga_aocx, (device-sycl)
39-
// CHK-FPGA-AOCO-PHASES-WIN: 25: file-table-tform, {17, 24}, tempfiletable, (device-sycl)
40-
// CHK-FPGA-AOCO-PHASES-WIN: 26: clang-offload-wrapper, {25}, object, (device-sycl)
41-
// CHK-FPGA-AOCO-PHASES-WIN: 27: offload, "host-sycl (x86_64-pc-windows-msvc)" {11}, "device-sycl (spir64_fpga-unknown-unknown)" {26}, image
28+
// CHK-FPGA-AOCO-PHASES-WIN: 14: linker, {6, 13}, ir, (device-sycl)
29+
// CHK-FPGA-AOCO-PHASES-WIN: 15: sycl-post-link, {14}, tempfiletable, (device-sycl)
30+
// CHK-FPGA-AOCO-PHASES-WIN: 16: file-table-tform, {15}, tempfilelist, (device-sycl)
31+
// CHK-FPGA-AOCO-PHASES-WIN: 17: llvm-spirv, {16}, tempfilelist, (device-sycl)
32+
// CHK-FPGA-AOCO-PHASES-WIN: 18: input, "[[INPUTA]]", archive
33+
// CHK-FPGA-AOCO-PHASES-WIN: 19: clang-offload-unbundler, {18}, fpga_dep_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: file-table-tform, {15, 22}, tempfiletable, (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)" {11}, "device-sycl (spir64_fpga-unknown-unknown)" {24}, image
4240

4341
/// aoco test, checking tools
4442
// RUN: %clang_cl --target=x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga %t_aoco.a -Xshardware -### %s 2>&1 \
4543
// RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO %s
4644
// RUN: %clang_cl --target=x86_64-pc-windows-msvc -fsycl -fno-sycl-device-lib=all -fintelfpga %t_aoco.a -Xshardware -### %s 2>&1 \
4745
// RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO %s
48-
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=a" "-targets=sycl-spir64_fpga-unknown-unknown" "-inputs=[[INPUTLIB:.+\.a]]" "-outputs=[[OUTLIB:.+\.a]]" "-unbundle"
49-
// CHK-FPGA-AOCO: llvm-link{{.*}} "[[OUTLIB]]" "-o" "[[LINKEDBC:.+\.bc]]"
46+
// CHK-FPGA-AOCO: llvm-link{{.*}} "-o" "[[LINKEDBC:.+\.bc]]"
5047
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-split-esimd"{{.*}} "-O2" "-spec-const=default" "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC]]"
5148
// CHK-FPGA-AOCO: file-table-tform{{.*}} "-o" "[[TABLEOUT:.+\.txt]]" "[[SPLTABLE]]"
5249
// CHK-FPGA-AOCO: llvm-spirv{{.*}} "-o" "[[TARGSPV:.+\.txt]]" {{.*}} "[[TABLEOUT]]"
53-
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown" "-inputs=[[INPUTLIB]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
50+
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown" "-inputs=[[INPUTLIB:.+\.a]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
5451
// CHK-FPGA-AOCO: aoc{{.*}} "-o" "[[AOCXOUT:.+\.aocx]]" "[[TARGSPV]]" "-library-list=[[AOCOLIST]]" "-sycl"
5552
// CHK-FPGA-AOCO: file-table-tform{{.*}} "-o" "[[TABLEOUT2:.+\.table]]" "[[SPLTABLE]]" "[[AOCXOUT]]"
5653
// CHK-FPGA-AOCO: clang-offload-wrapper{{.*}} "-o=[[FINALBC:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT2]]"

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

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,18 @@
2929
// CHK-FPGA-AOCO-PHASES: 11: linker, {0, 10}, image, (host-sycl)
3030
// CHK-FPGA-AOCO-PHASES: 12: linker, {0, 10}, host_dep_image, (host-sycl)
3131
// 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, {6, 13, 15}, ir, (device-sycl)
35-
// CHK-FPGA-AOCO-PHASES: 17: sycl-post-link, {16}, tempfiletable, (device-sycl)
36-
// CHK-FPGA-AOCO-PHASES: 18: file-table-tform, {17}, tempfilelist, (device-sycl)
37-
// CHK-FPGA-AOCO-PHASES: 19: llvm-spirv, {18}, tempfilelist, (device-sycl)
38-
// CHK-FPGA-AOCO-PHASES: 20: input, "[[INPUTA]]", archive
39-
// CHK-FPGA-AOCO-PHASES: 21: clang-offload-unbundler, {20}, fpga_dep_list
40-
// CHK-FPGA-AOCO-PHASES: 22: input, "[[INPUTA]]", fpga_aoco
41-
// CHK-FPGA-AOCO-PHASES: 23: clang-offload-unbundler, {22}, fpga_aoco
42-
// CHK-FPGA-AOCO-PHASES: 24: backend-compiler, {19, 21, 23}, fpga_aocx, (device-sycl)
43-
// CHK-FPGA-AOCO-PHASES: 25: file-table-tform, {17, 24}, tempfiletable, (device-sycl)
44-
// CHK-FPGA-AOCO-PHASES: 26: clang-offload-wrapper, {25}, object, (device-sycl)
45-
// CHK-FPGA-AOCO-PHASES: 27: offload, "host-sycl (x86_64-unknown-linux-gnu)" {11}, "device-sycl (spir64_fpga-unknown-unknown)" {26}, image
32+
// CHK-FPGA-AOCO-PHASES: 14: linker, {6, 13}, ir, (device-sycl)
33+
// CHK-FPGA-AOCO-PHASES: 15: sycl-post-link, {14}, tempfiletable, (device-sycl)
34+
// CHK-FPGA-AOCO-PHASES: 16: file-table-tform, {15}, tempfilelist, (device-sycl)
35+
// CHK-FPGA-AOCO-PHASES: 17: llvm-spirv, {16}, tempfilelist, (device-sycl)
36+
// CHK-FPGA-AOCO-PHASES: 18: input, "[[INPUTA]]", archive
37+
// CHK-FPGA-AOCO-PHASES: 19: clang-offload-unbundler, {18}, fpga_dep_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: file-table-tform, {15, 22}, tempfiletable, (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)" {11}, "device-sycl (spir64_fpga-unknown-unknown)" {24}, image
4644

4745
/// aoco test, checking tools
4846
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-device-lib=all -fintelfpga -Xshardware -foffload-static-lib=%t_aoco.a -### %s 2>&1 \
@@ -53,12 +51,11 @@
5351
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-WIN %s
5452
// RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga -Xshardware %t_aoco_cl.a -### %s 2>&1 \
5553
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-WIN %s
56-
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=a" "-targets=sycl-spir64_fpga-unknown-unknown" "-inputs=[[INPUTLIB:.+\.a]]" "-outputs=[[OUTLIB:.+\.a]]" "-unbundle"
57-
// CHK-FPGA-AOCO: llvm-link{{.*}} "[[OUTLIB]]" "-o" "[[LINKEDBC:.+\.bc]]"
54+
// CHK-FPGA-AOCO: llvm-link{{.*}} "-o" "[[LINKEDBC:.+\.bc]]"
5855
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-split-esimd"{{.*}} "-O2" "-spec-const=default" "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC]]"
5956
// CHK-FPGA-AOCO: file-table-tform{{.*}} "-o" "[[TABLEOUT:.+\.txt]]" "[[SPLTABLE]]"
6057
// CHK-FPGA-AOCO: llvm-spirv{{.*}} "-o" "[[TARGSPV:.+\.txt]]" {{.*}} "[[TABLEOUT]]"
61-
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown" "-inputs=[[INPUTLIB]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
58+
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown" "-inputs=[[INPUTLIB:.+\.a]]" "-outputs=[[AOCOLIST:.+\.txt]]" "-unbundle"
6259
// CHK-FPGA-AOCO: aoc{{.*}} "-o" "[[AOCXOUT:.+\.aocx]]" "[[TARGSPV]]" "-library-list=[[AOCOLIST]]" "-sycl"
6360
// CHK-FPGA-AOCO: file-table-tform{{.*}} "-o" "[[TABLEOUT2:.+\.table]]" "[[SPLTABLE]]" "[[AOCXOUT]]"
6461
// CHK-FPGA-AOCO: clang-offload-wrapper{{.*}} "-o=[[FINALBC:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT2]]"

0 commit comments

Comments
 (0)