27
27
%class.specialization_id.6 = type { %struct.MArrayConst3 }
28
28
%struct.MArrayConst4 = type { [2 x [2 x [3 x i32 ]]] }
29
29
%class.specialization_id.7 = type { %struct.MArrayConst4 }
30
+ %class.specialization_id.8 = type { %struct.ComposConst3 }
31
+ %struct.ComposConst3 = type { i32 , i32 , %struct.myConst }
30
32
31
33
@id_half = dso_local global %class.specialization_id { half 0xH4000 }, align 8
32
34
@id_int = dso_local global %class.specialization_id.0 { i32 42 }, align 4
37
39
@id_marray2 = dso_local global %class.specialization_id.5 { %struct.MArrayConst2 { [3 x i32 ] [i32 1 , i32 2 , i32 3 ] } }, align 8
38
40
@id_marray3 = dso_local global %class.specialization_id.6 { %struct.MArrayConst3 { [3 x i64 ] [i64 1 , i64 2 , i64 3 ] } }, align 8
39
41
@id_marray4 = dso_local global %class.specialization_id.7 { %struct.MArrayConst4 { [2 x [2 x [3 x i32 ]]] [[2 x [3 x i32 ]] [[3 x i32 ] [i32 1 , i32 2 , i32 3 ], [3 x i32 ] [i32 1 , i32 2 , i32 3 ]], [2 x [3 x i32 ]] [[3 x i32 ] [i32 1 , i32 2 , i32 3 ], [3 x i32 ] [i32 1 , i32 2 , i32 3 ]]] } }, align 8
42
+ @id_compos3 = dso_local global %class.specialization_id.8 zeroinitializer , align 4
40
43
41
44
; check that the following globals are preserved: even though they are won't be
42
45
; used in the module anymore, they could still be referenced by debug info
51
54
@__builtin_unique_stable_name._Z27get_specialization_constantIL_Z6id_intE17specialization_idIiEiET1_v = private unnamed_addr constant [34 x i8 ] c "_ZTS14name_generatorIL_Z6id_intEE\00 " , align 1
52
55
@__builtin_unique_stable_name._Z27get_specialization_constantIL_Z9id_composE17specialization_idI11ComposConstES1_ET1_v = private unnamed_addr constant [37 x i8 ] c "_ZTS14name_generatorIL_Z9id_composEE\00 " , align 1
53
56
@__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_compos2E17specialization_idI12ComposConst2ES1_ET1_v = private unnamed_addr constant [39 x i8 ] c "_ZTS14name_generatorIL_Z10id_compos2EE\00 " , align 1
57
+ @__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_compos3E17specialization_idI12ComposConst3ES1_ET1_v = private unnamed_addr constant [39 x i8 ] c "_ZTS14name_generatorIL_Z10id_compos3EE\00 " , align 1
54
58
@__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_vectorE17specialization_idI11VectorConstES1_ET1_v = private unnamed_addr constant [38 x i8 ] c "_ZTS14name_generatorIL_Z10id_vectorEE\00 " , align 1
55
59
@__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_marrayE17specialization_idI11MArrayConstES1_ET1_v = private unnamed_addr constant [38 x i8 ] c "_ZTS14name_generatorIL_Z10id_marrayEE\00 " , align 1
56
60
@__builtin_unique_stable_name.id_marray2 = private unnamed_addr constant [39 x i8 ] c "_ZTS14name_generatorIL_Z10id_marray2EE\00 " , align 1
@@ -141,29 +145,46 @@ entry:
141
145
ret void
142
146
}
143
147
148
+ define void @test_zeroinit () {
149
+ %tmp = alloca %struct.ComposConst3 , align 4
150
+ %1 = bitcast %struct.ComposConst3* %tmp to i8*
151
+ ; CHECK-DEF: %[[GEP3:[0-9a-z]+]] = getelementptr i8, i8* null, i32 54
152
+ ; CHECK-DEF: %[[BITCAST3:[0-9a-z]+]] = bitcast i8* %[[GEP3]] to %struct.ComposConst3*
153
+ ; CHECK-DEF: %[[C3:[0-9a-z]+]] = load %struct.ComposConst3, %struct.ComposConst3* %[[BITCAST3]], align 4
154
+ ;
155
+ ; CHECK-RT: %[[#SE5:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID10:]], i32 0)
156
+ ; CHECK-RT: %[[#SE6:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID11:]], i32 0)
157
+ ; CHECK-RT: %[[#SE7:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID12:]], i32 0)
158
+ ; CHECK-RT: %[[#SE8:]] = call float @_Z20__spirv_SpecConstantif(i32 [[#SCID13:]], float 0.000000e+00)
159
+ ; CHECK-RT: %[[#SE9:]] = call %struct.myConst @_Z29__spirv_SpecConstantCompositeif_Rstruct.myConst(i32 %[[#SE7]], float %[[#SE8]])
160
+ ; CHECK-RT: call %struct.ComposConst3 @_Z29__spirv_SpecConstantCompositeiistruct.myConst_Rstruct.ComposConst3(i32 %[[#SE5]], i32 %[[#SE6]], %struct.myConst %[[#SE9]])
161
+ call void @_Z40__sycl_getComposite2020SpecConstantValueI12ComposConst3ET_PKcPvS4_ (%struct.ComposConst3* sret (%struct.ComposConst3 ) align 4 %tmp , i8* getelementptr inbounds ([39 x i8 ], [39 x i8 ]* @__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_compos3E17specialization_idI12ComposConst3ES1_ET1_v , i64 0 , i64 0 ), i8* bitcast (%class.specialization_id.8* @id_compos3 to i8* ), i8* null )
162
+ ret void
163
+ }
164
+
144
165
define void @test3 () {
145
166
%tmp = alloca %struct.VectorConst , align 8
146
167
%tmp1 = alloca %struct.MArrayConst , align 8
147
168
%tmp2 = alloca %struct.MArrayConst2 , align 8
148
169
%tmp3 = alloca %struct.MArrayConst3 , align 8
149
170
%tmp4 = alloca %struct.MArrayConst4 , align 8
150
171
%1 = bitcast %struct.VectorConst* %tmp to i8*
151
- ; CHECK-DEF: %[[GEP1:[0-9a-z]+]] = getelementptr i8, i8* null, i32 54
172
+ ; CHECK-DEF: %[[GEP1:[0-9a-z]+]] = getelementptr i8, i8* null, i32 70
152
173
; CHECK-DEF: %[[BITCAST1:[0-9a-z]+]] = bitcast i8* %[[GEP1]] to %struct.VectorConst*
153
174
; CHECK-DEF: %[[C1:[0-9a-z]+]] = load %struct.VectorConst, %struct.VectorConst* %[[BITCAST1]], align 8
154
175
;
155
- ; CHECK-RT: %[[#SE1:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID10 :]], i32 1)
156
- ; CHECK-RT: %[[#SE2:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID11 :]], i32 2)
176
+ ; CHECK-RT: %[[#SE1:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID14 :]], i32 1)
177
+ ; CHECK-RT: %[[#SE2:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID15 :]], i32 2)
157
178
; CHECK-RT: %[[#CE1:]] = call <2 x i32> @_Z29__spirv_SpecConstantCompositeii_RDv2_i(i32 %[[#SE1]], i32 %[[#SE2]])
158
179
; CHECK-RT: call %struct.VectorConst @_Z29__spirv_SpecConstantCompositeDv2_i_Rstruct.VectorConst(<2 x i32> %[[#CE1]])
159
180
call void @_Z40__sycl_getComposite2020SpecConstantValueI11VectorConstET_PKcPvS4_ (%struct.VectorConst* nonnull sret (%struct.VectorConst ) align 8 %tmp , i8* getelementptr inbounds ([38 x i8 ], [38 x i8 ]* @__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_vectorE17specialization_idI11VectorConstES1_ET1_v , i64 0 , i64 0 ), i8* bitcast (%class.specialization_id.3* @id_vector to i8* ), i8* null )
160
181
%2 = bitcast %struct.MArrayConst* %tmp1 to i8*
161
- ; CHECK-DEF: %[[GEP2:[0-9a-z]+]] = getelementptr i8, i8* null, i32 62
182
+ ; CHECK-DEF: %[[GEP2:[0-9a-z]+]] = getelementptr i8, i8* null, i32 78
162
183
; CHECK-DEF: %[[BITCAST2:[0-9a-z]+]] = bitcast i8* %[[GEP2]] to %struct.MArrayConst*
163
184
; CHECK-DEF: %[[C2:[0-9a-z]+]] = load %struct.MArrayConst, %struct.MArrayConst* %[[BITCAST2]], align 4
164
185
;
165
- ; CHECK-RT: %[[#SE1:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID12 :]], i32 1)
166
- ; CHECK-RT: %[[#SE2:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID13 :]], i32 2)
186
+ ; CHECK-RT: %[[#SE1:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID16 :]], i32 1)
187
+ ; CHECK-RT: %[[#SE2:]] = call i32 @_Z20__spirv_SpecConstantii(i32 [[#SCID17 :]], i32 2)
167
188
; CHECK-RT: %[[#CE1:]] = call [2 x i32] @_Z29__spirv_SpecConstantCompositeii_RA2_i(i32 %[[#SE1]], i32 %[[#SE2]])
168
189
; CHECK-RT: call %struct.MArrayConst @_Z29__spirv_SpecConstantCompositeA2_i_Rstruct.MArrayConst([2 x i32] %[[#CE1]])
169
190
call void @_Z40__sycl_getComposite2020SpecConstantValueI11MArrayConstET_PKcPvS4_ (%struct.MArrayConst* nonnull sret (%struct.MArrayConst ) align 8 %tmp1 , i8* getelementptr inbounds ([38 x i8 ], [38 x i8 ]* @__builtin_unique_stable_name._Z27get_specialization_constantIL_Z10id_marrayE17specialization_idI11MArrayConstES1_ET1_v , i64 0 , i64 0 ), i8* bitcast (%class.specialization_id.4* @id_marray to i8* ), i8* null )
@@ -194,6 +215,8 @@ declare dso_local void @_Z40__sycl_getComposite2020SpecConstantValueI11ComposCon
194
215
195
216
declare dso_local void @_Z40__sycl_getComposite2020SpecConstantValueI12ComposConst2ET_PKcPvS4_ (%struct.ComposConst2* sret (%struct.ComposConst2 ) align 8 , i8* , i8* , i8* ) local_unnamed_addr #2
196
217
218
+ declare dso_local void @_Z40__sycl_getComposite2020SpecConstantValueI12ComposConst3ET_PKcPvS4_ (%struct.ComposConst3* sret (%struct.ComposConst3 ) align 8 , i8* , i8* , i8* ) local_unnamed_addr #2
219
+
197
220
declare dso_local void @_Z40__sycl_getComposite2020SpecConstantValueI11VectorConstET_PKcPvS4_ (%struct.VectorConst* sret (%struct.VectorConst ) align 8 , i8* , i8* , i8* ) local_unnamed_addr #2
198
221
199
222
declare dso_local void @_Z40__sycl_getComposite2020SpecConstantValueI11MArrayConstET_PKcPvS4_ (%struct.MArrayConst* sret (%struct.MArrayConst ) align 8 , i8* , i8* , i8* ) local_unnamed_addr #2
@@ -209,9 +232,9 @@ attributes #1 = { argmemonly nofree nosync nounwind willreturn }
209
232
attributes #2 = { "denormal-fp-math" ="preserve-sign,preserve-sign" "denormal-fp-math-f32" ="ieee,ieee" "disable-tail-calls" ="false" "frame-pointer" ="none" "less-precise-fpmad" ="false" "no-infs-fp-math" ="true" "no-nans-fp-math" ="true" "no-signed-zeros-fp-math" ="true" "no-trapping-math" ="true" "stack-protector-buffer-size" ="8" "target-cpu" ="x86-64" "target-features" ="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu" ="generic" "unsafe-fp-math" ="true" "use-soft-float" ="false" }
210
233
attributes #3 = { nounwind }
211
234
212
- ; CHECK: !sycl.specialization-constants = !{![[#ID0:]], ![[#ID1:]], ![[#ID2:]], ![[#ID3:]], ![[#ID4:]], ![[#ID5:]]
235
+ ; CHECK: !sycl.specialization-constants = !{![[#ID0:]], ![[#ID1:]], ![[#ID2:]], ![[#ID3:]], ![[#ID_COMPOS3:]], ![[# ID4:]], ![[#ID5:]]
213
236
;
214
- ; CHECK-DEF: !sycl.specialization-constants-default-values = !{![[#ID4:]], ![[#ID5:]], ![[#ID6:]], ![[#ID7:]], ![[#ID8:]], ![[#ID9:]]
237
+ ; CHECK-DEF: !sycl.specialization-constants-default-values = !{![[#ID4:]], ![[#ID5:]], ![[#ID6:]], ![[#ID7:]], ![[#ID_COMPOS3_DEFAULT:]], ![[# ID8:]], ![[#ID9:]]
215
238
; CHECK-RT-NOT: !sycl.specialization-constants-default-values
216
239
;
217
240
; CHECK: ![[#ID0]] = !{!"_ZTS14name_generatorIL_Z9id_halfEE", i32 0, i32 0, i32 2}
@@ -221,6 +244,7 @@ attributes #3 = { nounwind }
221
244
;
222
245
; CHECK-DEF: ![[#ID2]] = !{!"_ZTS14name_generatorIL_Z9id_composEE", i32 2, i32 0, i32 24}
223
246
; CHECK-DEF: ![[#ID3]] = !{!"_ZTS14name_generatorIL_Z10id_compos2EE", i32 3, i32 0, i32 24
247
+ ; CHECK-DEF: ![[#ID_COMPOS3]] = !{!"_ZTS14name_generatorIL_Z10id_compos3EE", i32 4, i32 0, i32 16
224
248
;
225
249
; CHECK-RT: ![[#ID2]] = !{!"_ZTS14name_generatorIL_Z9id_composEE", i32 [[#SCID2]], i32 0, i32 4,
226
250
; CHECK-RT-SAME: i32 [[#SCID3]], i32 8, i32 8,
@@ -235,14 +259,15 @@ attributes #3 = { nounwind }
235
259
; CHECK-DEF: ![[#ID5]] = !{i32 42}
236
260
; CHECK-DEF: ![[#ID6]] = !{%struct.ComposConst { i32 1, double 2.000000e+00, %struct.myConst { i32 13, float 0x4020666660000000 } }}
237
261
; CHECK-DEF: ![[#ID7]] = !{%struct.ComposConst2 { i8 1, %struct.myConst { i32 52, float 0x40479999A0000000 }, double 2.000000e+00 }}
262
+ ; CHECK-DEF: ![[#ID_COMPOS3_DEFAULT]] = !{%struct.ComposConst3 zeroinitializer}
238
263
;
239
264
; CHECK-DEF: ![[#ID8]] = !{%struct.VectorConst { <2 x i32> <i32 1, i32 2> }}
240
265
; CHECK-DEF: ![[#ID9]] = !{%struct.MArrayConst { [2 x i32] [i32 1, i32 2] }}
241
266
;
242
- ; CHECK-RT: ![[#ID4]] = !{!"_ZTS14name_generatorIL_Z10id_vectorEE", i32 [[#SCID10 ]], i32 0, i32 4,
243
- ; CHECK-RT-SAME: i32 [[#SCID11 ]], i32 4, i32 4}
244
- ; CHECK-RT: ![[#ID5]] = !{!"_ZTS14name_generatorIL_Z10id_marrayEE", i32 [[#SCID12 ]], i32 0, i32 4,
245
- ; CHECK-RT-SAME: i32 [[#SCID13 ]], i32 4, i32 4}
267
+ ; CHECK-RT: ![[#ID4]] = !{!"_ZTS14name_generatorIL_Z10id_vectorEE", i32 [[#SCID14 ]], i32 0, i32 4,
268
+ ; CHECK-RT-SAME: i32 [[#SCID15 ]], i32 4, i32 4}
269
+ ; CHECK-RT: ![[#ID5]] = !{!"_ZTS14name_generatorIL_Z10id_marrayEE", i32 [[#SCID16 ]], i32 0, i32 4,
270
+ ; CHECK-RT-SAME: i32 [[#SCID17 ]], i32 4, i32 4}
246
271
247
272
; CHECK-PROPS: [SYCL/specialization constants]
248
273
; CHECK-PROPS: _ZTS14name_generatorIL_Z9id_halfEE=2|
0 commit comments