@@ -255,6 +255,38 @@ entry:
255
255
ret void
256
256
}
257
257
258
+ ;----- Test4: IR contains all-zero GEP instructions in parameter use-def chains
259
+ ; Based on Test2.
260
+ define dso_local spir_func void @_Z23callee__sret__x_param_x1 (ptr addrspace (4 ) noalias sret (%"class.sycl::_V1::ext::intel::esimd::simd.2" ) align 32 %agg.result , i32 noundef %i , ptr noundef %x , i32 noundef %j ) local_unnamed_addr #3 !sycl_explicit_simd !8 !intel_reqd_sub_group_size !9 {
261
+ ; CHECK: define dso_local spir_func <8 x i32> @_Z23callee__sret__x_param_x1(i32 noundef %{{.*}}, <8 x i32> %{{.*}}, i32 noundef %{{.*}})
262
+ entry:
263
+ %x.ascast = addrspacecast ptr %x to ptr addrspace (4 )
264
+ %add = add nsw i32 %i , %j
265
+ %splat.splatinsert.i.i.i = insertelement <8 x i32 > poison, i32 %add , i64 0
266
+ %splat.splat.i.i.i = shufflevector <8 x i32 > %splat.splatinsert.i.i.i , <8 x i32 > poison, <8 x i32 > zeroinitializer
267
+ %M_data.i.i.i = getelementptr inbounds %"class.sycl::_V1::ext::intel::esimd::detail::simd_obj_impl.3" , ptr addrspace (4 ) %x.ascast , i64 0 , i32 0
268
+ %call.i.i.i1 = load <8 x i32 >, ptr addrspace (4 ) %M_data.i.i.i , align 32
269
+ %add.i.i.i.i.i = add <8 x i32 > %call.i.i.i1 , %splat.splat.i.i.i
270
+ store <8 x i32 > %add.i.i.i.i.i , ptr addrspace (4 ) %agg.result , align 32
271
+ ret void
272
+ }
273
+
274
+ ;----- Test4 caller.
275
+ ; Function Attrs: convergent noinline norecurse
276
+ define dso_local spir_func void @_Z21test__sret__x_param_x1 (ptr addrspace (4 ) noalias sret (%"class.sycl::_V1::ext::intel::esimd::simd.2" ) align 32 %agg.result , ptr noundef %x ) local_unnamed_addr #3 !sycl_explicit_simd !8 !intel_reqd_sub_group_size !9 {
277
+ ; CHECK: define dso_local spir_func <8 x i32> @_Z21test__sret__x_param_x1(<8 x i32> %{{.*}})
278
+ entry:
279
+ %agg.tmp = alloca %"class.sycl::_V1::ext::intel::esimd::simd.2" , align 32
280
+ %agg.tmp.ascast = addrspacecast ptr %agg.tmp to ptr addrspace (4 )
281
+ %x.ascast = addrspacecast ptr %x to ptr addrspace (4 )
282
+ %M_data.i.i.i = getelementptr inbounds %"class.sycl::_V1::ext::intel::esimd::detail::simd_obj_impl.3" , ptr addrspace (4 ) %x.ascast , i64 0 , i32 0
283
+ %call.i.i.i1 = load <8 x i32 >, ptr addrspace (4 ) %M_data.i.i.i , align 32
284
+ store <8 x i32 > %call.i.i.i1 , ptr addrspace (4 ) %agg.tmp.ascast , align 32
285
+ call spir_func void @_Z23callee__sret__x_param_x1 (ptr addrspace (4 ) sret (%"class.sycl::_V1::ext::intel::esimd::simd.2" ) align 32 %agg.result , i32 noundef 2 , ptr noundef nonnull %agg.tmp , i32 noundef 1 ) #7
286
+ ; CHECK: %{{.*}} = call spir_func <8 x i32> @_Z23callee__sret__x_param_x1(i32 2, <8 x i32> %{{.*}}, i32 1)
287
+ ret void
288
+ }
289
+
258
290
attributes #0 = { convergent noinline norecurse "frame-pointer" ="all" "min-legal-vector-width" ="512" "no-trapping-math" ="true" "stack-protector-buffer-size" ="8" "sycl-module-id" ="../opaque_ptr.cpp" }
259
291
attributes #1 = { alwaysinline convergent "frame-pointer" ="all" "no-trapping-math" ="true" "stack-protector-buffer-size" ="8" }
260
292
attributes #2 = { convergent noinline norecurse "frame-pointer" ="all" "min-legal-vector-width" ="12288" "no-trapping-math" ="true" "stack-protector-buffer-size" ="8" "sycl-module-id" ="../opaque_ptr.cpp" }
0 commit comments