xref: /aosp_15_r20/external/llvm/test/CodeGen/WebAssembly/address-offsets.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Test folding constant offsets and symbols into load and store addresses under
4*9880d681SAndroid Build Coastguard Worker; a variety of circumstances.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
7*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown"
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker@g = external global [0 x i32], align 4
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test0:
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}}
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push1=, g+40($pop0){{$}}
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop1{{$}}
16*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test0() {
17*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4
18*9880d681SAndroid Build Coastguard Worker  ret i32 %t
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test0_noinbounds:
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}}
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push1=, g+40($pop0){{$}}
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop1{{$}}
26*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test0_noinbounds() {
27*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4
28*9880d681SAndroid Build Coastguard Worker  ret i32 %t
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test1:
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
38*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test1(i32 %n) {
39*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
40*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
41*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
42*9880d681SAndroid Build Coastguard Worker  ret i32 %t
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test2:
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
52*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test2(i32 %n) {
53*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
54*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
55*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
56*9880d681SAndroid Build Coastguard Worker  ret i32 %t
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test3:
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
66*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test3(i32 %n) {
67*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
68*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
69*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr1, align 4
70*9880d681SAndroid Build Coastguard Worker  ret i32 %t
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test4:
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
80*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test4(i32 %n) {
81*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
82*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr, align 4
83*9880d681SAndroid Build Coastguard Worker  ret i32 %t
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test5:
87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
93*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test5(i32 %n) {
94*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
95*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr, align 4
96*9880d681SAndroid Build Coastguard Worker  ret i32 %t
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test6:
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
106*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test6(i32 %n) {
107*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
108*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
109*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr, align 4
110*9880d681SAndroid Build Coastguard Worker  ret i32 %t
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test7:
114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
120*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test7(i32 %n) {
121*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
122*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
123*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr1, align 4
124*9880d681SAndroid Build Coastguard Worker  ret i32 %t
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test8:
128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, g+40($pop1){{$}}
133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
134*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test8(i32 %n) {
135*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
136*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
137*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr, align 4
138*9880d681SAndroid Build Coastguard Worker  ret i32 %t
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test9:
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}}
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push1=, g-40($pop0){{$}}
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop1{{$}}
146*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test9() {
147*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 1073741814), align 4
148*9880d681SAndroid Build Coastguard Worker  ret i32 %t
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test10:
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push2=, g-40{{$}}
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push3=, $pop1, $pop2{{$}}
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push4=, 0($pop3){{$}}
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop4{{$}}
160*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test10(i32 %n) {
161*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, -10
162*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
163*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
164*9880d681SAndroid Build Coastguard Worker  ret i32 %t
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test11:
168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push0=, 40($0){{$}}
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop0{{$}}
172*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test11(i32* %p) {
173*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 10
174*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
175*9880d681SAndroid Build Coastguard Worker  ret i32 %t
176*9880d681SAndroid Build Coastguard Worker}
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test11_noinbounds:
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 40{{$}}
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push1=, $0, $pop0{{$}}
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, 0($pop1){{$}}
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
185*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test11_noinbounds(i32* %p) {
186*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr i32, i32* %p, i32 10
187*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
188*9880d681SAndroid Build Coastguard Worker  ret i32 %t
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test12:
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
201*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test12(i32* %p, i32 %n) {
202*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
203*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
204*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
205*9880d681SAndroid Build Coastguard Worker  ret i32 %t
206*9880d681SAndroid Build Coastguard Worker}
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test13:
209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
218*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test13(i32* %p, i32 %n) {
219*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
220*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
221*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
222*9880d681SAndroid Build Coastguard Worker  ret i32 %t
223*9880d681SAndroid Build Coastguard Worker}
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test14:
226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
229*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push3=, 40($pop2){{$}}
232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop3{{$}}
233*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test14(i32* %p, i32 %n) {
234*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
235*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
236*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr1, align 4
237*9880d681SAndroid Build Coastguard Worker  ret i32 %t
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test15:
241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
250*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test15(i32* %p, i32 %n) {
251*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
252*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
253*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr1, align 4
254*9880d681SAndroid Build Coastguard Worker  ret i32 %t
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test16:
258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
267*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test16(i32* %p, i32 %n) {
268*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
269*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
270*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr1, align 4
271*9880d681SAndroid Build Coastguard Worker  ret i32 %t
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test17:
275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
277*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
283*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
284*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test17(i32* %p, i32 %n) {
285*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
286*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
287*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr, align 4
288*9880d681SAndroid Build Coastguard Worker  ret i32 %t
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test18:
292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push3=, 40($pop2){{$}}
298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop3{{$}}
299*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test18(i32* %p, i32 %n) {
300*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
301*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
302*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr1, align 4
303*9880d681SAndroid Build Coastguard Worker  ret i32 %t
304*9880d681SAndroid Build Coastguard Worker}
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test19:
307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
311*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
316*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test19(i32* %p, i32 %n) {
317*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
318*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
319*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %add.ptr, align 4
320*9880d681SAndroid Build Coastguard Worker  ret i32 %t
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test20:
324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
325*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
326*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, -40{{$}}
327*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push1=, $0, $pop0{{$}}
328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push2=, 0($pop1){{$}}
329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop2{{$}}
330*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test20(i32* %p) {
331*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10
332*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
333*9880d681SAndroid Build Coastguard Worker  ret i32 %t
334*9880d681SAndroid Build Coastguard Worker}
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test21:
337*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result    i32{{$}}
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
342*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, -40{{$}}
343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
344*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load  $push5=, 0($pop4){{$}}
345*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return    $pop5{{$}}
346*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test21(i32* %p, i32 %n) {
347*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, -10
348*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
349*9880d681SAndroid Build Coastguard Worker  %t = load i32, i32* %arrayidx, align 4
350*9880d681SAndroid Build Coastguard Worker  ret i32 %t
351*9880d681SAndroid Build Coastguard Worker}
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test0:
354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
355*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}}
356*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop0), $0{{$}}
357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
358*9880d681SAndroid Build Coastguard Workerdefine void @store_test0(i32 %i) {
359*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4
360*9880d681SAndroid Build Coastguard Worker  ret void
361*9880d681SAndroid Build Coastguard Worker}
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test0_noinbounds:
364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
365*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}}
366*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop0), $0{{$}}
367*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
368*9880d681SAndroid Build Coastguard Workerdefine void @store_test0_noinbounds(i32 %i) {
369*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4
370*9880d681SAndroid Build Coastguard Worker  ret void
371*9880d681SAndroid Build Coastguard Worker}
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test1:
374*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
375*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
376*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
379*9880d681SAndroid Build Coastguard Workerdefine void @store_test1(i32 %n, i32 %i) {
380*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
381*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
382*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
383*9880d681SAndroid Build Coastguard Worker  ret void
384*9880d681SAndroid Build Coastguard Worker}
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test2:
387*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
388*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
391*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
392*9880d681SAndroid Build Coastguard Workerdefine void @store_test2(i32 %n, i32 %i) {
393*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
394*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
395*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
396*9880d681SAndroid Build Coastguard Worker  ret void
397*9880d681SAndroid Build Coastguard Worker}
398*9880d681SAndroid Build Coastguard Worker
399*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test3:
400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
401*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
402*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
403*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
405*9880d681SAndroid Build Coastguard Workerdefine void @store_test3(i32 %n, i32 %i) {
406*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
407*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
408*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr1, align 4
409*9880d681SAndroid Build Coastguard Worker  ret void
410*9880d681SAndroid Build Coastguard Worker}
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test4:
413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
417*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
418*9880d681SAndroid Build Coastguard Workerdefine void @store_test4(i32 %n, i32 %i) {
419*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
420*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr, align 4
421*9880d681SAndroid Build Coastguard Worker  ret void
422*9880d681SAndroid Build Coastguard Worker}
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test5:
425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
428*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
429*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
430*9880d681SAndroid Build Coastguard Workerdefine void @store_test5(i32 %n, i32 %i) {
431*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n
432*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr, align 4
433*9880d681SAndroid Build Coastguard Worker  ret void
434*9880d681SAndroid Build Coastguard Worker}
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test6:
437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
439*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
440*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
441*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
442*9880d681SAndroid Build Coastguard Workerdefine void @store_test6(i32 %n, i32 %i) {
443*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
444*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
445*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr, align 4
446*9880d681SAndroid Build Coastguard Worker  ret void
447*9880d681SAndroid Build Coastguard Worker}
448*9880d681SAndroid Build Coastguard Worker
449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test7:
450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
451*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
452*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
453*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
454*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
455*9880d681SAndroid Build Coastguard Workerdefine void @store_test7(i32 %n, i32 %i) {
456*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n
457*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
458*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr1, align 4
459*9880d681SAndroid Build Coastguard Worker  ret void
460*9880d681SAndroid Build Coastguard Worker}
461*9880d681SAndroid Build Coastguard Worker
462*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test8:
463*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
466*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}}
467*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
468*9880d681SAndroid Build Coastguard Workerdefine void @store_test8(i32 %n, i32 %i) {
469*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
470*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
471*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr, align 4
472*9880d681SAndroid Build Coastguard Worker  ret void
473*9880d681SAndroid Build Coastguard Worker}
474*9880d681SAndroid Build Coastguard Worker
475*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test9:
476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32{{$}}
477*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}}
478*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g-40($pop0), $0{{$}}
479*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
480*9880d681SAndroid Build Coastguard Workerdefine void @store_test9(i32 %i) {
481*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 1073741814), align 4
482*9880d681SAndroid Build Coastguard Worker  ret void
483*9880d681SAndroid Build Coastguard Worker}
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test10:
486*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
487*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
488*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $0, $pop0{{$}}
489*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push2=, g-40{{$}}
490*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push3=, $pop1, $pop2{{$}}
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop3), $1{{$}}
492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
493*9880d681SAndroid Build Coastguard Workerdefine void @store_test10(i32 %n, i32 %i) {
494*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, -10
495*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add
496*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
497*9880d681SAndroid Build Coastguard Worker  ret void
498*9880d681SAndroid Build Coastguard Worker}
499*9880d681SAndroid Build Coastguard Worker
500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test11:
501*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
502*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 40($0), $1{{$}}
503*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
504*9880d681SAndroid Build Coastguard Workerdefine void @store_test11(i32* %p, i32 %i) {
505*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 10
506*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
507*9880d681SAndroid Build Coastguard Worker  ret void
508*9880d681SAndroid Build Coastguard Worker}
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test11_noinbounds:
511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
512*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 40{{$}}
513*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push1=, $0, $pop0{{$}}
514*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop1), $1{{$}}
515*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
516*9880d681SAndroid Build Coastguard Workerdefine void @store_test11_noinbounds(i32* %p, i32 %i) {
517*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr i32, i32* %p, i32 10
518*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
519*9880d681SAndroid Build Coastguard Worker  ret void
520*9880d681SAndroid Build Coastguard Worker}
521*9880d681SAndroid Build Coastguard Worker
522*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test12:
523*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
524*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
525*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
526*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
527*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
528*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
529*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
530*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
531*9880d681SAndroid Build Coastguard Workerdefine void @store_test12(i32* %p, i32 %n, i32 %i) {
532*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
533*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
534*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
535*9880d681SAndroid Build Coastguard Worker  ret void
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test13:
539*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
540*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
541*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
542*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
543*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
544*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
545*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
546*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
547*9880d681SAndroid Build Coastguard Workerdefine void @store_test13(i32* %p, i32 %n, i32 %i) {
548*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
549*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
550*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
551*9880d681SAndroid Build Coastguard Worker  ret void
552*9880d681SAndroid Build Coastguard Worker}
553*9880d681SAndroid Build Coastguard Worker
554*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test14:
555*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
556*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
557*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
558*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
559*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 40($pop2), $2{{$}}
560*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
561*9880d681SAndroid Build Coastguard Workerdefine void @store_test14(i32* %p, i32 %n, i32 %i) {
562*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
563*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
564*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr1, align 4
565*9880d681SAndroid Build Coastguard Worker  ret void
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test15:
569*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
570*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
571*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
572*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
573*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
574*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
575*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
576*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
577*9880d681SAndroid Build Coastguard Workerdefine void @store_test15(i32* %p, i32 %n, i32 %i) {
578*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
579*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
580*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr1, align 4
581*9880d681SAndroid Build Coastguard Worker  ret void
582*9880d681SAndroid Build Coastguard Worker}
583*9880d681SAndroid Build Coastguard Worker
584*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test16:
585*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
586*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
587*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
588*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
589*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
591*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
592*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
593*9880d681SAndroid Build Coastguard Workerdefine void @store_test16(i32* %p, i32 %n, i32 %i) {
594*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 10
595*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n
596*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr1, align 4
597*9880d681SAndroid Build Coastguard Worker  ret void
598*9880d681SAndroid Build Coastguard Worker}
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test17:
601*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
602*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
603*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
604*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
605*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
606*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
607*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
609*9880d681SAndroid Build Coastguard Workerdefine void @store_test17(i32* %p, i32 %n, i32 %i) {
610*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, 10
611*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
612*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr, align 4
613*9880d681SAndroid Build Coastguard Worker  ret void
614*9880d681SAndroid Build Coastguard Worker}
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test18:
617*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
618*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
619*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
620*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
621*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 40($pop2), $2{{$}}
622*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
623*9880d681SAndroid Build Coastguard Workerdefine void @store_test18(i32* %p, i32 %n, i32 %i) {
624*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n
625*9880d681SAndroid Build Coastguard Worker  %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10
626*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr1, align 4
627*9880d681SAndroid Build Coastguard Worker  ret void
628*9880d681SAndroid Build Coastguard Worker}
629*9880d681SAndroid Build Coastguard Worker
630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test19:
631*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
632*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
634*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
635*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}}
636*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
637*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
638*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
639*9880d681SAndroid Build Coastguard Workerdefine void @store_test19(i32* %p, i32 %n, i32 %i) {
640*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 10, %n
641*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add
642*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %add.ptr, align 4
643*9880d681SAndroid Build Coastguard Worker  ret void
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test20:
647*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32{{$}}
648*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, -40{{$}}
649*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push1=, $0, $pop0{{$}}
650*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop1), $1{{$}}
651*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
652*9880d681SAndroid Build Coastguard Workerdefine void @store_test20(i32* %p, i32 %i) {
653*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10
654*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
655*9880d681SAndroid Build Coastguard Worker  ret void
656*9880d681SAndroid Build Coastguard Worker}
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test21:
659*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param     i32, i32, i32{{$}}
660*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}}
661*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl   $push1=, $1, $pop0{{$}}
662*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push2=, $0, $pop1{{$}}
663*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, -40{{$}}
664*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add   $push4=, $pop2, $pop3{{$}}
665*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}}
666*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
667*9880d681SAndroid Build Coastguard Workerdefine void @store_test21(i32* %p, i32 %n, i32 %i) {
668*9880d681SAndroid Build Coastguard Worker  %add = add nsw i32 %n, -10
669*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add
670*9880d681SAndroid Build Coastguard Worker  store i32 %i, i32* %arrayidx, align 4
671*9880d681SAndroid Build Coastguard Worker  ret void
672*9880d681SAndroid Build Coastguard Worker}
673