Skip to content

Commit 93e98df

Browse files
cherry-pick builtin support
1 parent 62a02f6 commit 93e98df

File tree

5 files changed

+153
-27
lines changed

5 files changed

+153
-27
lines changed

llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ std::string lookupBuiltinNameHelper(StringRef DemangledCall,
207207
// Check if the extracted name begins with:
208208
// - "__spirv_ImageSampleExplicitLod"
209209
// - "__spirv_ImageRead"
210+
// - "__spirv_ImageWrite"
210211
// - "__spirv_ImageQuerySizeLod"
211212
// - "__spirv_UDotKHR"
212213
// - "__spirv_SDotKHR"
@@ -224,20 +225,21 @@ std::string lookupBuiltinNameHelper(StringRef DemangledCall,
224225
// - "__spirv_SConvert"
225226
// - "__spirv_FConvert"
226227
// - "__spirv_SatConvert"
227-
// and contains return type information at the end "_R<type>".
228+
// and maybe contains return type information at the end "_R<type>".
228229
// If so, extract the plain builtin name without the type information.
229230
static const std::regex SpvWithR(
230-
"(__spirv_(ImageSampleExplicitLod|ImageRead|ImageQuerySizeLod|UDotKHR|"
231+
"(__spirv_(ImageSampleExplicitLod|ImageRead|ImageWrite|ImageQuerySizeLod|"
232+
"UDotKHR|"
231233
"SDotKHR|SUDotKHR|SDotAccSatKHR|UDotAccSatKHR|SUDotAccSatKHR|"
232234
"ReadClockKHR|SubgroupBlockReadINTEL|SubgroupImageBlockReadINTEL|"
233235
"SubgroupImageMediaBlockReadINTEL|SubgroupImageMediaBlockWriteINTEL|"
234236
"Convert|"
235-
"UConvert|SConvert|FConvert|SatConvert).*)_R[^_]*_?(\\w+)?.*");
237+
"UConvert|SConvert|FConvert|SatConvert)[^_]*)(_R[^_]*_?(\\w+)?.*)?");
236238
std::smatch Match;
237239
if (std::regex_match(BuiltinName, Match, SpvWithR) && Match.size() > 1) {
238240
std::ssub_match SubMatch;
239241
if (DecorationId && Match.size() > 3) {
240-
SubMatch = Match[3];
242+
SubMatch = Match[4];
241243
*DecorationId = demangledPostfixToDecorationId(SubMatch.str());
242244
}
243245
SubMatch = Match[1];
@@ -1826,6 +1828,9 @@ static bool generateReadImageInst(const StringRef DemangledCall,
18261828
const SPIRV::IncomingCall *Call,
18271829
MachineIRBuilder &MIRBuilder,
18281830
SPIRVGlobalRegistry *GR) {
1831+
if (Call->isSpirvOp())
1832+
return buildOpFromWrapper(MIRBuilder, SPIRV::OpImageRead, Call,
1833+
GR->getSPIRVTypeID(Call->ReturnType));
18291834
Register Image = Call->Arguments[0];
18301835
MachineRegisterInfo *MRI = MIRBuilder.getMRI();
18311836
bool HasOclSampler = DemangledCall.contains_insensitive("ocl_sampler");
@@ -1905,6 +1910,9 @@ static bool generateReadImageInst(const StringRef DemangledCall,
19051910
static bool generateWriteImageInst(const SPIRV::IncomingCall *Call,
19061911
MachineIRBuilder &MIRBuilder,
19071912
SPIRVGlobalRegistry *GR) {
1913+
if (Call->isSpirvOp())
1914+
return buildOpFromWrapper(MIRBuilder, SPIRV::OpImageWrite, Call,
1915+
Register(0));
19081916
MIRBuilder.buildInstr(SPIRV::OpImageWrite)
19091917
.addUse(Call->Arguments[0]) // Image.
19101918
.addUse(Call->Arguments[1]) // Coordinate.

llvm/lib/Target/SPIRV/SPIRVBuiltins.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,13 @@ def : DemangledBuiltin<"__spirv_Dot", OpenCL_std, Dot, 2, 2>;
106106
def : DemangledBuiltin<"read_imagei", OpenCL_std, ReadImage, 2, 4>;
107107
def : DemangledBuiltin<"read_imageui", OpenCL_std, ReadImage, 2, 4>;
108108
def : DemangledBuiltin<"read_imagef", OpenCL_std, ReadImage, 2, 4>;
109+
def : DemangledBuiltin<"__spirv_ImageRead", OpenCL_std, ReadImage, 2, 0>;
109110

110111
def : DemangledBuiltin<"write_imagef", OpenCL_std, WriteImage, 3, 4>;
111112
def : DemangledBuiltin<"write_imagei", OpenCL_std, WriteImage, 3, 4>;
112113
def : DemangledBuiltin<"write_imageui", OpenCL_std, WriteImage, 3, 4>;
113114
def : DemangledBuiltin<"write_imageh", OpenCL_std, WriteImage, 3, 4>;
115+
def : DemangledBuiltin<"__spirv_ImageWrite", OpenCL_std, WriteImage, 3, 0>;
114116

115117
def : DemangledBuiltin<"__translate_sampler_initializer", OpenCL_std, SampleImage, 1, 1>;
116118
def : DemangledBuiltin<"__spirv_SampledImage", OpenCL_std, SampleImage, 2, 2>;
@@ -1319,6 +1321,15 @@ multiclass DemangledGetBuiltin<string name, InstructionSet set, BuiltinGroup gro
13191321
}
13201322

13211323
// Builtin variable records:
1324+
defm : DemangledGetBuiltin<"get_global_linear_id", OpenCL_std, Variable, GlobalLinearId>;
1325+
defm : DemangledGetBuiltin<"get_local_linear_id", OpenCL_std, Variable, LocalInvocationIndex>;
1326+
defm : DemangledGetBuiltin<"get_work_dim", OpenCL_std, Variable, WorkDim>;
1327+
defm : DemangledGetBuiltin<"get_sub_group_size", OpenCL_std, Variable, SubgroupSize>;
1328+
defm : DemangledGetBuiltin<"get_max_sub_group_size", OpenCL_std, Variable, SubgroupMaxSize>;
1329+
defm : DemangledGetBuiltin<"get_num_sub_groups", OpenCL_std, Variable, NumSubgroups>;
1330+
defm : DemangledGetBuiltin<"get_enqueued_num_sub_groups", OpenCL_std, Variable, NumEnqueuedSubgroups>;
1331+
defm : DemangledGetBuiltin<"get_sub_group_id", OpenCL_std, Variable, SubgroupId>;
1332+
defm : DemangledGetBuiltin<"get_sub_group_local_id", OpenCL_std, Variable, SubgroupLocalInvocationId>;
13221333
defm : DemangledGetBuiltin<"get_sub_group_eq_mask", OpenCL_std, Variable, SubgroupEqMask>;
13231334
defm : DemangledGetBuiltin<"get_sub_group_ge_mask", OpenCL_std, Variable, SubgroupGeMask>;
13241335
defm : DemangledGetBuiltin<"get_sub_group_gt_mask", OpenCL_std, Variable, SubgroupGtMask>;
@@ -1335,6 +1346,7 @@ defm : DemangledGetBuiltin<"get_global_size", OpenCL_std, GetQuery, GlobalSize>;
13351346
defm : DemangledGetBuiltin<"get_group_id", OpenCL_std, GetQuery, WorkgroupId>;
13361347
defm : DemangledGetBuiltin<"get_enqueued_local_size", OpenCL_std, GetQuery, EnqueuedWorkgroupSize>;
13371348
defm : DemangledGetBuiltin<"get_num_groups", OpenCL_std, GetQuery, NumWorkgroups>;
1349+
defm : DemangledGetBuiltin<"get_global_offset", OpenCL_std, GetQuery, GlobalOffset>;
13381350
defm : DemangledGetBuiltin<"__hlsl_wave_get_lane_index", GLSL_std_450, Wave, SubgroupLocalInvocationId>;
13391351

13401352
//===----------------------------------------------------------------------===//

llvm/test/CodeGen/SPIRV/builtin_vars-decorate.ll

Lines changed: 66 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
2-
3-
; CHECK: OpName %[[#WD:]] "__spirv_BuiltInWorkDim"
4-
; CHECK: OpName %[[#GS:]] "__spirv_BuiltInGlobalSize"
5-
; CHECK: OpName %[[#GII:]] "__spirv_BuiltInGlobalInvocationId"
6-
; CHECK: OpName %[[#WS:]] "__spirv_BuiltInWorkgroupSize"
7-
; CHECK: OpName %[[#EWS:]] "__spirv_BuiltInEnqueuedWorkgroupSize"
8-
; CHECK: OpName %[[#LLI:]] "__spirv_BuiltInLocalInvocationId"
9-
; CHECK: OpName %[[#NW:]] "__spirv_BuiltInNumWorkgroups"
10-
; CHECK: OpName %[[#WI:]] "__spirv_BuiltInWorkgroupId"
11-
; CHECK: OpName %[[#GO:]] "__spirv_BuiltInGlobalOffset"
12-
; CHECK: OpName %[[#GLI:]] "__spirv_BuiltInGlobalLinearId"
13-
; CHECK: OpName %[[#LLII:]] "__spirv_BuiltInLocalInvocationIndex"
14-
; CHECK: OpName %[[#SS:]] "__spirv_BuiltInSubgroupSize"
15-
; CHECK: OpName %[[#SMS:]] "__spirv_BuiltInSubgroupMaxSize"
16-
; CHECK: OpName %[[#NS:]] "__spirv_BuiltInNumSubgroups"
17-
; CHECK: OpName %[[#NES:]] "__spirv_BuiltInNumEnqueuedSubgroups"
18-
; CHECK: OpName %[[#SI:]] "__spirv_BuiltInSubgroupId"
19-
; CHECK: OpName %[[#SLII:]] "__spirv_BuiltInSubgroupLocalInvocationId"
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
2+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
3+
4+
; CHECK-DAG: OpName %[[#WD:]] "__spirv_BuiltInWorkDim"
5+
; CHECK-DAG: OpName %[[#GS:]] "__spirv_BuiltInGlobalSize"
6+
; CHECK-DAG: OpName %[[#GII:]] "__spirv_BuiltInGlobalInvocationId"
7+
; CHECK-DAG: OpName %[[#WS:]] "__spirv_BuiltInWorkgroupSize"
8+
; CHECK-DAG: OpName %[[#EWS:]] "__spirv_BuiltInEnqueuedWorkgroupSize"
9+
; CHECK-DAG: OpName %[[#LLI:]] "__spirv_BuiltInLocalInvocationId"
10+
; CHECK-DAG: OpName %[[#NW:]] "__spirv_BuiltInNumWorkgroups"
11+
; CHECK-DAG: OpName %[[#WI:]] "__spirv_BuiltInWorkgroupId"
12+
; CHECK-DAG: OpName %[[#GO:]] "__spirv_BuiltInGlobalOffset"
13+
; CHECK-DAG: OpName %[[#GLI:]] "__spirv_BuiltInGlobalLinearId"
14+
; CHECK-DAG: OpName %[[#LLII:]] "__spirv_BuiltInLocalInvocationIndex"
15+
; CHECK-DAG: OpName %[[#SS:]] "__spirv_BuiltInSubgroupSize"
16+
; CHECK-DAG: OpName %[[#SMS:]] "__spirv_BuiltInSubgroupMaxSize"
17+
; CHECK-DAG: OpName %[[#NS:]] "__spirv_BuiltInNumSubgroups"
18+
; CHECK-DAG: OpName %[[#NES:]] "__spirv_BuiltInNumEnqueuedSubgroups"
19+
; CHECK-DAG: OpName %[[#SI:]] "__spirv_BuiltInSubgroupId"
20+
; CHECK-DAG: OpName %[[#SLII:]] "__spirv_BuiltInSubgroupLocalInvocationId"
2021

2122
; CHECK-DAG: OpDecorate %[[#NW]] BuiltIn NumWorkgroups
2223
; CHECK-DAG: OpDecorate %[[#WS]] BuiltIn WorkgroupSize
@@ -35,6 +36,33 @@
3536
; CHECK-DAG: OpDecorate %[[#NES]] BuiltIn NumEnqueuedSubgroups
3637
; CHECK-DAG: OpDecorate %[[#SI]] BuiltIn SubgroupId
3738
; CHECK-DAG: OpDecorate %[[#SLII]] BuiltIn SubgroupLocalInvocationId
39+
40+
; CHECK-DAG: %[[#SizeT:]] = OpTypeInt 64 0
41+
; CHECK-DAG: %[[#Int32:]] = OpTypeInt 32 0
42+
; CHECK-DAG: %[[#SizeTPtr:]] = OpTypePointer Input %[[#SizeT]]
43+
; CHECK-DAG: %[[#Int32Ptr:]] = OpTypePointer Input %[[#Int32]]
44+
45+
; CHECK-DAG: %[[#GLI]] = OpVariable %[[#SizeTPtr]] Input
46+
; CHECK-DAG: %[[#LLII]] = OpVariable %[[#SizeTPtr]] Input
47+
; CHECK-DAG: %[[#WD]] = OpVariable %[[#Int32Ptr]] Input
48+
; CHECK-DAG: %[[#SS]] = OpVariable %[[#Int32Ptr]] Input
49+
; CHECK-DAG: %[[#SMS]] = OpVariable %[[#Int32Ptr]] Input
50+
; CHECK-DAG: %[[#NS]] = OpVariable %[[#Int32Ptr]] Input
51+
; CHECK-DAG: %[[#NES]] = OpVariable %[[#Int32Ptr]] Input
52+
; CHECK-DAG: %[[#SI]] = OpVariable %[[#Int32Ptr]] Input
53+
; CHECK-DAG: %[[#SLII]] = OpVariable %[[#Int32Ptr]] Input
54+
55+
; CHECK: OpFunction
56+
; CHECK: %[[#]] = OpLoad %[[#SizeT]] %[[#GLI]]
57+
; CHECK: %[[#]] = OpLoad %[[#SizeT]] %[[#LLII]]
58+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#WD]]
59+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SS]]
60+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SMS]]
61+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#NS]]
62+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#NES]]
63+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SI]]
64+
; CHECK: %[[#]] = OpLoad %[[#Int32]] %[[#SLII]]
65+
3866
@__spirv_BuiltInWorkDim = external addrspace(1) global i32
3967
@__spirv_BuiltInGlobalSize = external addrspace(1) global <3 x i32>
4068
@__spirv_BuiltInGlobalInvocationId = external addrspace(1) global <3 x i32>
@@ -55,5 +83,24 @@
5583

5684
define spir_kernel void @_Z1wv() {
5785
entry:
86+
%r1 = tail call spir_func i64 @get_global_linear_id()
87+
%r2 = tail call spir_func i64 @get_local_linear_id()
88+
%r3 = tail call spir_func i32 @get_work_dim()
89+
%r4 = tail call spir_func i32 @get_sub_group_size()
90+
%r5 = tail call spir_func i32 @get_max_sub_group_size()
91+
%r6 = tail call spir_func i32 @get_num_sub_groups()
92+
%r7 = tail call spir_func i32 @get_enqueued_num_sub_groups()
93+
%r8 = tail call spir_func i32 @get_sub_group_id()
94+
%r9 = tail call spir_func i32 @get_sub_group_local_id()
5895
ret void
5996
}
97+
98+
declare spir_func i64 @get_global_linear_id()
99+
declare spir_func i64 @get_local_linear_id()
100+
declare spir_func i32 @get_work_dim()
101+
declare spir_func i32 @get_sub_group_size()
102+
declare spir_func i32 @get_max_sub_group_size()
103+
declare spir_func i32 @get_num_sub_groups()
104+
declare spir_func i32 @get_enqueued_num_sub_groups()
105+
declare spir_func i32 @get_sub_group_id()
106+
declare spir_func i32 @get_sub_group_local_id()

llvm/test/CodeGen/SPIRV/transcoding/builtin_vars.ll

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
1+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
22
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
33

4-
; CHECK-SPIRV: OpDecorate %[[#Id:]] BuiltIn GlobalLinearId
5-
; CHECK-SPIRV: %[[#Id:]] = OpVariable %[[#]]
4+
; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
5+
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
6+
7+
; CHECK: OpDecorate %[[#Id:]] BuiltIn GlobalLinearId
8+
; CHECK: %[[#Id:]] = OpVariable %[[#]]
69

710
@__spirv_BuiltInGlobalLinearId = external addrspace(1) global i32
811

llvm/test/CodeGen/SPIRV/transcoding/spirv-types.ll

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,61 @@ define spir_func void @test_sampler(target("spirv.Image", float, 1, 1, 0, 0, 0,
8585
}
8686

8787
declare spir_func target("spirv.Image", float, 1, 1, 0, 0, 0, 0, 0) @_Z20__spirv_SampledImagePU3AS1K34__spirv_Image__float_1_1_0_0_0_0_0PU3AS1K15__spirv_Sampler(target("spirv.Image", float, 1, 1, 0, 0, 0, 0, 0), target("spirv.Sampler"))
88-
8988
declare spir_func <4 x float> @_Z38__spirv_ImageSampleExplicitLod_Rfloat4PU3AS120__spirv_SampledImageDv4_iif(target("spirv.Image", float, 1, 1, 0, 0, 0, 0, 0), <4 x i32>, i32, float)
89+
90+
; CHECK-SPIRV: %[[#]] = OpImageRead
91+
; CHECK-SPIRV: %[[#]] = OpImageRead
92+
; CHECK-SPIRV: %[[#]] = OpImageRead
93+
; CHECK-SPIRV: %[[#]] = OpImageRead
94+
; CHECK-SPIRV: %[[#]] = OpImageRead
95+
; CHECK-SPIRV: %[[#]] = OpImageRead
96+
; CHECK-SPIRV: %[[#]] = OpImageRead
97+
; CHECK-SPIRV: %[[#]] = OpImageSampleExplicitLod
98+
99+
define dso_local spir_kernel void @reads() {
100+
%1 = tail call spir_func i32 @_Z17__spirv_ImageReadIi14ocl_image3d_roDv4_iET_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) poison, <4 x i32> zeroinitializer)
101+
%2 = tail call spir_func <2 x i32> @_Z17__spirv_ImageReadIDv2_i14ocl_image2d_roS0_ET_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0) poison, <2 x i32> zeroinitializer)
102+
%3 = tail call spir_func <4 x i32> @_Z17__spirv_ImageReadIDv4_j14ocl_image3d_roDv4_iET_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) poison, <4 x i32> zeroinitializer)
103+
%4 = tail call spir_func signext i16 @_Z17__spirv_ImageReadIs14ocl_image1d_roiET_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0) poison, i32 0)
104+
%5 = tail call spir_func zeroext i16 @_Z17__spirv_ImageReadIt14ocl_image3d_roDv4_iET_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) poison, <4 x i32> zeroinitializer)
105+
%6 = tail call spir_func <2 x float> @_Z17__spirv_ImageReadIDv2_f14ocl_image1d_roiET_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0) poison, i32 0)
106+
%7 = tail call spir_func half @_Z17__spirv_ImageReadIDF16_14ocl_image2d_roDv2_iET_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0) poison, <2 x i32> zeroinitializer)
107+
%8 = tail call spir_func <4 x i32> @_Z30__spirv_ImageSampleExplicitLodI32__spirv_SampledImage__image1d_roDv4_jfET0_T_T1_if(target("spirv.SampledImage", void, 0, 0, 0, 0, 0, 0, 0) poison, float 0.000000e+00, i32 2, float 0.000000e+00)
108+
ret void
109+
}
110+
111+
declare dso_local spir_func i32 @_Z17__spirv_ImageReadIi14ocl_image3d_roDv4_iET_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), <4 x i32>)
112+
declare dso_local spir_func <2 x i32> @_Z17__spirv_ImageReadIDv2_i14ocl_image2d_roS0_ET_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0), <2 x i32>)
113+
declare dso_local spir_func <4 x i32> @_Z17__spirv_ImageReadIDv4_j14ocl_image3d_roDv4_iET_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), <4 x i32>)
114+
declare dso_local spir_func signext i16 @_Z17__spirv_ImageReadIs14ocl_image1d_roiET_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0), i32)
115+
declare dso_local spir_func zeroext i16 @_Z17__spirv_ImageReadIt14ocl_image3d_roDv4_iET_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0), <4 x i32>)
116+
declare dso_local spir_func <2 x float> @_Z17__spirv_ImageReadIDv2_f14ocl_image1d_roiET_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0), i32)
117+
declare dso_local spir_func half @_Z17__spirv_ImageReadIDF16_14ocl_image2d_roDv2_iET_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0), <2 x i32>)
118+
declare dso_local spir_func <4 x i32> @_Z30__spirv_ImageSampleExplicitLodI32__spirv_SampledImage__image1d_roDv4_jfET0_T_T1_if(target("spirv.SampledImage", void, 0, 0, 0, 0, 0, 0, 0), float noundef, i32 noundef, float noundef)
119+
120+
; CHECK-SPIRV: OpImageWrite
121+
; CHECK-SPIRV: OpImageWrite
122+
; CHECK-SPIRV: OpImageWrite
123+
; CHECK-SPIRV: OpImageWrite
124+
; CHECK-SPIRV: OpImageWrite
125+
; CHECK-SPIRV: OpImageWrite
126+
; CHECK-SPIRV: OpImageWrite
127+
128+
define dso_local spir_kernel void @writes() {
129+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image3d_woDv4_iiEvT_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 1) poison, <4 x i32> zeroinitializer, i32 zeroinitializer)
130+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image2d_woDv2_iS1_EvT_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1) poison, <2 x i32> zeroinitializer, <2 x i32> zeroinitializer)
131+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image3d_woDv4_iDv4_jEvT_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 1) poison, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer)
132+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image1d_woisEvT_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 1) poison, i32 0, i16 signext 0)
133+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image3d_woDv4_itEvT_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 1) poison, <4 x i32> zeroinitializer, i16 zeroext 0)
134+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image1d_woiDv2_fEvT_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 1) poison, i32 0, <2 x float> zeroinitializer)
135+
call spir_func void @_Z18__spirv_ImageWriteI14ocl_image2d_woDv2_iDF16_EvT_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1) poison, <2 x i32> zeroinitializer, half zeroinitializer)
136+
ret void
137+
}
138+
139+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image3d_woDv4_iiEvT_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 1), <4 x i32>, i32)
140+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image2d_woDv2_iS1_EvT_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1), <2 x i32>, <2 x i32>)
141+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image3d_woDv4_iDv4_jEvT_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 1), <4 x i32>, <4 x i32>)
142+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image1d_woisEvT_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 1), i32, i16 signext)
143+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image3d_woDv4_itEvT_T0_T1_(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 1), <4 x i32>, i16 zeroext)
144+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image1d_woiDv2_fEvT_T0_T1_(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 1), i32, <2 x float>)
145+
declare dso_local spir_func void @_Z18__spirv_ImageWriteI14ocl_image2d_woDv2_iDF16_EvT_T0_T1_(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 1), <2 x i32>, half)

0 commit comments

Comments
 (0)