Skip to content

Commit 6fb9973

Browse files
committed
[SYCL][FPGA] Enable USM address spaces by default for the hardware
The extension is enabled for FPGA H/W, but not for FPGA emulator. With this patch the temporary option "fsycl-enable-usm-address-spaces" is removed. Signed-off-by: Dmitry Sidorov <[email protected]>
1 parent 047e2ec commit 6fb9973

File tree

4 files changed

+27
-19
lines changed

4 files changed

+27
-19
lines changed

clang/include/clang/Driver/Options.td

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,9 +1866,6 @@ def fstrict_vtable_pointers: Flag<["-"], "fstrict-vtable-pointers">,
18661866
def fstrict_overflow : Flag<["-"], "fstrict-overflow">, Group<f_Group>;
18671867
def fintelfpga : Flag<["-"], "fintelfpga">, Group<f_Group>,
18681868
Flags<[CC1Option, CoreOption]>, HelpText<"Perform ahead of time compilation for FPGA">;
1869-
def fsycl_enable_usm_address_spaces : Flag<["-"], "fsycl-enable-usm-address-spaces">,
1870-
Group<f_Group>, Flags<[CC1Option, CoreOption]>,
1871-
HelpText<"Enable USM address spaces">;
18721869
def fsycl_device_only : Flag<["-"], "fsycl-device-only">, Flags<[CoreOption]>,
18731870
HelpText<"Compile SYCL kernels for device">;
18741871
def fsycl_targets_EQ : CommaJoined<["-"], "fsycl-targets=">, Flags<[DriverOption, CC1Option, CoreOption]>,

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6241,11 +6241,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
62416241
if (Args.hasArg(options::OPT_fsycl_unnamed_lambda))
62426242
CmdArgs.push_back("-fsycl-unnamed-lambda");
62436243

6244-
// Enable generation of USM address spaces as opt-in.
6244+
// Enable generation of USM address spaces for FPGA.
62456245
// __ENABLE_USM_ADDR_SPACE__ will be used during compilation of SYCL headers
62466246
if (getToolChain().getTriple().getSubArch() ==
6247-
llvm::Triple::SPIRSubArch_fpga &&
6248-
Args.hasArg(options::OPT_fsycl_enable_usm_address_spaces))
6247+
llvm::Triple::SPIRSubArch_fpga)
62496248
CmdArgs.push_back("-D__ENABLE_USM_ADDR_SPACE__");
62506249
}
62516250

@@ -7699,18 +7698,27 @@ void SPIRVTranslator::ConstructJob(Compilation &C, const JobAction &JA,
76997698
TranslatorArgs.push_back(Output.getFilename());
77007699
if (getToolChain().getTriple().isSYCLDeviceEnvironment()) {
77017700
TranslatorArgs.push_back("-spirv-max-version=1.1");
7702-
std::string ExtArg("-spirv-ext=+all");
77037701
if (C.getArgs().hasArg(options::OPT_fsycl_esimd))
77047702
TranslatorArgs.push_back("-spirv-allow-unknown-intrinsics");
7703+
77057704
// Disable SPV_INTEL_usm_storage_classes by default since it adds new
77067705
// storage classes that represent global_device and global_host address
77077706
// spaces, which are not supported for all targets. With the extension
77087707
// disable the storage classes will be lowered to CrossWorkgroup storage
7709-
// class that is mapped to just global address space.
7710-
if (!(getToolChain().getTriple().getSubArch() ==
7711-
llvm::Triple::SPIRSubArch_fpga &&
7712-
TCArgs.hasArg(options::OPT_fsycl_enable_usm_address_spaces)))
7713-
ExtArg += ",-SPV_INTEL_usm_storage_classes";
7708+
// class that is mapped to just global address space. The extension is
7709+
// supposed to be enabled only for FPGA hardware.
7710+
std::string ExtArg("-spirv-ext=+all,-SPV_INTEL_usm_storage_classes");
7711+
if (getToolChain().getTriple().getSubArch() ==
7712+
llvm::Triple::SPIRSubArch_fpga) {
7713+
for (auto *A : TCArgs) {
7714+
if (A->getOption().matches(options::OPT_Xs_separate) ||
7715+
A->getOption().matches(options::OPT_Xs)) {
7716+
StringRef ArgString(A->getValue());
7717+
if (ArgString == "hardware" || ArgString == "simulation")
7718+
ExtArg = "-spirv-ext=+all";
7719+
}
7720+
}
7721+
}
77147722
TranslatorArgs.push_back(TCArgs.MakeArgString(ExtArg));
77157723
}
77167724
for (auto I : Inputs) {

clang/test/Driver/sycl-offload-with-split.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@
217217
// CHK-TOOLS-GEN: clang-offload-wrapper{{.*}} "-o=[[OUTPUT8:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_gen" "-kind=sycl" "-batch" "[[OUTPUT7]]"
218218
// CHK-TOOLS-CPU: clang-offload-wrapper{{.*}} "-o=[[OUTPUT8:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_x86_64" "-kind=sycl" "-batch" "[[OUTPUT7]]"
219219
// CHK-TOOLS-AOT: llc{{.*}} "-filetype=obj" "-o" "[[OUTPUT9:.+\.o]]" "[[OUTPUT8]]"
220-
// CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig"
220+
// CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-D__ENABLE_USM_ADDR_SPACE__" "-faddrsig"
221221
// CHK-TOOLS-GEN: clang{{.*}} "-triple" "spir64_gen-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig"
222222
// CHK-TOOLS-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig"
223223
// CHK-TOOLS-AOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT10:.+\.o]]"

clang/test/Driver/sycl-offload.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -646,13 +646,17 @@
646646
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE
647647
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %s -### 2>&1 \
648648
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-DISABLE
649-
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
649+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xshardware %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 -fintelfpga -Xshardware %s -### 2>&1 \
652652
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
653-
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_gen-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
653+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_fpga-unknown-unknown-sycldevice -Xssimulation %s -### 2>&1 \
654+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
655+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -Xssimulation %s -### 2>&1 \
656+
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-FPGA,CHK-TOOLS-FPGA-USM-ENABLE
657+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \
654658
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN
655-
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice -fsycl-enable-usm-address-spaces %s -### 2>&1 \
659+
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_x86_64-unknown-unknown-sycldevice %s -### 2>&1 \
656660
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-CPU
657661
// RUN: %clang -target x86_64-unknown-linux-gnu -fsycl -fsycl-targets=spir64_gen-unknown-unknown-sycldevice %s -### 2>&1 \
658662
// RUN: | FileCheck %s -check-prefixes=CHK-TOOLS-AOT,CHK-TOOLS-GEN
@@ -672,8 +676,7 @@
672676
// CHK-TOOLS-GEN: clang-offload-wrapper{{.*}} "-o=[[OUTPUT5:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_gen{{.*}}" "-kind=sycl" "[[OUTPUT4]]"
673677
// CHK-TOOLS-CPU: clang-offload-wrapper{{.*}} "-o=[[OUTPUT5:.+\.bc]]" "-host=x86_64-unknown-linux-gnu" "-target=spir64_x86_64{{.*}}" "-kind=sycl" "[[OUTPUT4]]"
674678
// CHK-TOOLS-AOT: llc{{.*}} "-filetype=obj" "-o" "[[OUTPUT6:.+\.o]]" "[[OUTPUT5]]"
675-
// CHK-TOOLS-FPGA-USM-DISABLE: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig"
676-
// CHK-TOOLS-FPGA-USM-ENABLE: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-D__ENABLE_USM_ADDR_SPACE__" "-faddrsig"
679+
// CHK-TOOLS-FPGA: clang{{.*}} "-triple" "spir64_fpga-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-D__ENABLE_USM_ADDR_SPACE__" "-faddrsig"
677680
// CHK-TOOLS-GEN: clang{{.*}} "-triple" "spir64_gen-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig"
678681
// CHK-TOOLS-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown-sycldevice" {{.*}} "-fsycl-int-header=[[INPUT1:.+\.h]]" "-faddrsig"
679682
// CHK-TOOLS-AOT: clang{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-include" "[[INPUT1]]" {{.*}} "-o" "[[OUTPUT7:.+\.o]]"

0 commit comments

Comments
 (0)