xref: /llvm-project/llvm/test/Transforms/SandboxVectorizer/bottomup_basic.ll (revision d2234ca16310a9e9bd595561353556ea6ba0176f)
1320389d4Svporpo; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
26312beefSvporpo; RUN: opt -passes=sandbox-vectorizer -sbvec-vec-reg-bits=1024 -sbvec-allow-non-pow2 -sbvec-passes="bottom-up-vec<>" %s -S | FileCheck %s
3320389d4Svporpo
4320389d4Svporpodefine void @store_load(ptr %ptr) {
5320389d4Svporpo; CHECK-LABEL: define void @store_load(
6320389d4Svporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
7320389d4Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
8320389d4Svporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
9320389d4Svporpo; CHECK-NEXT:    store <2 x float> [[VECL]], ptr [[PTR0]], align 4
10320389d4Svporpo; CHECK-NEXT:    ret void
11320389d4Svporpo;
12320389d4Svporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
13320389d4Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
14320389d4Svporpo  %ld0 = load float, ptr %ptr0
15320389d4Svporpo  %ld1 = load float, ptr %ptr1
16320389d4Svporpo  store float %ld0, ptr %ptr0
17320389d4Svporpo  store float %ld1, ptr %ptr1
18320389d4Svporpo  ret void
19320389d4Svporpo}
20320389d4Svporpo
21320389d4Svporpo
22320389d4Svporpodefine void @store_fpext_load(ptr %ptr) {
23320389d4Svporpo; CHECK-LABEL: define void @store_fpext_load(
24320389d4Svporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
25320389d4Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
26320389d4Svporpo; CHECK-NEXT:    [[PTRD0:%.*]] = getelementptr double, ptr [[PTR]], i32 0
27320389d4Svporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
28320389d4Svporpo; CHECK-NEXT:    [[VCAST:%.*]] = fpext <2 x float> [[VECL]] to <2 x double>
29320389d4Svporpo; CHECK-NEXT:    store <2 x double> [[VCAST]], ptr [[PTRD0]], align 8
30320389d4Svporpo; CHECK-NEXT:    ret void
31320389d4Svporpo;
32320389d4Svporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
33320389d4Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
34320389d4Svporpo  %ptrd0 = getelementptr double, ptr %ptr, i32 0
35320389d4Svporpo  %ptrd1 = getelementptr double, ptr %ptr, i32 1
36320389d4Svporpo  %ld0 = load float, ptr %ptr0
37320389d4Svporpo  %ld1 = load float, ptr %ptr1
38320389d4Svporpo  %fpext0 = fpext float %ld0 to double
39320389d4Svporpo  %fpext1 = fpext float %ld1 to double
40320389d4Svporpo  store double %fpext0, ptr %ptrd0
41320389d4Svporpo  store double %fpext1, ptr %ptrd1
42320389d4Svporpo  ret void
43320389d4Svporpo}
44320389d4Svporpo
455942a99fSvporpodefine void @store_fcmp_zext_load(ptr %ptr) {
465942a99fSvporpo; CHECK-LABEL: define void @store_fcmp_zext_load(
475942a99fSvporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
485942a99fSvporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
495942a99fSvporpo; CHECK-NEXT:    [[PTRB0:%.*]] = getelementptr i32, ptr [[PTR]], i32 0
505942a99fSvporpo; CHECK-NEXT:    [[VECL1:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
515942a99fSvporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
525942a99fSvporpo; CHECK-NEXT:    [[VCMP:%.*]] = fcmp ogt <2 x float> [[VECL]], [[VECL1]]
535942a99fSvporpo; CHECK-NEXT:    [[VCAST:%.*]] = zext <2 x i1> [[VCMP]] to <2 x i32>
545942a99fSvporpo; CHECK-NEXT:    store <2 x i32> [[VCAST]], ptr [[PTRB0]], align 4
555942a99fSvporpo; CHECK-NEXT:    ret void
565942a99fSvporpo;
575942a99fSvporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
585942a99fSvporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
595942a99fSvporpo  %ptrb0 = getelementptr i32, ptr %ptr, i32 0
605942a99fSvporpo  %ptrb1 = getelementptr i32, ptr %ptr, i32 1
615942a99fSvporpo  %ldB0 = load float, ptr %ptr0
625942a99fSvporpo  %ldB1 = load float, ptr %ptr1
635942a99fSvporpo  %ldA0 = load float, ptr %ptr0
645942a99fSvporpo  %ldA1 = load float, ptr %ptr1
655942a99fSvporpo  %fcmp0 = fcmp ogt float %ldA0, %ldB0
665942a99fSvporpo  %fcmp1 = fcmp ogt float %ldA1, %ldB1
675942a99fSvporpo  %zext0 = zext i1 %fcmp0 to i32
685942a99fSvporpo  %zext1 = zext i1 %fcmp1 to i32
695942a99fSvporpo  store i32 %zext0, ptr %ptrb0
705942a99fSvporpo  store i32 %zext1, ptr %ptrb1
715942a99fSvporpo  ret void
725942a99fSvporpo}
73320389d4Svporpo
74f7ef7b2fSvporpodefine void @store_fadd_load(ptr %ptr) {
75f7ef7b2fSvporpo; CHECK-LABEL: define void @store_fadd_load(
76f7ef7b2fSvporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
77f7ef7b2fSvporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
78f7ef7b2fSvporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
79f7ef7b2fSvporpo; CHECK-NEXT:    [[VECL1:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
80f7ef7b2fSvporpo; CHECK-NEXT:    [[VEC:%.*]] = fadd <2 x float> [[VECL]], [[VECL1]]
81f7ef7b2fSvporpo; CHECK-NEXT:    store <2 x float> [[VEC]], ptr [[PTR0]], align 4
82f7ef7b2fSvporpo; CHECK-NEXT:    ret void
83f7ef7b2fSvporpo;
84f7ef7b2fSvporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
85f7ef7b2fSvporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
86f7ef7b2fSvporpo  %ldA0 = load float, ptr %ptr0
87f7ef7b2fSvporpo  %ldA1 = load float, ptr %ptr1
88f7ef7b2fSvporpo  %ldB0 = load float, ptr %ptr0
89f7ef7b2fSvporpo  %ldB1 = load float, ptr %ptr1
90f7ef7b2fSvporpo  %fadd0 = fadd float %ldA0, %ldB0
91f7ef7b2fSvporpo  %fadd1 = fadd float %ldA1, %ldB1
92f7ef7b2fSvporpo  store float %fadd0, ptr %ptr0
93f7ef7b2fSvporpo  store float %fadd1, ptr %ptr1
94f7ef7b2fSvporpo  ret void
95f7ef7b2fSvporpo}
96320389d4Svporpo
97320389d4Svporpodefine void @store_fneg_load(ptr %ptr) {
98320389d4Svporpo; CHECK-LABEL: define void @store_fneg_load(
99320389d4Svporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
100320389d4Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
101320389d4Svporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
102320389d4Svporpo; CHECK-NEXT:    [[VEC:%.*]] = fneg <2 x float> [[VECL]]
103320389d4Svporpo; CHECK-NEXT:    store <2 x float> [[VEC]], ptr [[PTR0]], align 4
104320389d4Svporpo; CHECK-NEXT:    ret void
105320389d4Svporpo;
106320389d4Svporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
107320389d4Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
108320389d4Svporpo  %ld0 = load float, ptr %ptr0
109320389d4Svporpo  %ld1 = load float, ptr %ptr1
110320389d4Svporpo  %fneg0 = fneg float %ld0
111320389d4Svporpo  %fneg1 = fneg float %ld1
112320389d4Svporpo  store float %fneg0, ptr %ptr0
113320389d4Svporpo  store float %fneg1, ptr %ptr1
114320389d4Svporpo  ret void
115320389d4Svporpo}
116320389d4Svporpo
1177dffc96aSvporpodefine float @scalars_with_external_uses_not_dead(ptr %ptr) {
1187dffc96aSvporpo; CHECK-LABEL: define float @scalars_with_external_uses_not_dead(
1197dffc96aSvporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
1207dffc96aSvporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
1217dffc96aSvporpo; CHECK-NEXT:    [[PTR1:%.*]] = getelementptr float, ptr [[PTR]], i32 1
1227dffc96aSvporpo; CHECK-NEXT:    [[LD0:%.*]] = load float, ptr [[PTR0]], align 4
1237dffc96aSvporpo; CHECK-NEXT:    [[LD1:%.*]] = load float, ptr [[PTR1]], align 4
1247dffc96aSvporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
1257dffc96aSvporpo; CHECK-NEXT:    store <2 x float> [[VECL]], ptr [[PTR0]], align 4
1267dffc96aSvporpo; CHECK-NEXT:    [[USER:%.*]] = fneg float [[LD1]]
1277dffc96aSvporpo; CHECK-NEXT:    ret float [[LD0]]
1287dffc96aSvporpo;
1297dffc96aSvporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
1307dffc96aSvporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
1317dffc96aSvporpo  %ld0 = load float, ptr %ptr0
1327dffc96aSvporpo  %ld1 = load float, ptr %ptr1
1337dffc96aSvporpo  store float %ld0, ptr %ptr0
1347dffc96aSvporpo  store float %ld1, ptr %ptr1
1357dffc96aSvporpo  %user = fneg float %ld1
1367dffc96aSvporpo  ret float %ld0
1377dffc96aSvporpo}
1387dffc96aSvporpo
1393be3b33eSvporpodefine void @pack_scalars(ptr %ptr, ptr %ptr2) {
1403be3b33eSvporpo; CHECK-LABEL: define void @pack_scalars(
1413be3b33eSvporpo; CHECK-SAME: ptr [[PTR:%.*]], ptr [[PTR2:%.*]]) {
1423be3b33eSvporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
1433be3b33eSvporpo; CHECK-NEXT:    [[LD0:%.*]] = load float, ptr [[PTR0]], align 4
1443be3b33eSvporpo; CHECK-NEXT:    [[LD1:%.*]] = load float, ptr [[PTR2]], align 4
1453be3b33eSvporpo; CHECK-NEXT:    [[PACK:%.*]] = insertelement <2 x float> poison, float [[LD0]], i32 0
1463be3b33eSvporpo; CHECK-NEXT:    [[PACK1:%.*]] = insertelement <2 x float> [[PACK]], float [[LD1]], i32 1
1473be3b33eSvporpo; CHECK-NEXT:    store <2 x float> [[PACK1]], ptr [[PTR0]], align 4
1483be3b33eSvporpo; CHECK-NEXT:    ret void
1493be3b33eSvporpo;
1503be3b33eSvporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
1513be3b33eSvporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
1523be3b33eSvporpo  %ld0 = load float, ptr %ptr0
1533be3b33eSvporpo  %ld1 = load float, ptr %ptr2
1543be3b33eSvporpo  store float %ld0, ptr %ptr0
1553be3b33eSvporpo  store float %ld1, ptr %ptr1
1563be3b33eSvporpo  ret void
1573be3b33eSvporpo}
1583be3b33eSvporpo
1593be3b33eSvporpodeclare void @foo()
1603be3b33eSvporpodefine void @cant_vectorize_seeds(ptr %ptr) {
1613be3b33eSvporpo; CHECK-LABEL: define void @cant_vectorize_seeds(
1623be3b33eSvporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
1633be3b33eSvporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
1643be3b33eSvporpo; CHECK-NEXT:    [[PTR1:%.*]] = getelementptr float, ptr [[PTR]], i32 1
1653be3b33eSvporpo; CHECK-NEXT:    [[LD0:%.*]] = load float, ptr [[PTR0]], align 4
1663be3b33eSvporpo; CHECK-NEXT:    [[LD1:%.*]] = load float, ptr [[PTR1]], align 4
1673be3b33eSvporpo; CHECK-NEXT:    store float [[LD1]], ptr [[PTR1]], align 4
1683be3b33eSvporpo; CHECK-NEXT:    call void @foo()
1693be3b33eSvporpo; CHECK-NEXT:    store float [[LD1]], ptr [[PTR1]], align 4
1703be3b33eSvporpo; CHECK-NEXT:    ret void
1713be3b33eSvporpo;
1723be3b33eSvporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
1733be3b33eSvporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
1743be3b33eSvporpo  %ld0 = load float, ptr %ptr0
1753be3b33eSvporpo  %ld1 = load float, ptr %ptr1
1763be3b33eSvporpo  store float %ld1, ptr %ptr1
1773be3b33eSvporpo  call void @foo() ; This call blocks scheduling of the store seeds.
1783be3b33eSvporpo  store float %ld1, ptr %ptr1
1793be3b33eSvporpo  ret void
1803be3b33eSvporpo}
1813be3b33eSvporpo
1821be98277Svporpodefine void @pack_vectors(ptr %ptr, ptr %ptr2) {
1831be98277Svporpo; CHECK-LABEL: define void @pack_vectors(
1841be98277Svporpo; CHECK-SAME: ptr [[PTR:%.*]], ptr [[PTR2:%.*]]) {
1851be98277Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr <2 x float>, ptr [[PTR]], i32 0
1861be98277Svporpo; CHECK-NEXT:    [[LD0:%.*]] = load <2 x float>, ptr [[PTR0]], align 8
1871be98277Svporpo; CHECK-NEXT:    [[LD1:%.*]] = load float, ptr [[PTR2]], align 4
1881be98277Svporpo; CHECK-NEXT:    [[VPACK:%.*]] = extractelement <2 x float> [[LD0]], i32 0
1891be98277Svporpo; CHECK-NEXT:    [[VPACK1:%.*]] = insertelement <3 x float> poison, float [[VPACK]], i32 0
1901be98277Svporpo; CHECK-NEXT:    [[VPACK2:%.*]] = extractelement <2 x float> [[LD0]], i32 1
1911be98277Svporpo; CHECK-NEXT:    [[VPACK3:%.*]] = insertelement <3 x float> [[VPACK1]], float [[VPACK2]], i32 1
1921be98277Svporpo; CHECK-NEXT:    [[PACK:%.*]] = insertelement <3 x float> [[VPACK3]], float [[LD1]], i32 2
1931be98277Svporpo; CHECK-NEXT:    store <3 x float> [[PACK]], ptr [[PTR0]], align 8
1941be98277Svporpo; CHECK-NEXT:    ret void
1951be98277Svporpo;
1961be98277Svporpo  %ptr0 = getelementptr <2 x float>, ptr %ptr, i32 0
1971be98277Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 2
1981be98277Svporpo  %ld0 = load <2 x float>, ptr %ptr0
1991be98277Svporpo  %ld1 = load float, ptr %ptr2
2001be98277Svporpo  store <2 x float> %ld0, ptr %ptr0
2011be98277Svporpo  store float %ld1, ptr %ptr1
2021be98277Svporpo  ret void
2031be98277Svporpo}
204e902c696Svporpo
205e902c696Svporpodefine void @diamond(ptr %ptr) {
206e902c696Svporpo; CHECK-LABEL: define void @diamond(
207e902c696Svporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
208e902c696Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
209e902c696Svporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
210e902c696Svporpo; CHECK-NEXT:    [[VEC:%.*]] = fsub <2 x float> [[VECL]], [[VECL]]
211e902c696Svporpo; CHECK-NEXT:    store <2 x float> [[VEC]], ptr [[PTR0]], align 4
212e902c696Svporpo; CHECK-NEXT:    ret void
213e902c696Svporpo;
214e902c696Svporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
215e902c696Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
216e902c696Svporpo  %ld0 = load float, ptr %ptr0
217e902c696Svporpo  %ld1 = load float, ptr %ptr1
218e902c696Svporpo  %sub0 = fsub float %ld0, %ld0
219e902c696Svporpo  %sub1 = fsub float %ld1, %ld1
220e902c696Svporpo  store float %sub0, ptr %ptr0
221e902c696Svporpo  store float %sub1, ptr %ptr1
222e902c696Svporpo  ret void
223e902c696Svporpo}
22487e4b681Svporpo
22587e4b681Svporpodefine void @diamondWithShuffle(ptr %ptr) {
22687e4b681Svporpo; CHECK-LABEL: define void @diamondWithShuffle(
22787e4b681Svporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
22887e4b681Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
22987e4b681Svporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
23087e4b681Svporpo; CHECK-NEXT:    [[VSHUF:%.*]] = shufflevector <2 x float> [[VECL]], <2 x float> [[VECL]], <2 x i32> <i32 1, i32 0>
23187e4b681Svporpo; CHECK-NEXT:    [[VEC:%.*]] = fsub <2 x float> [[VECL]], [[VSHUF]]
23287e4b681Svporpo; CHECK-NEXT:    store <2 x float> [[VEC]], ptr [[PTR0]], align 4
23387e4b681Svporpo; CHECK-NEXT:    ret void
23487e4b681Svporpo;
23587e4b681Svporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
23687e4b681Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
23787e4b681Svporpo  %ld0 = load float, ptr %ptr0
23887e4b681Svporpo  %ld1 = load float, ptr %ptr1
23987e4b681Svporpo  %sub0 = fsub float %ld0, %ld1
24087e4b681Svporpo  %sub1 = fsub float %ld1, %ld0
24187e4b681Svporpo  store float %sub0, ptr %ptr0
24287e4b681Svporpo  store float %sub1, ptr %ptr1
24387e4b681Svporpo  ret void
24487e4b681Svporpo}
245fd087135Svporpo
246fd087135Svporpodefine void @diamondMultiInput(ptr %ptr, ptr %ptrX) {
247fd087135Svporpo; CHECK-LABEL: define void @diamondMultiInput(
248fd087135Svporpo; CHECK-SAME: ptr [[PTR:%.*]], ptr [[PTRX:%.*]]) {
249fd087135Svporpo; CHECK-NEXT:    [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
250fd087135Svporpo; CHECK-NEXT:    [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
251fd087135Svporpo; CHECK-NEXT:    [[LDX:%.*]] = load float, ptr [[PTRX]], align 4
252fd087135Svporpo; CHECK-NEXT:    [[VINS:%.*]] = insertelement <2 x float> poison, float [[LDX]], i32 0
253fd087135Svporpo; CHECK-NEXT:    [[VEXT:%.*]] = extractelement <2 x float> [[VECL]], i32 0
254fd087135Svporpo; CHECK-NEXT:    [[VINS1:%.*]] = insertelement <2 x float> [[VINS]], float [[VEXT]], i32 1
255fd087135Svporpo; CHECK-NEXT:    [[VEC:%.*]] = fsub <2 x float> [[VECL]], [[VINS1]]
256fd087135Svporpo; CHECK-NEXT:    store <2 x float> [[VEC]], ptr [[PTR0]], align 4
257fd087135Svporpo; CHECK-NEXT:    ret void
258fd087135Svporpo;
259fd087135Svporpo  %ptr0 = getelementptr float, ptr %ptr, i32 0
260fd087135Svporpo  %ptr1 = getelementptr float, ptr %ptr, i32 1
261fd087135Svporpo  %ld0 = load float, ptr %ptr0
262fd087135Svporpo  %ld1 = load float, ptr %ptr1
263fd087135Svporpo
264fd087135Svporpo  %ldX = load float, ptr %ptrX
265fd087135Svporpo
266fd087135Svporpo  %sub0 = fsub float %ld0, %ldX
267fd087135Svporpo  %sub1 = fsub float %ld1, %ld0
268fd087135Svporpo  store float %sub0, ptr %ptr0
269fd087135Svporpo  store float %sub1, ptr %ptr1
270fd087135Svporpo  ret void
271fd087135Svporpo}
272*d2234ca1Svporpo
273*d2234ca1Svporpodefine void @diamondWithConstantVector(ptr %ptr) {
274*d2234ca1Svporpo; CHECK-LABEL: define void @diamondWithConstantVector(
275*d2234ca1Svporpo; CHECK-SAME: ptr [[PTR:%.*]]) {
276*d2234ca1Svporpo; CHECK-NEXT:    [[GEPA0:%.*]] = getelementptr i32, ptr [[PTR]], i64 0
277*d2234ca1Svporpo; CHECK-NEXT:    [[GEPB0:%.*]] = getelementptr i32, ptr [[PTR]], i64 10
278*d2234ca1Svporpo; CHECK-NEXT:    store <2 x i32> zeroinitializer, ptr [[GEPA0]], align 4
279*d2234ca1Svporpo; CHECK-NEXT:    store <2 x i32> zeroinitializer, ptr [[GEPB0]], align 4
280*d2234ca1Svporpo; CHECK-NEXT:    ret void
281*d2234ca1Svporpo;
282*d2234ca1Svporpo  %gepA0 = getelementptr i32, ptr %ptr, i64 0
283*d2234ca1Svporpo  %gepA1 = getelementptr i32, ptr %ptr, i64 1
284*d2234ca1Svporpo
285*d2234ca1Svporpo  %gepB0 = getelementptr i32, ptr %ptr, i64 10
286*d2234ca1Svporpo  %gepB1 = getelementptr i32, ptr %ptr, i64 11
287*d2234ca1Svporpo
288*d2234ca1Svporpo  %zext0 = zext i16 0 to i32
289*d2234ca1Svporpo  %zext1 = zext i16 0 to i32
290*d2234ca1Svporpo
291*d2234ca1Svporpo  store i32 %zext0, ptr %gepA0
292*d2234ca1Svporpo  store i32 %zext1, ptr %gepA1
293*d2234ca1Svporpo
294*d2234ca1Svporpo  %orB0 = or i32 0, %zext0
295*d2234ca1Svporpo  %orB1 = or i32 0, %zext1
296*d2234ca1Svporpo  store i32 %orB0, ptr %gepB0
297*d2234ca1Svporpo  store i32 %orB1, ptr %gepB1
298*d2234ca1Svporpo  ret void
299*d2234ca1Svporpo}
300