@@ -5,6 +5,7 @@ source_filename = "<stdin>"
55target datalayout = "e-i64:64-i128:128-v16:16-v32:32-n16:32:64"
66target triple = "nvptx64-nvidia-cuda"
77
8+ ; COMMON: [[OPAQUE_C:.*]] = type { [2 x <2 x i64>], i64, i32, i8 }
89%struct.S = type { i32 , i32 }
910
1011; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
@@ -88,8 +89,8 @@ define dso_local void @read_only_gep_asc0(ptr nocapture noundef writeonly %out,
8889; COMMON-NEXT: [[ENTRY:.*:]]
8990; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
9091; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
91- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
92- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
92+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
93+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
9394; COMMON-NEXT: [[OUT1:%.*]] = addrspacecast ptr [[OUT]] to ptr addrspace(1)
9495; COMMON-NEXT: [[OUT2:%.*]] = addrspacecast ptr addrspace(1) [[OUT1]] to ptr
9596; COMMON-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[S3]], i64 4
@@ -115,8 +116,8 @@ define dso_local void @escape_ptr(ptr nocapture noundef readnone %out, ptr nound
115116; COMMON-NEXT: [[ENTRY:.*:]]
116117; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
117118; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
118- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
119- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
119+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
120+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
120121; COMMON-NEXT: [[OUT1:%.*]] = addrspacecast ptr [[OUT]] to ptr addrspace(1)
121122; COMMON-NEXT: [[OUT2:%.*]] = addrspacecast ptr addrspace(1) [[OUT1]] to ptr
122123; COMMON-NEXT: call void @_Z6escapePv(ptr noundef nonnull [[S3]])
@@ -134,8 +135,8 @@ define dso_local void @escape_ptr_gep(ptr nocapture noundef readnone %out, ptr n
134135; COMMON-NEXT: [[ENTRY:.*:]]
135136; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
136137; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
137- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
138- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
138+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
139+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
139140; COMMON-NEXT: [[OUT1:%.*]] = addrspacecast ptr [[OUT]] to ptr addrspace(1)
140141; COMMON-NEXT: [[OUT2:%.*]] = addrspacecast ptr addrspace(1) [[OUT1]] to ptr
141142; COMMON-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[S3]], i64 4
@@ -155,8 +156,8 @@ define dso_local void @escape_ptr_store(ptr nocapture noundef writeonly %out, pt
155156; COMMON-NEXT: [[ENTRY:.*:]]
156157; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
157158; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
158- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
159- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
159+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
160+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
160161; COMMON-NEXT: [[OUT1:%.*]] = addrspacecast ptr [[OUT]] to ptr addrspace(1)
161162; COMMON-NEXT: [[OUT2:%.*]] = addrspacecast ptr addrspace(1) [[OUT1]] to ptr
162163; COMMON-NEXT: store ptr [[S3]], ptr [[OUT2]], align 8
@@ -174,8 +175,8 @@ define dso_local void @escape_ptr_gep_store(ptr nocapture noundef writeonly %out
174175; COMMON-NEXT: [[ENTRY:.*:]]
175176; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
176177; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
177- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
178- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
178+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
179+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
179180; COMMON-NEXT: [[OUT1:%.*]] = addrspacecast ptr [[OUT]] to ptr addrspace(1)
180181; COMMON-NEXT: [[OUT2:%.*]] = addrspacecast ptr addrspace(1) [[OUT1]] to ptr
181182; COMMON-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[S3]], i64 4
@@ -195,8 +196,8 @@ define dso_local void @escape_ptrtoint(ptr nocapture noundef writeonly %out, ptr
195196; COMMON-NEXT: [[ENTRY:.*:]]
196197; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
197198; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
198- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
199- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
199+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
200+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
200201; COMMON-NEXT: [[OUT1:%.*]] = addrspacecast ptr [[OUT]] to ptr addrspace(1)
201202; COMMON-NEXT: [[OUT2:%.*]] = addrspacecast ptr addrspace(1) [[OUT1]] to ptr
202203; COMMON-NEXT: [[I:%.*]] = ptrtoint ptr [[S3]] to i64
@@ -232,8 +233,8 @@ define dso_local void @memcpy_to_param(ptr nocapture noundef readonly %in, ptr n
232233; COMMON-NEXT: [[ENTRY:.*:]]
233234; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
234235; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
235- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
236- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
236+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
237+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
237238; COMMON-NEXT: [[IN1:%.*]] = addrspacecast ptr [[IN]] to ptr addrspace(1)
238239; COMMON-NEXT: [[IN2:%.*]] = addrspacecast ptr addrspace(1) [[IN1]] to ptr
239240; COMMON-NEXT: tail call void @llvm.memcpy.p0.p0.i64(ptr [[S3]], ptr [[IN2]], i64 16, i1 true)
@@ -251,8 +252,8 @@ define dso_local void @copy_on_store(ptr nocapture noundef readonly %in, ptr noc
251252; COMMON-NEXT: [[BB:.*:]]
252253; COMMON-NEXT: [[S3:%.*]] = alloca [[STRUCT_S]], align 4
253254; COMMON-NEXT: [[S4:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
254- ; COMMON-NEXT: [[S5:%.*]] = load [1 x i64] , ptr addrspace(101) [[S4]], align 4
255- ; COMMON-NEXT: store [1 x i64] [[S5]], ptr [[S3]], align 4
255+ ; COMMON-NEXT: [[S5:%.*]] = load i64, ptr addrspace(101) [[S4]], align 4
256+ ; COMMON-NEXT: store i64 [[S5]], ptr [[S3]], align 4
256257; COMMON-NEXT: [[IN1:%.*]] = addrspacecast ptr [[IN]] to ptr addrspace(1)
257258; COMMON-NEXT: [[IN2:%.*]] = addrspacecast ptr addrspace(1) [[IN1]] to ptr
258259; COMMON-NEXT: [[I:%.*]] = load i32, ptr [[IN2]], align 4
@@ -273,12 +274,12 @@ define void @test_select(ptr byval(i32) align 4 %input1, ptr byval(i32) %input2,
273274; SM_60-NEXT: [[OUT8:%.*]] = addrspacecast ptr addrspace(1) [[OUT7]] to ptr
274275; SM_60-NEXT: [[INPUT24:%.*]] = alloca i32, align 4
275276; SM_60-NEXT: [[INPUT25:%.*]] = addrspacecast ptr [[INPUT2]] to ptr addrspace(101)
276- ; SM_60-NEXT: [[INPUT26:%.*]] = load [1 x i32] , ptr addrspace(101) [[INPUT25]], align 4
277- ; SM_60-NEXT: store [1 x i32] [[INPUT26]], ptr [[INPUT24]], align 4
277+ ; SM_60-NEXT: [[INPUT26:%.*]] = load i32, ptr addrspace(101) [[INPUT25]], align 4
278+ ; SM_60-NEXT: store i32 [[INPUT26]], ptr [[INPUT24]], align 4
278279; SM_60-NEXT: [[INPUT11:%.*]] = alloca i32, align 4
279280; SM_60-NEXT: [[INPUT12:%.*]] = addrspacecast ptr [[INPUT1]] to ptr addrspace(101)
280- ; SM_60-NEXT: [[INPUT13:%.*]] = load [1 x i32] , ptr addrspace(101) [[INPUT12]], align 4
281- ; SM_60-NEXT: store [1 x i32] [[INPUT13]], ptr [[INPUT11]], align 4
281+ ; SM_60-NEXT: [[INPUT13:%.*]] = load i32, ptr addrspace(101) [[INPUT12]], align 4
282+ ; SM_60-NEXT: store i32 [[INPUT13]], ptr [[INPUT11]], align 4
282283; SM_60-NEXT: [[PTRNEW:%.*]] = select i1 [[COND]], ptr [[INPUT11]], ptr [[INPUT24]]
283284; SM_60-NEXT: [[VALLOADED:%.*]] = load i32, ptr [[PTRNEW]], align 4
284285; SM_60-NEXT: store i32 [[VALLOADED]], ptr [[OUT8]], align 4
@@ -313,12 +314,12 @@ define void @test_select_write(ptr byval(i32) align 4 %input1, ptr byval(i32) %i
313314; COMMON-NEXT: [[OUT8:%.*]] = addrspacecast ptr addrspace(1) [[OUT7]] to ptr
314315; COMMON-NEXT: [[INPUT24:%.*]] = alloca i32, align 4
315316; COMMON-NEXT: [[INPUT25:%.*]] = addrspacecast ptr [[INPUT2]] to ptr addrspace(101)
316- ; COMMON-NEXT: [[INPUT26:%.*]] = load [1 x i32] , ptr addrspace(101) [[INPUT25]], align 4
317- ; COMMON-NEXT: store [1 x i32] [[INPUT26]], ptr [[INPUT24]], align 4
317+ ; COMMON-NEXT: [[INPUT26:%.*]] = load i32, ptr addrspace(101) [[INPUT25]], align 4
318+ ; COMMON-NEXT: store i32 [[INPUT26]], ptr [[INPUT24]], align 4
318319; COMMON-NEXT: [[INPUT11:%.*]] = alloca i32, align 4
319320; COMMON-NEXT: [[INPUT12:%.*]] = addrspacecast ptr [[INPUT1]] to ptr addrspace(101)
320- ; COMMON-NEXT: [[INPUT13:%.*]] = load [1 x i32] , ptr addrspace(101) [[INPUT12]], align 4
321- ; COMMON-NEXT: store [1 x i32] [[INPUT13]], ptr [[INPUT11]], align 4
321+ ; COMMON-NEXT: [[INPUT13:%.*]] = load i32, ptr addrspace(101) [[INPUT12]], align 4
322+ ; COMMON-NEXT: store i32 [[INPUT13]], ptr [[INPUT11]], align 4
322323; COMMON-NEXT: [[PTRNEW:%.*]] = select i1 [[COND]], ptr [[INPUT11]], ptr [[INPUT24]]
323324; COMMON-NEXT: store i32 1, ptr [[PTRNEW]], align 4
324325; COMMON-NEXT: ret void
@@ -337,12 +338,12 @@ define void @test_phi(ptr byval(%struct.S) align 4 %input1, ptr byval(%struct.S)
337338; SM_60-NEXT: [[INOUT8:%.*]] = addrspacecast ptr addrspace(1) [[INOUT7]] to ptr
338339; SM_60-NEXT: [[INPUT24:%.*]] = alloca [[STRUCT_S]], align 8
339340; SM_60-NEXT: [[INPUT25:%.*]] = addrspacecast ptr [[INPUT2]] to ptr addrspace(101)
340- ; SM_60-NEXT: [[INPUT26:%.*]] = load [1 x i64] , ptr addrspace(101) [[INPUT25]], align 8
341- ; SM_60-NEXT: store [1 x i64] [[INPUT26]], ptr [[INPUT24]], align 8
341+ ; SM_60-NEXT: [[INPUT26:%.*]] = load i64, ptr addrspace(101) [[INPUT25]], align 8
342+ ; SM_60-NEXT: store i64 [[INPUT26]], ptr [[INPUT24]], align 8
342343; SM_60-NEXT: [[INPUT11:%.*]] = alloca [[STRUCT_S]], align 4
343344; SM_60-NEXT: [[INPUT12:%.*]] = addrspacecast ptr [[INPUT1]] to ptr addrspace(101)
344- ; SM_60-NEXT: [[INPUT13:%.*]] = load [1 x i64] , ptr addrspace(101) [[INPUT12]], align 4
345- ; SM_60-NEXT: store [1 x i64] [[INPUT13]], ptr [[INPUT11]], align 4
345+ ; SM_60-NEXT: [[INPUT13:%.*]] = load i64, ptr addrspace(101) [[INPUT12]], align 4
346+ ; SM_60-NEXT: store i64 [[INPUT13]], ptr [[INPUT11]], align 4
346347; SM_60-NEXT: br i1 [[COND]], label %[[FIRST:.*]], label %[[SECOND:.*]]
347348; SM_60: [[FIRST]]:
348349; SM_60-NEXT: [[PTR1:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[INPUT11]], i32 0, i32 0
@@ -402,12 +403,12 @@ define void @test_phi_write(ptr byval(%struct.S) align 4 %input1, ptr byval(%str
402403; COMMON-NEXT: [[BB:.*:]]
403404; COMMON-NEXT: [[INPUT24:%.*]] = alloca [[STRUCT_S]], align 8
404405; COMMON-NEXT: [[INPUT25:%.*]] = addrspacecast ptr [[INPUT2]] to ptr addrspace(101)
405- ; COMMON-NEXT: [[INPUT26:%.*]] = load [1 x i64] , ptr addrspace(101) [[INPUT25]], align 8
406- ; COMMON-NEXT: store [1 x i64] [[INPUT26]], ptr [[INPUT24]], align 8
406+ ; COMMON-NEXT: [[INPUT26:%.*]] = load i64, ptr addrspace(101) [[INPUT25]], align 8
407+ ; COMMON-NEXT: store i64 [[INPUT26]], ptr [[INPUT24]], align 8
407408; COMMON-NEXT: [[INPUT11:%.*]] = alloca [[STRUCT_S]], align 4
408409; COMMON-NEXT: [[INPUT12:%.*]] = addrspacecast ptr [[INPUT1]] to ptr addrspace(101)
409- ; COMMON-NEXT: [[INPUT13:%.*]] = load [1 x i64] , ptr addrspace(101) [[INPUT12]], align 4
410- ; COMMON-NEXT: store [1 x i64] [[INPUT13]], ptr [[INPUT11]], align 4
410+ ; COMMON-NEXT: [[INPUT13:%.*]] = load i64, ptr addrspace(101) [[INPUT12]], align 4
411+ ; COMMON-NEXT: store i64 [[INPUT13]], ptr [[INPUT11]], align 4
411412; COMMON-NEXT: br i1 [[COND]], label %[[FIRST:.*]], label %[[SECOND:.*]]
412413; COMMON: [[FIRST]]:
413414; COMMON-NEXT: [[PTR1:%.*]] = getelementptr inbounds [[STRUCT_S]], ptr [[INPUT11]], i32 0, i32 0
@@ -447,8 +448,27 @@ define dso_local void @padding(ptr nocapture noundef readnone %out, ptr noundef
447448; COMMON-NEXT: [[ENTRY:.*:]]
448449; COMMON-NEXT: [[S1:%.*]] = alloca [[UNION_U]], align 4
449450; COMMON-NEXT: [[S2:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
450- ; COMMON-NEXT: [[S3:%.*]] = load [1 x i64], ptr addrspace(101) [[S2]], align 4
451- ; COMMON-NEXT: store [1 x i64] [[S3]], ptr [[S1]], align 4
451+ ; COMMON-NEXT: [[S3:%.*]] = load i64, ptr addrspace(101) [[S2]], align 4
452+ ; COMMON-NEXT: store i64 [[S3]], ptr [[S1]], align 4
453+ ; COMMON-NEXT: call void @_Z6escapePv(ptr noundef nonnull [[S1]])
454+ ; COMMON-NEXT: ret void
455+ ;
456+ entry:
457+ call void @_Z6escapePv (ptr noundef nonnull %s ) #0
458+ ret void
459+ }
460+
461+ %struct.C = type { [45 x i8 ] }
462+
463+ ; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
464+ define dso_local void @coalescing (ptr nocapture noundef readnone %out , ptr noundef byval (%struct.C ) align 4 %s ) local_unnamed_addr #0 {
465+ ; COMMON-LABEL: define dso_local void @coalescing(
466+ ; COMMON-SAME: ptr nocapture noundef readnone [[OUT:%.*]], ptr noundef byval([[STRUCT_C:%.*]]) align 4 [[S:%.*]]) local_unnamed_addr #[[ATTR0]] {
467+ ; COMMON-NEXT: [[ENTRY:.*:]]
468+ ; COMMON-NEXT: [[S1:%.*]] = alloca [[STRUCT_C]], align 4
469+ ; COMMON-NEXT: [[S2:%.*]] = addrspacecast ptr [[S]] to ptr addrspace(101)
470+ ; COMMON-NEXT: [[S3:%.*]] = load [[OPAQUE_C]], ptr addrspace(101) [[S2]], align 4
471+ ; COMMON-NEXT: store [[OPAQUE_C]] [[S3]], ptr [[S1]], align 4
452472; COMMON-NEXT: call void @_Z6escapePv(ptr noundef nonnull [[S1]])
453473; COMMON-NEXT: ret void
454474;
0 commit comments