Skip to content

Commit c2cdfcc

Browse files
authored
[New offload driver][sycl-post-link] Move sycl-post-link target specific options generation to linker wrapper (#14101)
There are some sycl-post-link options that are dependent on target triples and some options that are dependent on user options and some options that are dependent on both. In this change, we set up all the sycl-post-link options in the driver and then pass them to the clang-linker-wrapper tool. Before calling sycl-post-link functionality, the clang-linker-wrapper will update these options based on the target triple of the image being processed. Several tests have been updated as ordering of options have changed. Thanks --------- Signed-off-by: Arvind Sudarsanam <[email protected]>
1 parent a4c3019 commit c2cdfcc

11 files changed

+134
-56
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10620,10 +10620,10 @@ static void addArgs(ArgStringList &DstArgs, const llvm::opt::ArgList &Alloc,
1062010620
}
1062110621
}
1062210622

10623-
static void getOtherSYCLPostLinkOpts(const ToolChain &TC, const JobAction &JA,
10624-
const llvm::opt::ArgList &TCArgs,
10625-
ArgStringList &PostLinkArgs,
10626-
bool SpecConsts, types::ID OutputType) {
10623+
static void getNonTripleBasedSYCLPostLinkOpts(const ToolChain &TC,
10624+
const JobAction &JA,
10625+
const llvm::opt::ArgList &TCArgs,
10626+
ArgStringList &PostLinkArgs) {
1062710627
// See if device code splitting is requested
1062810628
if (Arg *A = TCArgs.getLastArg(options::OPT_fsycl_device_code_split_EQ)) {
1062910629
auto CodeSplitValue = StringRef(A->getValue());
@@ -10636,19 +10636,8 @@ static void getOtherSYCLPostLinkOpts(const ToolChain &TC, const JobAction &JA,
1063610636
else { // Device code split is off
1063710637
}
1063810638
}
10639-
if (OutputType == types::TY_LLVM_BC) {
10640-
// single file output requested - this means only perform necessary IR
10641-
// transformations (like specialization constant intrinsic lowering) and
10642-
// output LLVMIR
10643-
addArgs(PostLinkArgs, TCArgs, {"-ir-output-only"});
10644-
}
1064510639
addArgs(PostLinkArgs, TCArgs,
1064610640
{StringRef(getSYCLPostLinkOptimizationLevel(TCArgs))});
10647-
// specialization constants processing is mandatory
10648-
if (SpecConsts)
10649-
addArgs(PostLinkArgs, TCArgs, {"-spec-const=native"});
10650-
else
10651-
addArgs(PostLinkArgs, TCArgs, {"-spec-const=emulation"});
1065210641

1065310642
// Process device-globals.
1065410643
addArgs(PostLinkArgs, TCArgs, {"-device-globals"});
@@ -10665,31 +10654,47 @@ getTripleBasedSYCLPostLinkOpts(const ToolChain &TC, const JobAction &JA,
1066510654
const llvm::opt::ArgList &TCArgs,
1066610655
llvm::Triple Triple, ArgStringList &PostLinkArgs,
1066710656
bool SpecConsts, types::ID OutputType) {
10657+
bool NewOffloadDriver = TC.getDriver().getUseNewOffloadingDriver();
10658+
// Note: Do not use Triple when NewOffloadDriver is 'true'.
10659+
if (!NewOffloadDriver && (OutputType == types::TY_LLVM_BC)) {
10660+
// single file output requested - this means only perform necessary IR
10661+
// transformations (like specialization constant intrinsic lowering) and
10662+
// output LLVMIR
10663+
addArgs(PostLinkArgs, TCArgs, {"-ir-output-only"});
10664+
}
10665+
// specialization constants processing is mandatory
10666+
if (SpecConsts)
10667+
addArgs(PostLinkArgs, TCArgs, {"-spec-const=native"});
10668+
else
10669+
addArgs(PostLinkArgs, TCArgs, {"-spec-const=emulation"});
1066810670

1066910671
// See if device code splitting is requested. The logic here works along side
1067010672
// the behavior in setOtherSYCLPostLinkOpts, where the option is added based
1067110673
// on the user setting of-fsycl-device-code-split.
10672-
if (!(TCArgs.hasArg(options::OPT_fsycl_device_code_split_EQ) ||
10673-
Triple.getArchName() == "spir64_fpga"))
10674+
if (!TCArgs.hasArg(options::OPT_fsycl_device_code_split_EQ) &&
10675+
(NewOffloadDriver || !(Triple.getArchName() == "spir64_fpga")))
1067410676
addArgs(PostLinkArgs, TCArgs, {"-split=auto"});
1067510677

1067610678
// On Intel targets we don't need non-kernel functions as entry points,
1067710679
// because it only increases amount of code for device compiler to handle,
1067810680
// without any actual benefits.
1067910681
// TODO: Try to extend this feature for non-Intel GPUs.
10680-
if (!TCArgs.hasFlag(options::OPT_fno_sycl_remove_unused_external_funcs,
10681-
options::OPT_fsycl_remove_unused_external_funcs, false) &&
10682-
!Triple.isNVPTX() && !Triple.isAMDGPU() && !isSYCLNativeCPU(TC))
10682+
if ((!TCArgs.hasFlag(options::OPT_fno_sycl_remove_unused_external_funcs,
10683+
options::OPT_fsycl_remove_unused_external_funcs,
10684+
false) &&
10685+
!isSYCLNativeCPU(TC)) &&
10686+
(NewOffloadDriver || (!Triple.isNVPTX() && !Triple.isAMDGPU())))
1068310687
addArgs(PostLinkArgs, TCArgs, {"-emit-only-kernels-as-entry-points"});
1068410688

10685-
if (!(Triple.isAMDGCN()))
10689+
if (!NewOffloadDriver && !Triple.isAMDGCN())
1068610690
addArgs(PostLinkArgs, TCArgs, {"-emit-param-info"});
10687-
// Enable PI program metadata
10688-
if (Triple.isNVPTX() || Triple.isAMDGCN() || isSYCLNativeCPU(TC))
10691+
// Enable program metadata
10692+
if ((!NewOffloadDriver && (Triple.isNVPTX() || Triple.isAMDGCN())) ||
10693+
isSYCLNativeCPU(TC))
1068910694
addArgs(PostLinkArgs, TCArgs, {"-emit-program-metadata"});
1069010695
if (OutputType != types::TY_LLVM_BC) {
1069110696
assert(OutputType == types::TY_Tempfiletable);
10692-
bool SplitEsimdByDefault = Triple.isSPIROrSPIRV();
10697+
bool SplitEsimdByDefault = !NewOffloadDriver && Triple.isSPIROrSPIRV();
1069310698
bool SplitEsimd = TCArgs.hasFlag(
1069410699
options::OPT_fsycl_device_code_split_esimd,
1069510700
options::OPT_fno_sycl_device_code_split_esimd, SplitEsimdByDefault);
@@ -10701,14 +10706,14 @@ getTripleBasedSYCLPostLinkOpts(const ToolChain &TC, const JobAction &JA,
1070110706
addArgs(PostLinkArgs, TCArgs, {"-split-esimd"});
1070210707
addArgs(PostLinkArgs, TCArgs, {"-lower-esimd"});
1070310708
}
10704-
bool isAOT = Triple.isNVPTX() || Triple.isAMDGCN() ||
10709+
bool IsAOT = Triple.isNVPTX() || Triple.isAMDGCN() ||
1070510710
Triple.getSubArch() == llvm::Triple::SPIRSubArch_fpga ||
1070610711
Triple.getSubArch() == llvm::Triple::SPIRSubArch_gen ||
1070710712
Triple.getSubArch() == llvm::Triple::SPIRSubArch_x86_64;
1070810713
if (TCArgs.hasFlag(options::OPT_fsycl_add_default_spec_consts_image,
1070910714
options::OPT_fno_sycl_add_default_spec_consts_image,
1071010715
false) &&
10711-
isAOT)
10716+
(IsAOT || NewOffloadDriver))
1071210717
addArgs(PostLinkArgs, TCArgs,
1071310718
{"-generate-device-image-default-spec-consts"});
1071410719
}
@@ -10731,9 +10736,7 @@ void SYCLPostLink::ConstructJob(Compilation &C, const JobAction &JA,
1073110736
ArgStringList CmdArgs;
1073210737

1073310738
llvm::Triple T = getToolChain().getTriple();
10734-
getOtherSYCLPostLinkOpts(getToolChain(), JA, TCArgs, CmdArgs,
10735-
SYCLPostLink->getRTSetsSpecConstants(),
10736-
SYCLPostLink->getTrueType());
10739+
getNonTripleBasedSYCLPostLinkOpts(getToolChain(), JA, TCArgs, CmdArgs);
1073710740
getTripleBasedSYCLPostLinkOpts(getToolChain(), JA, TCArgs, T, CmdArgs,
1073810741
SYCLPostLink->getRTSetsSpecConstants(),
1073910742
SYCLPostLink->getTrueType());
@@ -11135,13 +11138,11 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
1113511138
types::ID OutputType = TargetTriple.isSPIROrSPIRV() || IsSYCLNativeCPU
1113611139
? types::TY_Tempfiletable
1113711140
: types::TY_LLVM_BC;
11138-
// TODO: Items like native_cpu and Specialization Constants behaviors are
11139-
// dependent on each toolchain. Passing these along as 'general settings'
11140-
// for the clang-linker-wrapper causes for potential inconsistencies and
11141-
// would need to handled more at the device linking level.
1114211141
bool SpecConsts = TargetTriple.isSPIROrSPIRV();
11143-
getOtherSYCLPostLinkOpts(getToolChain(), JA, Args, PostLinkArgs, SpecConsts,
11144-
OutputType);
11142+
getNonTripleBasedSYCLPostLinkOpts(getToolChain(), JA, Args, PostLinkArgs);
11143+
// Some options like -spec-consts=* depend on target triple as well as some
11144+
// user options. So, these options are partly computed here and then
11145+
// updated inside the clang-linker-wrapper.
1114511146
getTripleBasedSYCLPostLinkOpts(getToolChain(), JA, Args, TargetTriple,
1114611147
PostLinkArgs, SpecConsts, OutputType);
1114711148
for (const auto &A : PostLinkArgs)

clang/test/Driver/linker-wrapper-sycl-win.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// CHK-CMDS: "{{.*}}spirv-to-ir-wrapper.exe" {{.*}} -o [[FIRSTLLVMLINKIN:.*]].bc --llvm-spirv-opts=--spirv-preserve-auxdata --llvm-spirv-opts=--spirv-target-env=SPV-IR --llvm-spirv-opts=--spirv-builtin-format=global
66
// CHK-CMDS-NEXT: "{{.*}}llvm-link.exe" [[FIRSTLLVMLINKIN:.*]].bc -o [[FIRSTLLVMLINKOUT:.*]].bc --suppress-warnings
77
// CHK-CMDS-NEXT: "{{.*}}llvm-link.exe" -only-needed [[FIRSTLLVMLINKOUT]].bc {{.*}}.bc {{.*}}.bc -o [[SECONDLLVMLINKOUT:.*]].bc --suppress-warnings
8-
// CHK-CMDS-NEXT: "{{.*}}sycl-post-link.exe" SYCL_POST_LINK_OPTIONS -o [[SYCLPOSTLINKOUT:.*]].table [[SECONDLLVMLINKOUT]].bc
8+
// CHK-CMDS-NEXT: "{{.*}}sycl-post-link.exe" SYCL_POST_LINK_OPTIONS{{.*}} -o [[SYCLPOSTLINKOUT:.*]].table [[SECONDLLVMLINKOUT]].bc
99
// LLVM-SPIRV is not called in dry-run
1010
// CHK-CMDS-NEXT: offload-wrapper: input: [[LLVMSPIRVOUT:.*]].table, output: [[WRAPPEROUT:.*]].bc
1111
// CHK-CMDS-NEXT: "{{.*}}llc.exe" -filetype=obj -o [[LLCOUT:.*]].o [[WRAPPEROUT]].bc

clang/test/Driver/linker-wrapper-sycl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// CHK-CMDS: "{{.*}}spirv-to-ir-wrapper" {{.*}} -o [[FIRSTLLVMLINKIN:.*]].bc --llvm-spirv-opts=--spirv-preserve-auxdata --llvm-spirv-opts=--spirv-target-env=SPV-IR --llvm-spirv-opts=--spirv-builtin-format=global
66
// CHK-CMDS-NEXT: "{{.*}}llvm-link" [[FIRSTLLVMLINKIN:.*]].bc -o [[FIRSTLLVMLINKOUT:.*]].bc --suppress-warnings
77
// CHK-CMDS-NEXT: "{{.*}}llvm-link" -only-needed [[FIRSTLLVMLINKOUT]].bc {{.*}}.bc {{.*}}.bc -o [[SECONDLLVMLINKOUT:.*]].bc --suppress-warnings
8-
// CHK-CMDS-NEXT: "{{.*}}sycl-post-link" SYCL_POST_LINK_OPTIONS -o [[SYCLPOSTLINKOUT:.*]].table [[SECONDLLVMLINKOUT]].bc
8+
// CHK-CMDS-NEXT: "{{.*}}sycl-post-link" SYCL_POST_LINK_OPTIONS {{.*}} -o [[SYCLPOSTLINKOUT:.*]].table [[SECONDLLVMLINKOUT]].bc
99
// LLVM-SPIRV is not called in dry-run
1010
// CHK-CMDS-NEXT: offload-wrapper: input: [[LLVMSPIRVOUT:.*]].table, output: [[WRAPPEROUT:.*]].bc
1111
// CHK-CMDS-NEXT: "{{.*}}llc" -filetype=obj -o [[LLCOUT:.*]].o [[WRAPPEROUT]].bc

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
// CHK-FPGA-AOCO: spirv-to-ir-wrapper{{.*}} "[[LIBLIST]]" "-o" "[[LIBLIST2:.+\.txt]]"
5151
// CHK-FPGA-AOCO: llvm-link{{.*}} "-o" "[[LINKEDBC:.+\.bc]]"
5252
// CHK-FPGA-AOCO: llvm-link{{.*}} "--only-needed" "[[LINKEDBC]]" "@[[LIBLIST2]]" "-o" "[[LINKEDBC2:.+\.bc]]"
53-
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-spec-const=emulation" "-device-globals"{{.*}} "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC2]]"
53+
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-device-globals"{{.*}} "-spec-const=emulation"{{.*}} "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC2]]"
5454
// CHK-FPGA-AOCO: file-table-tform{{.*}} "-o" "[[TABLEOUT:.+\.txt]]" "[[SPLTABLE]]"
5555
// CHK-FPGA-AOCO: llvm-spirv{{.*}} "-o" "[[TARGSPV:.+\.txt]]" {{.*}} "[[TABLEOUT]]"
5656
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown" "-input=[[INPUTLIB]]" "-output=[[AOCOLIST:.+\.txt]]" "-unbundle"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
// CHK-FPGA-AOCO: spirv-to-ir-wrapper{{.*}} "[[LIBLIST]]" "-o" "[[LIBLIST2:.+\.txt]]"
5555
// CHK-FPGA-AOCO: llvm-link{{.*}} "-o" "[[LINKEDBC:.+\.bc]]"
5656
// CHK-FPGA-AOCO: llvm-link{{.*}} "--only-needed" "[[LINKEDBC]]" "@[[LIBLIST2]]" "-o" "[[LINKEDBC2:.+\.bc]]"
57-
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-spec-const=emulation" "-device-globals"{{.*}} "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC2]]"
57+
// CHK-FPGA-AOCO: sycl-post-link{{.*}} "-device-globals"{{.*}} "-spec-const=emulation"{{.*}} "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC2]]"
5858
// CHK-FPGA-AOCO: file-table-tform{{.*}} "-o" "[[TABLEOUT:.+\.txt]]" "[[SPLTABLE]]"
5959
// CHK-FPGA-AOCO: llvm-spirv{{.*}} "-o" "[[TARGSPV:.+\.txt]]" {{.*}} "[[TABLEOUT]]"
6060
// CHK-FPGA-AOCO: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-fpga_aoco-intel-unknown" "-input=[[INPUTLIB]]" "-output=[[AOCOLIST:.+\.txt]]" "-unbundle"
@@ -105,7 +105,7 @@
105105
// CHK-FPGA-AOCO-EMU: clang-offload-bundler{{.*}} "-type=aoo" "-targets=sycl-spir64_fpga-unknown-unknown" "-input=[[INPUTLIB:.+\.a]]" "-output=[[OUTLIB:.+\.txt]]" "-unbundle"
106106
// CHK-FPGA-AOCO-EMU: llvm-foreach{{.*}} "--out-ext=txt" "--in-file-list=[[OUTLIB]]" "--in-replace=[[OUTLIB]]" "--out-file-list=[[DEVICELIST:.+\.txt]]" "--out-replace=[[DEVICELIST]]" "--" {{.*}}spirv-to-ir-wrapper{{.*}} "[[OUTLIB]]" "-o" "[[DEVICELIST]]"
107107
// CHK-FPGA-AOCO-EMU: llvm-link{{.*}} "@[[DEVICELIST]]" "-o" "[[LINKEDBC:.+\.bc]]"
108-
// CHK-FPGA-AOCO-EMU: sycl-post-link{{.*}} "-O2" "-spec-const=emulation" "-device-globals"{{.*}} "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC]]"
108+
// CHK-FPGA-AOCO-EMU: sycl-post-link{{.*}} "-O2" "-device-globals"{{.*}} "-spec-const=emulation"{{.*}} "-o" "[[SPLTABLE:.+\.table]]" "[[LINKEDBC]]"
109109
// CHK-FPGA-AOCO-EMU: file-table-tform{{.*}} "-o" "[[TABLEOUT:.+\.txt]]" "[[SPLTABLE]]"
110110
// CHK-FPGA-AOCO-EMU: llvm-spirv{{.*}} "-o" "[[TARGSPV:.+\.txt]]" {{.*}} "[[TABLEOUT]]"
111111
// CHK-FPGA-AOCO-EMU: opencl-aot{{.*}} "-device=fpga_fast_emu" "-spv=[[TARGSPV]]" "-ir=[[AOCXOUT:.+\.aocx]]"

clang/test/Driver/sycl-linker-wrapper-image.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,14 @@ int main() {
4141
// CHECK-DAG: @prop_val = internal unnamed_addr constant [8 x i8] zeroinitializer
4242
// CHECK-DAG: @__sycl_offload_prop_sets_arr.2 = internal constant [1 x %_pi_device_binary_property_struct] [%_pi_device_binary_property_struct { ptr @prop.1, ptr @prop_val, i32 2, i64 8 }]
4343
// CHECK-DAG: @SYCL_PropSetName.3 = internal unnamed_addr constant [25 x i8] c"SYCL/device requirements\00"
44-
// CHECK-DAG: @__sycl_offload_prop_sets_arr.4 = internal constant [2 x %_pi_device_binary_property_set_struct] [%_pi_device_binary_property_set_struct { ptr @SYCL_PropSetName, ptr @__sycl_offload_prop_sets_arr, ptr getelementptr inbounds ([1 x %_pi_device_binary_property_struct], ptr @__sycl_offload_prop_sets_arr, i64 1, i64 0) }, %_pi_device_binary_property_set_struct { ptr @SYCL_PropSetName.3, ptr @__sycl_offload_prop_sets_arr.2, ptr getelementptr inbounds ([1 x %_pi_device_binary_property_struct], ptr @__sycl_offload_prop_sets_arr.2, i64 1, i64 0) }]
44+
// CHECK-DAG: @SYCL_PropSetName.4 = internal unnamed_addr constant [22 x i8] c"SYCL/kernel param opt\00"
45+
// CHECK-DAG: @__sycl_offload_prop_sets_arr.5 = internal constant [3 x %_pi_device_binary_property_set_struct] [%_pi_device_binary_property_set_struct { ptr @SYCL_PropSetName, ptr @__sycl_offload_prop_sets_arr, ptr getelementptr inbounds ([1 x %_pi_device_binary_property_struct], ptr @__sycl_offload_prop_sets_arr, i64 1, i64 0) }, %_pi_device_binary_property_set_struct { ptr @SYCL_PropSetName.3, ptr @__sycl_offload_prop_sets_arr.2, ptr getelementptr inbounds ([1 x %_pi_device_binary_property_struct], ptr @__sycl_offload_prop_sets_arr.2, i64 1, i64 0) }, %_pi_device_binary_property_set_struct { ptr @SYCL_PropSetName.4, ptr null, ptr null }]
4546
// CHECK-DAG: @.sycl_offloading.0.data = internal unnamed_addr constant [740 x i8]
4647
// CHECK-DAG: @__sycl_offload_entry_name = internal unnamed_addr constant [25 x i8] c"_ZTSZ4mainE11fake_kernel\00"
4748
// CHECK-DAG: @__sycl_offload_entries_arr = internal constant [1 x %struct.__tgt_offload_entry] [%struct.__tgt_offload_entry { ptr null, ptr @__sycl_offload_entry_name, i64 0, i32 0, i32 0 }]
4849
// CHECK-DAG: @.sycl_offloading.0.info = internal local_unnamed_addr constant [2 x i64] [i64 ptrtoint (ptr @.sycl_offloading.0.data to i64), i64 740], section ".tgtimg", align 16
4950
// CHECK-DAG: @llvm.used = appending global [1 x ptr] [ptr @.sycl_offloading.0.info], section "llvm.metadata"
50-
// CHECK-DAG: @.sycl_offloading.device_images = internal unnamed_addr constant [1 x %__sycl.tgt_device_image] [%__sycl.tgt_device_image { i16 2, i8 4, i8 0, ptr @.sycl_offloading.target.0, ptr @.sycl_offloading.opts.compile.0, ptr @.sycl_offloading.opts.link.0, ptr null, ptr null, ptr @.sycl_offloading.0.data, ptr getelementptr inbounds ([740 x i8], ptr @.sycl_offloading.0.data, i64 1, i64 0), ptr @__sycl_offload_entries_arr, ptr getelementptr inbounds ([1 x %struct.__tgt_offload_entry], ptr @__sycl_offload_entries_arr, i64 1, i64 0), ptr @__sycl_offload_prop_sets_arr.4, ptr getelementptr inbounds ([2 x %_pi_device_binary_property_set_struct], ptr @__sycl_offload_prop_sets_arr.4, i64 1, i64 0) }]
51+
// CHECK-DAG: @.sycl_offloading.device_images = internal unnamed_addr constant [1 x %__sycl.tgt_device_image] [%__sycl.tgt_device_image { i16 2, i8 4, i8 0, ptr @.sycl_offloading.target.0, ptr @.sycl_offloading.opts.compile.0, ptr @.sycl_offloading.opts.link.0, ptr null, ptr null, ptr @.sycl_offloading.0.data, ptr getelementptr inbounds ([740 x i8], ptr @.sycl_offloading.0.data, i64 1, i64 0), ptr @__sycl_offload_entries_arr, ptr getelementptr inbounds ([1 x %struct.__tgt_offload_entry], ptr @__sycl_offload_entries_arr, i64 1, i64 0), ptr @__sycl_offload_prop_sets_arr.5, ptr getelementptr inbounds ([3 x %_pi_device_binary_property_set_struct], ptr @__sycl_offload_prop_sets_arr.5, i64 1, i64 0) }]
5152
// CHECK-DAG: @.sycl_offloading.descriptor = internal constant %__sycl.tgt_bin_desc { i16 1, i16 1, ptr @.sycl_offloading.device_images, ptr null, ptr null }
5253
// CHECK-DAG: @llvm.global_ctors = {{.*}} { i32 1, ptr @sycl.descriptor_reg, ptr null }]
5354
// CHECK-DAG: @llvm.global_dtors = {{.*}} { i32 1, ptr @sycl.descriptor_unreg, ptr null }]

0 commit comments

Comments
 (0)