Skip to content

Commit 3afda66

Browse files
committed
Enable devicelib default link for -fintelfpga
Signed-off-by: gejin <[email protected]>
1 parent 27515b0 commit 3afda66

File tree

3 files changed

+32
-22
lines changed

3 files changed

+32
-22
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2713,6 +2713,15 @@ static SmallVector<const char *, 16> getLinkerArgs(Compilation &C,
27132713
return LibArgs;
27142714
}
27152715

2716+
2717+
static bool IsSYCLDeviceLibObj(std::string ObjFilePath) {
2718+
StringRef ObjFileName = llvm::sys::path::filename(ObjFilePath);
2719+
bool Ret = (ObjFileName.startswith("libsycl-") && ObjFileName.endswith(".o"))
2720+
? true
2721+
: false;
2722+
return Ret;
2723+
}
2724+
27162725
// Goes through all of the arguments, including inputs expected for the
27172726
// linker directly, to determine if we need to perform additional work for
27182727
// static offload libraries.
@@ -3787,7 +3796,10 @@ class OffloadingActionBuilder final {
37873796
if (IA->getType() == types::TY_Object) {
37883797
if (!isObjectFile(FileName))
37893798
return ABRT_Inactive;
3790-
if (Args.hasArg(options::OPT_fintelfpga))
3799+
// For SYCL device libraries, don't need to add them to
3800+
// FPGAObjectInputs as there is no fpga dep files inside.
3801+
if (Args.hasArg(options::OPT_fintelfpga) &&
3802+
!IsSYCLDeviceLibObj(FileName))
37913803
FPGAObjectInputs.push_back(IA);
37923804
}
37933805
// When creating FPGA device fat objects, all host objects are
@@ -3990,8 +4002,7 @@ class OffloadingActionBuilder final {
39904002
}
39914003

39924004
// For SYCL compilation, add SYCL device libraries as default.
3993-
if (!isNVPTX && !Args.hasArg(options::OPT_fintelfpga) &&
3994-
!Args.hasArg(options::OPT_fno_sycl_devicelib)) {
4005+
if (!isNVPTX && !Args.hasArg(options::OPT_fno_sycl_devicelib)) {
39954006
addSYCLDeviceLibs(
39964007
*TC, LinkObjects, isSpirvAOT,
39974008
C.getDefaultToolChain().getTriple().isWindowsMSVCEnvironment());
@@ -4075,8 +4086,7 @@ class OffloadingActionBuilder final {
40754086
: types::TY_Tempfiletable;
40764087
SYCLPostLinkJobAction *PostLinkDCRAction = nullptr;
40774088
SYCLPostLinkJobAction *PostLinkAction = nullptr;
4078-
if (isNVPTX || Args.hasArg(options::OPT_fintelfpga) ||
4079-
Args.hasArg(options::OPT_fno_sycl_devicelib)) {
4089+
if (isNVPTX || Args.hasArg(options::OPT_fno_sycl_devicelib)) {
40804090
PostLinkAction = C.MakeAction<SYCLPostLinkJobAction>(DeviceLinkAction,
40814091
PostLinkOutType);
40824092
} else {

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121

2222
/// -fintelfpga -fsycl-link tests
2323
// RUN: touch %t.o
24-
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-link %t.o -o libfoo.a 2>&1 \
24+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -fsycl-link %t.o -o libfoo.a 2>&1 \
2525
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK,CHK-FPGA-EARLY %s
26-
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-link=early %t.o -o libfoo.a 2>&1 \
26+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -fsycl-link=early %t.o -o libfoo.a 2>&1 \
2727
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK,CHK-FPGA-EARLY %s
28-
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-link=image %t.o -o libfoo.a 2>&1 \
28+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -fsycl-link=image %t.o -o libfoo.a 2>&1 \
2929
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK,CHK-FPGA-IMAGE %s
3030
// CHK-FPGA-LINK-NOT: clang-offload-bundler{{.*}} "-check-section"
3131
// CHK-FPGA-LINK: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown-sycldevice" "-inputs=[[INPUT:.+\.o]]" "-outputs=[[OUTPUT1:.+\.o]]" "-unbundle"
@@ -50,9 +50,9 @@
5050

5151
/// -fintelfpga -fsycl-link clang-cl specific
5252
// RUN: touch %t.obj
53-
// RUN: %clang_cl -### -fsycl -fintelfpga -fsycl-link %t.obj -Folibfoo.lib 2>&1 \
53+
// RUN: %clang_cl -### -fsycl -fintelfpga -fno-sycl-devicelib -fsycl-link %t.obj -Folibfoo.lib 2>&1 \
5454
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-WIN %s
55-
// RUN: %clang_cl -### -fsycl -fintelfpga -fsycl-link %t.obj -o libfoo.lib 2>&1 \
55+
// RUN: %clang_cl -### -fsycl -fintelfpga -fno-sycl-devicelib -fsycl-link %t.obj -o libfoo.lib 2>&1 \
5656
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-WIN %s
5757
// CHK-FPGA-LINK-WIN: clang-offload-bundler{{.*}} "-type=o" "-targets=sycl-spir64_fpga-unknown-unknown-sycldevice{{.*}}" "-inputs=[[INPUT:.+\.obj]]" "-outputs=[[OUTPUT1:.+\.obj]]" "-unbundle"
5858
// CHK-FPGA-LINK-WIN-NOT: clang-offload-bundler{{.*}}
@@ -185,9 +185,9 @@
185185

186186
/// -fintelfpga -fsycl-link from source
187187
// RUN: touch %t.cpp
188-
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \
188+
// RUN: %clangxx -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \
189189
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-SRC,CHK-FPGA-LINK-SRC-DEFAULT %s
190-
// RUN: %clang_cl -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \
190+
// RUN: %clang_cl -### -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -fsycl-link=early %t.cpp -ccc-print-phases 2>&1 \
191191
// RUN: | FileCheck -check-prefixes=CHK-FPGA-LINK-SRC,CHK-FPGA-LINK-SRC-CL %s
192192
// CHK-FPGA-LINK-SRC: 0: input, "[[INPUT:.+\.cpp]]", c++, (host-sycl)
193193
// CHK-FPGA-LINK-SRC: 1: preprocessor, {0}, c++-cpp-output, (host-sycl)
@@ -275,9 +275,9 @@
275275

276276
/// -fintelfpga dependency file use from object phases test
277277
// RUN: touch %t-1.o
278-
// RUN: %clangxx -fsycl -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \
278+
// RUN: %clangxx -fsycl -fno-sycl-devicelib -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \
279279
// RUN: | FileCheck -check-prefix=CHK-FPGA-DEP-FILES-OBJ-PHASES -DINPUT=%t-1.o %s
280-
// RUN: %clang_cl -fsycl -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \
280+
// RUN: %clang_cl -fsycl -fno-sycl-devicelib -fintelfpga -ccc-print-phases -### %t-1.o 2>&1 \
281281
// RUN: | FileCheck -check-prefix=CHK-FPGA-DEP-FILES-OBJ-PHASES -DINPUT=%t-1.o %s
282282
// CHK-FPGA-DEP-FILES-OBJ-PHASES: 0: input, "[[INPUT]]", object, (host-sycl)
283283
// CHK-FPGA-DEP-FILES-OBJ-PHASES: 1: clang-offload-unbundler, {0}, object, (host-sycl)
@@ -348,7 +348,7 @@
348348
// RUN: llc -filetype=obj -o %t-aoco_cl.o %t-aoco_cl.bc
349349
// RUN: llvm-ar crv %t_aoco.a %t.o %t2.o %t-aoco.o
350350
// RUN: llvm-ar crv %t_aoco_cl.a %t.o %t2_cl.o %t-aoco_cl.o
351-
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \
351+
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -foffload-static-lib=%t_aoco.a %s -### -ccc-print-phases 2>&1 \
352352
// RUN: | FileCheck -check-prefix=CHK-FPGA-AOCO-PHASES %s
353353
// CHK-FPGA-AOCO-PHASES: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl)
354354
// CHK-FPGA-AOCO-PHASES: 1: input, "[[INPUTCPP:.+\.cpp]]", c++, (host-sycl)
@@ -375,7 +375,7 @@
375375
// CHK-FPGA-AOCO-PHASES: 22: offload, "host-sycl (x86_64-unknown-linux-gnu)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {21}, image
376376

377377
/// FPGA AOCO Windows phases check
378-
// RUN: %clang_cl -fsycl -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -### -ccc-print-phases 2>&1 \
378+
// RUN: %clang_cl -fsycl -fno-sycl-devicelib -fintelfpga -foffload-static-lib=%t_aoco_cl.a %s -### -ccc-print-phases 2>&1 \
379379
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO-PHASES-WIN %s
380380
// CHK-FPGA-AOCO-PHASES-WIN: 0: input, "{{.*}}", object, (host-sycl)
381381
// CHK-FPGA-AOCO-PHASES-WIN: 1: input, "[[INPUTSRC:.+\.cpp]]", c++, (host-sycl)
@@ -401,13 +401,13 @@
401401
// CHK-FPGA-AOCO-PHASES-WIN: 21: offload, "host-sycl (x86_64-pc-windows-msvc)" {10}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {20}, image
402402

403403
/// aoco test, checking tools
404-
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \
404+
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -foffload-static-lib=%t_aoco.a -### %s 2>&1 \
405405
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-LIN %s
406-
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %t_aoco.a -### %s 2>&1 \
406+
// RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga %t_aoco.a -### %s 2>&1 \
407407
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-LIN %s
408-
// RUN: %clang_cl -fsycl -fintelfpga -foffload-static-lib=%t_aoco_cl.a -### %s 2>&1 \
408+
// RUN: %clang_cl -fsycl -fno-sycl-devicelib -fintelfpga -foffload-static-lib=%t_aoco_cl.a -### %s 2>&1 \
409409
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-WIN %s
410-
// RUN: %clang_cl -fsycl -fintelfpga %t_aoco_cl.a -### %s 2>&1 \
410+
// RUN: %clang_cl -fsycl -fno-sycl-devicelib -fintelfpga %t_aoco_cl.a -### %s 2>&1 \
411411
// RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCO,CHK-FPGA-AOCO-WIN %s
412412
// CHK-FPGA-AOCO-LIN: clang-offload-bundler{{.*}} "-type=ao" "-targets=sycl-fpga_aoco-intel-unknown-sycldevice" "-inputs=[[INPUTLIB:.+\.a]]" "-check-section"
413413
// CHK-FPGA-AOCO-LIN: clang{{.*}} "-emit-obj" {{.*}} "-o" "[[HOSTOBJ:.+\.o]]"

clang/test/Driver/sycl-offload.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,11 +644,11 @@
644644
/// Ahead of Time compilation for fpga, gen, cpu - tool invocation
645645
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -fno-sycl-devicelib %s -### 2>&1 \
646646
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE
647-
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s -### 2>&1 \
647+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga %s -### 2>&1 \
648648
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE
649649
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
650650
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
651-
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -fsycl-enable-usm-address-spaces %s -### 2>&1 \
651+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fintelfpga -fsycl-enable-usm-address-spaces %s -### 2>&1 \
652652
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
653653
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fno-sycl-devicelib -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
654654
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN

0 commit comments

Comments
 (0)