xref: /llvm-project/llvm/test/Transforms/InstSimplify/ptrmask.ll (revision 38fffa630ee80163dc65e759392ad29798905679)
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
3
4target datalayout = "p1:64:64:64:32"
5
6declare ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) , i32)
7declare ptr @llvm.ptrmask.p0.i64(ptr, i64)
8
9declare <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) >, <2 x i32>)
10declare <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr>, <2 x i64>)
11
12define 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
16;
17  %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 poison)
18  ret ptr %r
19}
20
21define <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
25;
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
28}
29
30define <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]]
35;
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
38}
39
40define <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:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 undef, i64 -1>)
44; CHECK-NEXT:    ret <2 x ptr> [[R]]
45;
46  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 undef, i64 -1>)
47  ret <2 x ptr> %r
48}
49
50define <2 x ptr> @ptrmask_simplify_poison_and_ones_vec(<2 x ptr> %p) {
51; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_poison_and_ones_vec
52; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
53; CHECK-NEXT:    ret <2 x ptr> [[P]]
54;
55  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 poison, i64 -1>)
56  ret <2 x ptr> %r
57}
58
59define <2 x ptr> @ptrmask_simplify_ones_vec(<2 x ptr> %p) {
60; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_ones_vec
61; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
62; CHECK-NEXT:    ret <2 x ptr> [[P]]
63;
64  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -1, i64 -1>)
65  ret <2 x ptr> %r
66}
67
68define <2 x ptr addrspace(1) > @ptrmask_simplify_ones_i32_vec(<2 x ptr addrspace(1) > %p) {
69; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_simplify_ones_i32_vec
70; CHECK-SAME: (<2 x ptr addrspace(1)> [[P:%.*]]) {
71; CHECK-NEXT:    ret <2 x ptr addrspace(1)> [[P]]
72;
73  %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p, <2 x i32> <i32 -1, i32 -1>)
74  ret <2 x ptr addrspace(1) > %r
75}
76
77define ptr addrspace(1) @ptrmask_simplify_undef_mask(ptr addrspace(1) %p) {
78; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_undef_mask
79; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) {
80; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
81;
82  %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 undef)
83  ret ptr addrspace(1) %r
84}
85
86define ptr @ptrmask_simplify_0_mask(ptr %p) {
87; CHECK-LABEL: define ptr @ptrmask_simplify_0_mask
88; CHECK-SAME: (ptr [[P:%.*]]) {
89; CHECK-NEXT:    [[R:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 0)
90; CHECK-NEXT:    ret ptr [[R]]
91;
92  %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 0)
93  ret ptr %r
94}
95
96define ptr @ptrmask_simplify_1s_mask(ptr %p) {
97; CHECK-LABEL: define ptr @ptrmask_simplify_1s_mask
98; CHECK-SAME: (ptr [[P:%.*]]) {
99; CHECK-NEXT:    ret ptr [[P]]
100;
101  %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -1)
102  ret ptr %r
103}
104
105define ptr addrspace(1) @ptrmask_simplify_1s_mask_i32(ptr addrspace(1) %p) {
106; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_1s_mask_i32
107; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) {
108; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
109;
110  %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 -1)
111  ret ptr addrspace(1) %r
112}
113
114define ptr @ptrmask_simplify_poison_ptr(i64 %m) {
115; CHECK-LABEL: define ptr @ptrmask_simplify_poison_ptr
116; CHECK-SAME: (i64 [[M:%.*]]) {
117; CHECK-NEXT:    ret ptr poison
118;
119  %r = call ptr @llvm.ptrmask.p0.i64(ptr poison, i64 %m)
120  ret ptr %r
121}
122
123define ptr addrspace(1) @ptrmask_simplify_undef_ptr(i32 %m) {
124; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_undef_ptr
125; CHECK-SAME: (i32 [[M:%.*]]) {
126; CHECK-NEXT:    ret ptr addrspace(1) null
127;
128  %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) undef, i32 %m)
129  ret ptr addrspace(1) %r
130}
131
132define ptr @ptrmask_simplify_null_ptr(i64 %m) {
133; CHECK-LABEL: define ptr @ptrmask_simplify_null_ptr
134; CHECK-SAME: (i64 [[M:%.*]]) {
135; CHECK-NEXT:    ret ptr null
136;
137  %r = call ptr @llvm.ptrmask.p0.i64(ptr null, i64 %m)
138  ret ptr %r
139}
140
141define ptr @ptrmask_simplify_ptrmask(ptr %p) {
142; CHECK-LABEL: define ptr @ptrmask_simplify_ptrmask
143; CHECK-SAME: (ptr [[P:%.*]]) {
144; CHECK-NEXT:    ret ptr [[P]]
145;
146  %m = ptrtoint ptr %p to i64
147  %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m)
148  ret ptr %r
149}
150
151define ptr addrspace(1) @ptrmask_simplify_ptrmask_i32(ptr addrspace(1) %p) {
152; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_ptrmask_i32
153; CHECK-SAME: (ptr addrspace(1) [[P:%.*]]) {
154; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
155;
156  %m = ptrtoint ptr addrspace(1) %p to i32
157  %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 %m)
158  ret ptr addrspace(1) %r
159}
160
161define ptr @ptrmask_simplify_aligned_unused(ptr align 64 %p) {
162; CHECK-LABEL: define ptr @ptrmask_simplify_aligned_unused
163; CHECK-SAME: (ptr align 64 [[P:%.*]]) {
164; CHECK-NEXT:    ret ptr [[P]]
165;
166  %r = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -64)
167  ret ptr %r
168}
169
170define <2 x ptr> @ptrmask_simplify_aligned_unused_vec(<2 x ptr> align 128 %p) {
171; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_aligned_unused_vec
172; CHECK-SAME: (<2 x ptr> align 128 [[P:%.*]]) {
173; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64))
174; CHECK-NEXT:    ret <2 x ptr> [[R]]
175;
176  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
177  ret <2 x ptr> %r
178}
179
180define <2 x ptr> @ptrmask_simplify_aligned_unused_vec_todo(<2 x ptr> align 128 %p) {
181; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_aligned_unused_vec_todo
182; CHECK-SAME: (<2 x ptr> align 128 [[P:%.*]]) {
183; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
184; CHECK-NEXT:    ret <2 x ptr> [[R]]
185;
186  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
187  ret <2 x ptr> %r
188}
189
190define ptr addrspace(1) @ptrmask_simplify_aligned_unused_i32(ptr addrspace(1) align 64 %p) {
191; CHECK-LABEL: define ptr addrspace(1) @ptrmask_simplify_aligned_unused_i32
192; CHECK-SAME: (ptr addrspace(1) align 64 [[P:%.*]]) {
193; CHECK-NEXT:    ret ptr addrspace(1) [[P]]
194;
195  %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p, i32 -64)
196  ret ptr addrspace(1) %r
197}
198
199define ptr @ptrmask_simplify_known_unused(ptr %p) {
200; CHECK-LABEL: define ptr @ptrmask_simplify_known_unused
201; CHECK-SAME: (ptr [[P:%.*]]) {
202; CHECK-NEXT:    [[PM0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 -64)
203; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, ptr [[PM0]], i64 32
204; CHECK-NEXT:    ret ptr [[PGEP]]
205;
206  %pm0 = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 -64)
207  %pgep = getelementptr i8, ptr %pm0, i64 32
208  %r = call ptr @llvm.ptrmask.p0.i64(ptr %pgep, i64 -32)
209  ret ptr %r
210}
211
212define <2 x ptr> @ptrmask_simplify_known_unused_vec(<2 x ptr> %p) {
213; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec
214; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
215; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64))
216; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32)
217; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
218;
219  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
220  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
221  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
222  ret <2 x ptr> %r
223}
224
225define <2 x ptr> @ptrmask_simplify_known_unused_vec2(<2 x ptr> %p) {
226; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec2
227; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
228; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64))
229; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32)
230; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
231;
232  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
233  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
234  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -16>)
235  ret <2 x ptr> %r
236}
237
238define <2 x ptr> @ptrmask_simplify_known_unused_vec3(<2 x ptr> %p) {
239; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec3
240; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
241; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
242; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32)
243; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
244;
245  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
246  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
247  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
248  ret <2 x ptr> %r
249}
250
251define <2 x ptr> @ptrmask_simplify_known_unused_vec4(<2 x ptr> %p) {
252; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec4
253; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
254; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
255; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 32, i64 64>
256; CHECK-NEXT:    ret <2 x ptr> [[PGEP]]
257;
258  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
259  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 64>
260  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
261  ret <2 x ptr> %r
262}
263
264define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail(<2 x ptr> %p) {
265; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail
266; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
267; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -128>)
268; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> <i64 16, i64 64>
269; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> splat (i64 -32))
270; CHECK-NEXT:    ret <2 x ptr> [[R]]
271;
272  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -128>)
273  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 16, i64 64>
274  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
275  ret <2 x ptr> %r
276}
277
278define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail2(<2 x ptr> %p) {
279; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail2
280; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
281; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> splat (i64 -64))
282; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32)
283; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> <i64 -32, i64 -64>)
284; CHECK-NEXT:    ret <2 x ptr> [[R]]
285;
286  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -64>)
287  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
288  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -64>)
289  ret <2 x ptr> %r
290}
291
292define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail3(<2 x ptr> %p) {
293; CHECK-LABEL: define <2 x ptr> @ptrmask_simplify_known_unused_vec_fail3
294; CHECK-SAME: (<2 x ptr> [[P:%.*]]) {
295; CHECK-NEXT:    [[PM0:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P]], <2 x i64> <i64 -64, i64 -16>)
296; CHECK-NEXT:    [[PGEP:%.*]] = getelementptr i8, <2 x ptr> [[PM0]], <2 x i64> splat (i64 32)
297; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[PGEP]], <2 x i64> splat (i64 -32))
298; CHECK-NEXT:    ret <2 x ptr> [[R]]
299;
300  %pm0 = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p, <2 x i64> <i64 -64, i64 -16>)
301  %pgep = getelementptr i8, <2 x ptr> %pm0, <2 x i64> <i64 32, i64 32>
302  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %pgep, <2 x i64> <i64 -32, i64 -32>)
303  ret <2 x ptr> %r
304}
305
306define ptr @ptrmask_maintain_provenance_i64(ptr %p0) {
307; CHECK-LABEL: define ptr @ptrmask_maintain_provenance_i64
308; CHECK-SAME: (ptr [[P0:%.*]]) {
309; CHECK-NEXT:    [[R:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P0]], i64 0)
310; CHECK-NEXT:    ret ptr [[R]]
311;
312  %r = call ptr @llvm.ptrmask.p0.i64(ptr %p0, i64 0)
313  ret ptr %r
314}
315
316define ptr addrspace(1) @ptrmask_maintain_provenance_i32(ptr addrspace(1) %p0) {
317; CHECK-LABEL: define ptr addrspace(1) @ptrmask_maintain_provenance_i32
318; CHECK-SAME: (ptr addrspace(1) [[P0:%.*]]) {
319; CHECK-NEXT:    [[R:%.*]] = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) [[P0]], i32 0)
320; CHECK-NEXT:    ret ptr addrspace(1) [[R]]
321;
322  %r = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %p0, i32 0)
323  ret ptr addrspace(1) %r
324}
325
326define <2 x ptr> @ptrmask_maintain_provenance_v2i64(<2 x ptr> %p0) {
327; CHECK-LABEL: define <2 x ptr> @ptrmask_maintain_provenance_v2i64
328; CHECK-SAME: (<2 x ptr> [[P0:%.*]]) {
329; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr> @llvm.ptrmask.v2p0.v2i64(<2 x ptr> [[P0]], <2 x i64> zeroinitializer)
330; CHECK-NEXT:    ret <2 x ptr> [[R]]
331;
332  %r = call <2 x ptr> @llvm.ptrmask.v2p1.v2i64(<2 x ptr> %p0, <2 x i64> zeroinitializer)
333  ret <2 x ptr> %r
334}
335
336define <2 x ptr addrspace(1) > @ptrmask_maintain_provenance_v2i32(<2 x ptr addrspace(1) > %p0) {
337; CHECK-LABEL: define <2 x ptr addrspace(1)> @ptrmask_maintain_provenance_v2i32
338; CHECK-SAME: (<2 x ptr addrspace(1)> [[P0:%.*]]) {
339; CHECK-NEXT:    [[R:%.*]] = call <2 x ptr addrspace(1)> @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1)> [[P0]], <2 x i32> zeroinitializer)
340; CHECK-NEXT:    ret <2 x ptr addrspace(1)> [[R]]
341;
342  %r = call <2 x ptr addrspace(1) > @llvm.ptrmask.v2p1.v2i32(<2 x ptr addrspace(1) > %p0, <2 x i32> zeroinitializer)
343  ret <2 x ptr addrspace(1) > %r
344}
345