Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / InstSimplify / ptrmask.ll
blobdd83abfdeee464b1b07d82f6af92baa9ba41f16e
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
4 target datalayout = "p1:64:64:64:32"
6 declare ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) , i32)
7 declare ptr @llvm.ptrmask.p0.i64(ptr, i64)
9 declare <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) >, <2 x i32>)
10 declare <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr>, <2 x i64>)
12 define ptr @ptrmask_simplify_poison_mask(ptr %p) {
13 ; CHECK-LABEL: define ptr @ptrmask_simplify_poison_mask
14 ; CHECK-SAME: (ptr [[P:%.*]]) {
15 ; CHECK-NEXT:    ret ptr poison
17   %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 poison)
18   ret ptr %r
21 define <2 x ptr addrspace(1) > @ptrmask_simplify_poison_mask_vec(<2 x ptr addrspace(1) > %p) {
22 ; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_poison_mask_vec
23 ; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) {
24 ; CHECK-NEXT:    ret <2 x ptr addrspace(1)> poison
26   %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> poison)
27   ret <2 x ptr addrspace(1) > %r
30 define <2 x ptr addrspace(1) > @ptrmask_simplify_poison_and_zero_i32_vec_fail(<2 x ptr addrspace(1) > %p) {
31 ; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_poison_and_zero_i32_vec_fail
32 ; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) {
33 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr addrspace(1)> @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1)> [[P]], <2 x i32> <i32 undef, i32 0>)
34 ; CHECK-NEXT:    ret <2 x ptr addrspace(1)> [[R]]
36   %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> <i32 undef, i32 0>)
37   ret <2 x ptr addrspace(1) > %r
40 define <2 x ptr> @ptrmask_simplify_undef_and_ones_vec(<2 x ptr> %p) {
41 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_undef_and_ones_vec
42 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
43 ; CHECK-NEXT:    ret <2 x ptr> [[P]]
45   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 undef, i64 -1>)
46   ret <2 x ptr> %r
49 define <2 x ptr> @ptrmask_simplify_poison_and_ones_vec(<2 x ptr> %p) {
50 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_poison_and_ones_vec
51 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
52 ; CHECK-NEXT:    ret <2 x ptr> [[P]]
54   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 poison, i64 -1>)
55   ret <2 x ptr> %r
58 define <2 x ptr> @ptrmask_simplify_ones_vec(<2 x ptr> %p) {
59 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_ones_vec
60 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
61 ; CHECK-NEXT:    ret <2 x ptr> [[P]]
63   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -1, i64 -1>)
64   ret <2 x ptr> %r
67 define <2 x ptr addrspace(1) > @ptrmask_simplify_ones_i32_vec(<2 x ptr addrspace(1) > %p) {
68 ; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_ones_i32_vec
69 ; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) {
70 ; CHECK-NEXT:    ret <2 x ptr addrspace(1)> [[P]]
72   %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> <i32 -1, i32 -1>)
73   ret <2 x ptr addrspace(1) > %r
76 define ptr addrspace(1) @ptrmask_simplify_undef_mask(ptr addrspace(1) %p) {
77 ; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_undef_mask
78 ; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) {
79 ; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
81   %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 undef)
82   ret ptr addrspace(1) %r
85 define ptr @ptrmask_simplify_0_mask(ptr %p) {
86 ; CHECK-LABEL: define ptr @ptrmask_simplify_0_mask
87 ; CHECK-SAME: (ptr [[P:%.*]]) {
88 ; CHECK-NEXT:    [[R:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 0)
89 ; CHECK-NEXT:    ret ptr [[R]]
91   %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 0)
92   ret ptr %r
95 define ptr @ptrmask_simplify_1s_mask(ptr %p) {
96 ; CHECK-LABEL: define ptr @ptrmask_simplify_1s_mask
97 ; CHECK-SAME: (ptr [[P:%.*]]) {
98 ; CHECK-NEXT:    ret ptr [[P]]
100   %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -1)
101   ret ptr %r
104 define ptr addrspace(1) @ptrmask_simplify_1s_mask_i32(ptr addrspace(1) %p) {
105 ; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_1s_mask_i32
106 ; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) {
107 ; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
109   %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 -1)
110   ret ptr addrspace(1) %r
113 define ptr @ptrmask_simplify_poison_ptr(i64 %m) {
114 ; CHECK-LABEL: define ptr @ptrmask_simplify_poison_ptr
115 ; CHECK-SAME: (i64 [[M:%.*]]) {
116 ; CHECK-NEXT:    ret ptr poison
118   %r = call ptr @llvm.ptrmask.p0.i64(ptr poison, i64 %m)
119   ret ptr %r
122 define ptr addrspace(1) @ptrmask_simplify_undef_ptr(i32 %m) {
123 ; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_undef_ptr
124 ; CHECK-SAME: (i32 [[M:%.*]]) {
125 ; CHECK-NEXT:    ret ptr addrspace(1) null
127   %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) undef, i32 %m)
128   ret ptr addrspace(1) %r
131 define ptr @ptrmask_simplify_null_ptr(i64 %m) {
132 ; CHECK-LABEL: define ptr @ptrmask_simplify_null_ptr
133 ; CHECK-SAME: (i64 [[M:%.*]]) {
134 ; CHECK-NEXT:    ret ptr null
136   %r = call ptr @llvm.ptrmask.p0.i64(ptr null, i64 %m)
137   ret ptr %r
140 define ptr @ptrmask_simplify_ptrmask(ptr %p) {
141 ; CHECK-LABEL: define ptr @ptrmask_simplify_ptrmask
142 ; CHECK-SAME: (ptr [[P:%.*]]) {
143 ; CHECK-NEXT:    ret ptr [[P]]
145   %m = ptrtoint ptr %p to i64
146   %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m)
147   ret ptr %r
150 define ptr addrspace(1) @ptrmask_simplify_ptrmask_i32(ptr addrspace(1) %p) {
151 ; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_ptrmask_i32
152 ; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) {
153 ; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
155   %m = ptrtoint ptr addrspace(1) %p to i32
156   %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 %m)
157   ret ptr addrspace(1) %r
160 define ptr @ptrmask_simplify_aligned_unused(ptr align 64 %p) {
161 ; CHECK-LABEL: define ptr @ptrmask_simplify_aligned_unused
162 ; CHECK-SAME: (ptr align 64 [[P:%.*]]) {
163 ; CHECK-NEXT:    ret ptr [[P]]
165   %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -64)
166   ret ptr %r
169 define <2 x ptr> @ptrmask_simplify_aligned_unused_vec(<2 x ptr> align 128 %p) {
170 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_aligned_unused_vec
171 ; CHECK-SAME: (<2 x ptr> align 128 [[P:%.*]]) {
172 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -64>)
173 ; CHECK-NEXT:    ret <2 x ptr> [[R]]
175   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
176   ret <2 x ptr> %r
179 define <2 x ptr> @ptrmask_simplify_aligned_unused_vec_todo(<2 x ptr> align 128 %p) {
180 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_aligned_unused_vec_todo
181 ; CHECK-SAME: (<2 x ptr> align 128 [[P:%.*]]) {
182 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
183 ; CHECK-NEXT:    ret <2 x ptr> [[R]]
185   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
186   ret <2 x ptr> %r
189 define ptr addrspace(1) @ptrmask_simplify_aligned_unused_i32(ptr addrspace(1) align 64 %p) {
190 ; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_aligned_unused_i32
191 ; CHECK-SAME: (ptr addrspace(1) align 64 [[P:%.*]]) {
192 ; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
194   %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 -64)
195   ret ptr addrspace(1) %r
198 define ptr @ptrmask_simplify_known_unused(ptr %p) {
199 ; CHECK-LABEL: define ptr @ptrmask_simplify_known_unused
200 ; CHECK-SAME: (ptr [[P:%.*]]) {
201 ; CHECK-NEXT:    [[PM0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 -64)
202 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, ptr [[PM0]], i64 32
203 ; CHECK-NEXT:    ret ptr [[PGEP]]
205   %pm0 = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -64)
206   %pgep = getelementptr i8, ptr %pm0, i64 32
207   %r = call ptr @llvm.ptrmask.p0.i64(ptr %pgep, i64 -32)
208   ret ptr %r
211 define <2 x ptr> @ptrmask_simplify_known_unused_vec(<2 x ptr> %p) {
212 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec
213 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
214 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -64>)
215 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 32>
216 ; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
218   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
219   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
220   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
221   ret <2 x ptr> %r
224 define <2 x ptr> @ptrmask_simplify_known_unused_vec2(<2 x ptr> %p) {
225 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec2
226 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
227 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -64>)
228 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 32>
229 ; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
231   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
232   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
233   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -16>)
234   ret <2 x ptr> %r
237 define <2 x ptr> @ptrmask_simplify_known_unused_vec3(<2 x ptr> %p) {
238 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec3
239 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
240 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
241 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 32>
242 ; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
244   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
245   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
246   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
247   ret <2 x ptr> %r
250 define <2 x ptr> @ptrmask_simplify_known_unused_vec4(<2 x ptr> %p) {
251 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec4
252 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
253 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
254 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 64>
255 ; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
257   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
258   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 64>
259   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
260   ret <2 x ptr> %r
263 define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail(<2 x ptr> %p) {
264 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail
265 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
266 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
267 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 16, i64 64>
268 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> <i64 -32, i64 -32>)
269 ; CHECK-NEXT:    ret <2 x ptr> [[R]]
271   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
272   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 16, i64 64>
273   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
274   ret <2 x ptr> %r
277 define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail2(<2 x ptr> %p) {
278 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail2
279 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
280 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -64>)
281 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 32>
282 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> <i64 -32, i64 -64>)
283 ; CHECK-NEXT:    ret <2 x ptr> [[R]]
285   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
286   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
287   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -64>)
288   ret <2 x ptr> %r
291 define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail3(<2 x ptr> %p) {
292 ; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail3
293 ; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
294 ; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -16>)
295 ; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 32>
296 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> <i64 -32, i64 -32>)
297 ; CHECK-NEXT:    ret <2 x ptr> [[R]]
299   %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -16>)
300   %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
301   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
302   ret <2 x ptr> %r
305 define ptr @ptrmask_maintain_provenance_i64(ptr %p0) {
306 ; CHECK-LABEL: define ptr @ptrmask_maintain_provenance_i64
307 ; CHECK-SAME: (ptr [[P0:%.*]]) {
308 ; CHECK-NEXT:    [[R:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P0]], i64 0)
309 ; CHECK-NEXT:    ret ptr [[R]]
311   %r = call ptr @llvm.ptrmask.p0.i64(ptr %p0, i64 0)
312   ret ptr %r
315 define ptr addrspace(1) @ptrmask_maintain_provenance_i32(ptr addrspace(1) %p0) {
316 ; CHECK-LABEL: define ptr addrspace(1) @ptrmask_maintain_provenance_i32
317 ; CHECK-SAME: (ptr addrspace(1) [[P0:%.*]]) {
318 ; CHECK-NEXT:    [[R:%.*]] = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) [[P0]], i32 0)
319 ; CHECK-NEXT:    ret ptr addrspace(1) [[R]]
321   %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p0, i32 0)
322   ret ptr addrspace(1) %r
325 define <2 x ptr> @ptrmask_maintain_provenance_v2i64(<2 x ptr> %p0) {
326 ; CHECK-LABEL: define <2 x ptr> @ptrmask_maintain_provenance_v2i64
327 ; CHECK-SAME: (<2 x ptr> [[P0:%.*]]) {
328 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P0]], <2 x i64> zeroinitializer)
329 ; CHECK-NEXT:    ret <2 x ptr> [[R]]
331   %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p0, <2 x i64> zeroinitializer)
332   ret <2 x ptr> %r
335 define <2 x ptr addrspace(1) > @ptrmask_maintain_provenance_v2i32(<2 x ptr addrspace(1) > %p0) {
336 ; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_maintain_provenance_v2i32
337 ; CHECK-SAME: (<2 x ptr addrspace(1)> [[P0:%.*]]) {
338 ; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr addrspace(1)> @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1)> [[P0]], <2 x i32> zeroinitializer)
339 ; CHECK-NEXT:    ret <2 x ptr addrspace(1)> [[R]]
341   %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p0, <2 x i32> zeroinitializer)
342   ret <2 x ptr addrspace(1) > %r