@@ -84,4 +84,58 @@ entry:
8484 ret void
8585}
8686
87+ define amdgpu_kernel void @memset_array_ptr_alloca (ptr %out ) {
88+ ; CHECK-LABEL: @memset_array_ptr_alloca(
89+ ; CHECK-NEXT: store i64 0, ptr [[OUT:%.*]], align 8
90+ ; CHECK-NEXT: ret void
91+ ;
92+ %alloca = alloca [6 x ptr ], align 16 , addrspace (5 )
93+ call void @llvm.memset.p5.i64 (ptr addrspace (5 ) %alloca , i8 0 , i64 48 , i1 false )
94+ %load = load i64 , ptr addrspace (5 ) %alloca
95+ store i64 %load , ptr %out
96+ ret void
97+ }
98+
99+ define amdgpu_kernel void @memset_vector_ptr_alloca (ptr %out ) {
100+ ; CHECK-LABEL: @memset_vector_ptr_alloca(
101+ ; CHECK-NEXT: store i64 0, ptr [[OUT:%.*]], align 8
102+ ; CHECK-NEXT: ret void
103+ ;
104+ %alloca = alloca <6 x ptr >, align 16 , addrspace (5 )
105+ call void @llvm.memset.p5.i64 (ptr addrspace (5 ) %alloca , i8 0 , i64 48 , i1 false )
106+ %load = load i64 , ptr addrspace (5 ) %alloca
107+ store i64 %load , ptr %out
108+ ret void
109+ }
110+
111+ define amdgpu_kernel void @memset_array_of_array_ptr_alloca (ptr %out ) {
112+ ; CHECK-LABEL: @memset_array_of_array_ptr_alloca(
113+ ; CHECK-NEXT: [[ALLOCA:%.*]] = alloca [2 x [3 x ptr]], align 16, addrspace(5)
114+ ; CHECK-NEXT: call void @llvm.memset.p5.i64(ptr addrspace(5) [[ALLOCA]], i8 0, i64 48, i1 false)
115+ ; CHECK-NEXT: [[LOAD:%.*]] = load i64, ptr addrspace(5) [[ALLOCA]], align 8
116+ ; CHECK-NEXT: store i64 [[LOAD]], ptr [[OUT:%.*]], align 8
117+ ; CHECK-NEXT: ret void
118+ ;
119+ %alloca = alloca [2 x [3 x ptr ]], align 16 , addrspace (5 )
120+ call void @llvm.memset.p5.i64 (ptr addrspace (5 ) %alloca , i8 0 , i64 48 , i1 false )
121+ %load = load i64 , ptr addrspace (5 ) %alloca
122+ store i64 %load , ptr %out
123+ ret void
124+ }
125+
126+ define amdgpu_kernel void @memset_array_of_vec_ptr_alloca (ptr %out ) {
127+ ; CHECK-LABEL: @memset_array_of_vec_ptr_alloca(
128+ ; CHECK-NEXT: [[ALLOCA:%.*]] = alloca [2 x <3 x ptr>], align 16, addrspace(5)
129+ ; CHECK-NEXT: call void @llvm.memset.p5.i64(ptr addrspace(5) [[ALLOCA]], i8 0, i64 48, i1 false)
130+ ; CHECK-NEXT: [[LOAD:%.*]] = load i64, ptr addrspace(5) [[ALLOCA]], align 8
131+ ; CHECK-NEXT: store i64 [[LOAD]], ptr [[OUT:%.*]], align 8
132+ ; CHECK-NEXT: ret void
133+ ;
134+ %alloca = alloca [2 x <3 x ptr >], align 16 , addrspace (5 )
135+ call void @llvm.memset.p5.i64 (ptr addrspace (5 ) %alloca , i8 0 , i64 48 , i1 false )
136+ %load = load i64 , ptr addrspace (5 ) %alloca
137+ store i64 %load , ptr %out
138+ ret void
139+ }
140+
87141declare void @llvm.memset.p5.i64 (ptr addrspace (5 ) nocapture writeonly , i8 , i64 , i1 immarg)
0 commit comments