@@ -84,4 +84,58 @@ entry:
84
84
ret void
85
85
}
86
86
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
+
87
141
declare void @llvm.memset.p5.i64 (ptr addrspace (5 ) nocapture writeonly , i8 , i64 , i1 immarg)
0 commit comments