@@ -16,6 +16,14 @@ define <2 x double> @load_zeromask(ptr %ptr, <2 x double> %passthru) {
16
16
ret <2 x double > %res
17
17
}
18
18
19
+ define <2 x double > @load_zero_withpoison_mask (ptr %ptr , <2 x double > %passthru ) {
20
+ ; CHECK-LABEL: @load_zero_withpoison_mask(
21
+ ; CHECK-NEXT: ret <2 x double> [[PASSTHRU:%.*]]
22
+ ;
23
+ %res = call <2 x double > @llvm.masked.load.v2f64.p0 (ptr %ptr , i32 1 , <2 x i1 > <i1 0 , i1 poison>, <2 x double > %passthru )
24
+ ret <2 x double > %res
25
+ }
26
+
19
27
define <2 x double > @load_onemask (ptr %ptr , <2 x double > %passthru ) {
20
28
; CHECK-LABEL: @load_onemask(
21
29
; CHECK-NEXT: [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 2
@@ -150,6 +158,14 @@ define void @store_zeromask(ptr %ptr, <2 x double> %val) {
150
158
ret void
151
159
}
152
160
161
+ define void @store_poisonmask (ptr %ptr , <2 x double > %val ) {
162
+ ; CHECK-LABEL: @store_poisonmask(
163
+ ; CHECK-NEXT: ret void
164
+ ;
165
+ call void @llvm.masked.store.v2f64.p0 (<2 x double > %val , ptr %ptr , i32 4 , <2 x i1 > splat(i1 poison))
166
+ ret void
167
+ }
168
+
153
169
define void @store_onemask (ptr %ptr , <2 x double > %val ) {
154
170
; CHECK-LABEL: @store_onemask(
155
171
; CHECK-NEXT: store <2 x double> [[VAL:%.*]], ptr [[PTR:%.*]], align 4
@@ -159,6 +175,15 @@ define void @store_onemask(ptr %ptr, <2 x double> %val) {
159
175
ret void
160
176
}
161
177
178
+ define void @store_one_withpoison_mask (ptr %ptr , <2 x double > %val ) {
179
+ ; CHECK-LABEL: @store_one_withpoison_mask(
180
+ ; CHECK-NEXT: store <2 x double> [[VAL:%.*]], ptr [[PTR:%.*]], align 4
181
+ ; CHECK-NEXT: ret void
182
+ ;
183
+ call void @llvm.masked.store.v2f64.p0 (<2 x double > %val , ptr %ptr , i32 4 , <2 x i1 > <i1 1 , i1 poison>)
184
+ ret void
185
+ }
186
+
162
187
define void @store_demandedelts (ptr %ptr , double %val ) {
163
188
; CHECK-LABEL: @store_demandedelts(
164
189
; CHECK-NEXT: [[VALVEC1:%.*]] = insertelement <2 x double> poison, double [[VAL:%.*]], i64 0
@@ -189,6 +214,13 @@ define <2 x double> @gather_zeromask(<2 x ptr> %ptrs, <2 x double> %passthru) {
189
214
ret <2 x double > %res
190
215
}
191
216
217
+ define <2 x double > @gather_zero_withpoison_mask (<2 x ptr > %ptrs , <2 x double > %passthru ) {
218
+ ; CHECK-LABEL: @gather_zero_withpoison_mask(
219
+ ; CHECK-NEXT: ret <2 x double> [[PASSTHRU:%.*]]
220
+ ;
221
+ %res = call <2 x double > @llvm.masked.gather.v2f64.v2p0 (<2 x ptr > %ptrs , i32 4 , <2 x i1 > <i1 0 , i1 poison>, <2 x double > %passthru )
222
+ ret <2 x double > %res
223
+ }
192
224
193
225
define <2 x double > @gather_onemask (<2 x ptr > %ptrs , <2 x double > %passthru ) {
194
226
; CHECK-LABEL: @gather_onemask(
@@ -199,6 +231,15 @@ define <2 x double> @gather_onemask(<2 x ptr> %ptrs, <2 x double> %passthru) {
199
231
ret <2 x double > %res
200
232
}
201
233
234
+ define <2 x double > @gather_one_withpoisonmask (<2 x ptr > %ptrs , <2 x double > %passthru ) {
235
+ ; CHECK-LABEL: @gather_one_withpoisonmask(
236
+ ; CHECK-NEXT: [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS:%.*]], i32 4, <2 x i1> <i1 true, i1 poison>, <2 x double> [[PASSTHRU:%.*]])
237
+ ; CHECK-NEXT: ret <2 x double> [[RES]]
238
+ ;
239
+ %res = call <2 x double > @llvm.masked.gather.v2f64.v2p0 (<2 x ptr > %ptrs , i32 4 , <2 x i1 > <i1 true , i1 poison>, <2 x double > %passthru )
240
+ ret <2 x double > %res
241
+ }
242
+
202
243
define <4 x double > @gather_lane2 (ptr %base , double %pt ) {
203
244
; CHECK-LABEL: @gather_lane2(
204
245
; CHECK-NEXT: [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <4 x i64> <i64 poison, i64 poison, i64 2, i64 poison>
@@ -257,6 +298,23 @@ define void @scatter_zeromask(<2 x ptr> %ptrs, <2 x double> %val) {
257
298
ret void
258
299
}
259
300
301
+ define void @scatter_zero_withpoison_mask (<2 x ptr > %ptrs , <2 x double > %val ) {
302
+ ; CHECK-LABEL: @scatter_zero_withpoison_mask(
303
+ ; CHECK-NEXT: ret void
304
+ ;
305
+ call void @llvm.masked.scatter.v2f64.v2p0 (<2 x double > %val , <2 x ptr > %ptrs , i32 8 , <2 x i1 > <i1 0 , i1 poison>)
306
+ ret void
307
+ }
308
+
309
+ define void @scatter_one_withpoison_mask (<2 x ptr > %ptrs , <2 x double > %val ) {
310
+ ; CHECK-LABEL: @scatter_one_withpoison_mask(
311
+ ; CHECK-NEXT: call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> [[VAL:%.*]], <2 x ptr> [[PTRS:%.*]], i32 8, <2 x i1> <i1 true, i1 poison>)
312
+ ; CHECK-NEXT: ret void
313
+ ;
314
+ call void @llvm.masked.scatter.v2f64.v2p0 (<2 x double > %val , <2 x ptr > %ptrs , i32 8 , <2 x i1 > <i1 1 , i1 poison>)
315
+ ret void
316
+ }
317
+
260
318
define void @scatter_demandedelts (ptr %ptr , double %val ) {
261
319
; CHECK-LABEL: @scatter_demandedelts(
262
320
; CHECK-NEXT: [[PTRS:%.*]] = getelementptr double, ptr [[PTR:%.*]], <2 x i64> <i64 0, i64 poison>
0 commit comments