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)
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>)
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>)
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>)
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)
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)
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)
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)
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)
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)
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>)
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>)
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)
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>)
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>)
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>)
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>)
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>)
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>)
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>)
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)
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)
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