xref: /aosp_15_r20/external/llvm/test/CodeGen/WebAssembly/i64-load-store-alignment.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 loads and stores with custom alignment values.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
6*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown"
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi64_a1:
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0):p2align=0{{$}}
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
13*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi64_a1(i64 *%p) {
14*9880d681SAndroid Build Coastguard Worker  %v = load i64, i64* %p, align 1
15*9880d681SAndroid Build Coastguard Worker  ret i64 %v
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi64_a2:
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0):p2align=1{{$}}
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
23*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi64_a2(i64 *%p) {
24*9880d681SAndroid Build Coastguard Worker  %v = load i64, i64* %p, align 2
25*9880d681SAndroid Build Coastguard Worker  ret i64 %v
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi64_a4:
29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0):p2align=2{{$}}
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
33*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi64_a4(i64 *%p) {
34*9880d681SAndroid Build Coastguard Worker  %v = load i64, i64* %p, align 4
35*9880d681SAndroid Build Coastguard Worker  ret i64 %v
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; 8 is the default alignment for i64 so no attribute is needed.
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi64_a8:
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
45*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi64_a8(i64 *%p) {
46*9880d681SAndroid Build Coastguard Worker  %v = load i64, i64* %p, align 8
47*9880d681SAndroid Build Coastguard Worker  ret i64 %v
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; The default alignment in LLVM is the same as the defualt alignment in wasm.
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi64:
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
57*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi64(i64 *%p) {
58*9880d681SAndroid Build Coastguard Worker  %v = load i64, i64* %p
59*9880d681SAndroid Build Coastguard Worker  ret i64 %v
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker; 16 is greater than the default alignment so it is ignored.
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi64_a16:
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
69*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi64_a16(i64 *%p) {
70*9880d681SAndroid Build Coastguard Worker  %v = load i64, i64* %p, align 16
71*9880d681SAndroid Build Coastguard Worker  ret i64 %v
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Worker; Extending loads.
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi8_a1:
77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load8_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
81*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi8_a1(i8 *%p) {
82*9880d681SAndroid Build Coastguard Worker  %v = load i8, i8* %p, align 1
83*9880d681SAndroid Build Coastguard Worker  %w = zext i8 %v to i64
84*9880d681SAndroid Build Coastguard Worker  ret i64 %w
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi8_a2:
88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load8_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
92*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi8_a2(i8 *%p) {
93*9880d681SAndroid Build Coastguard Worker  %v = load i8, i8* %p, align 2
94*9880d681SAndroid Build Coastguard Worker  %w = zext i8 %v to i64
95*9880d681SAndroid Build Coastguard Worker  ret i64 %w
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi16_a1:
99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load16_u $push[[NUM:[0-9]+]]=, 0($0):p2align=0{{$}}
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
103*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi16_a1(i16 *%p) {
104*9880d681SAndroid Build Coastguard Worker  %v = load i16, i16* %p, align 1
105*9880d681SAndroid Build Coastguard Worker  %w = zext i16 %v to i64
106*9880d681SAndroid Build Coastguard Worker  ret i64 %w
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi16_a2:
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load16_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
114*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi16_a2(i16 *%p) {
115*9880d681SAndroid Build Coastguard Worker  %v = load i16, i16* %p, align 2
116*9880d681SAndroid Build Coastguard Worker  %w = zext i16 %v to i64
117*9880d681SAndroid Build Coastguard Worker  ret i64 %w
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi16_a4:
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load16_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
125*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi16_a4(i16 *%p) {
126*9880d681SAndroid Build Coastguard Worker  %v = load i16, i16* %p, align 4
127*9880d681SAndroid Build Coastguard Worker  %w = zext i16 %v to i64
128*9880d681SAndroid Build Coastguard Worker  ret i64 %w
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi32_a1:
132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0):p2align=0{{$}}
135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
136*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi32_a1(i32 *%p) {
137*9880d681SAndroid Build Coastguard Worker  %v = load i32, i32* %p, align 1
138*9880d681SAndroid Build Coastguard Worker  %w = zext i32 %v to i64
139*9880d681SAndroid Build Coastguard Worker  ret i64 %w
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi32_a2:
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0):p2align=1{{$}}
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
147*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi32_a2(i32 *%p) {
148*9880d681SAndroid Build Coastguard Worker  %v = load i32, i32* %p, align 2
149*9880d681SAndroid Build Coastguard Worker  %w = zext i32 %v to i64
150*9880d681SAndroid Build Coastguard Worker  ret i64 %w
151*9880d681SAndroid Build Coastguard Worker}
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi32_a4:
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
158*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi32_a4(i32 *%p) {
159*9880d681SAndroid Build Coastguard Worker  %v = load i32, i32* %p, align 4
160*9880d681SAndroid Build Coastguard Worker  %w = zext i32 %v to i64
161*9880d681SAndroid Build Coastguard Worker  ret i64 %w
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ldi32_a8:
165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32{{$}}
166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i64{{$}}
167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop[[NUM]]{{$}}
169*9880d681SAndroid Build Coastguard Workerdefine i64 @ldi32_a8(i32 *%p) {
170*9880d681SAndroid Build Coastguard Worker  %v = load i32, i32* %p, align 8
171*9880d681SAndroid Build Coastguard Worker  %w = zext i32 %v to i64
172*9880d681SAndroid Build Coastguard Worker  ret i64 %w
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Worker; Stores.
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti64_a1:
178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store $drop=, 0($0):p2align=0, $1{{$}}
180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
181*9880d681SAndroid Build Coastguard Workerdefine void @sti64_a1(i64 *%p, i64 %v) {
182*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %p, align 1
183*9880d681SAndroid Build Coastguard Worker  ret void
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti64_a2:
187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store $drop=, 0($0):p2align=1, $1{{$}}
189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
190*9880d681SAndroid Build Coastguard Workerdefine void @sti64_a2(i64 *%p, i64 %v) {
191*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %p, align 2
192*9880d681SAndroid Build Coastguard Worker  ret void
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti64_a4:
196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store $drop=, 0($0):p2align=2, $1{{$}}
198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
199*9880d681SAndroid Build Coastguard Workerdefine void @sti64_a4(i64 *%p, i64 %v) {
200*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %p, align 4
201*9880d681SAndroid Build Coastguard Worker  ret void
202*9880d681SAndroid Build Coastguard Worker}
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; 8 is the default alignment for i32 so no attribute is needed.
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti64_a8:
207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
208*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store $drop=, 0($0), $1{{$}}
209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
210*9880d681SAndroid Build Coastguard Workerdefine void @sti64_a8(i64 *%p, i64 %v) {
211*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %p, align 8
212*9880d681SAndroid Build Coastguard Worker  ret void
213*9880d681SAndroid Build Coastguard Worker}
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker; The default alignment in LLVM is the same as the defualt alignment in wasm.
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti64:
218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store $drop=, 0($0), $1{{$}}
220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
221*9880d681SAndroid Build Coastguard Workerdefine void @sti64(i64 *%p, i64 %v) {
222*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %p
223*9880d681SAndroid Build Coastguard Worker  ret void
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti64_a16:
227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store $drop=, 0($0), $1{{$}}
229*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
230*9880d681SAndroid Build Coastguard Workerdefine void @sti64_a16(i64 *%p, i64 %v) {
231*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %p, align 16
232*9880d681SAndroid Build Coastguard Worker  ret void
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Worker; Truncating stores.
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti8_a1:
238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store8 $drop=, 0($0), $1{{$}}
240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
241*9880d681SAndroid Build Coastguard Workerdefine void @sti8_a1(i8 *%p, i64 %w) {
242*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i8
243*9880d681SAndroid Build Coastguard Worker  store i8 %v, i8* %p, align 1
244*9880d681SAndroid Build Coastguard Worker  ret void
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti8_a2:
248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store8 $drop=, 0($0), $1{{$}}
250*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
251*9880d681SAndroid Build Coastguard Workerdefine void @sti8_a2(i8 *%p, i64 %w) {
252*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i8
253*9880d681SAndroid Build Coastguard Worker  store i8 %v, i8* %p, align 2
254*9880d681SAndroid Build Coastguard Worker  ret void
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti16_a1:
258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store16 $drop=, 0($0):p2align=0, $1{{$}}
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
261*9880d681SAndroid Build Coastguard Workerdefine void @sti16_a1(i16 *%p, i64 %w) {
262*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i16
263*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %p, align 1
264*9880d681SAndroid Build Coastguard Worker  ret void
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti16_a2:
268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store16 $drop=, 0($0), $1{{$}}
270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
271*9880d681SAndroid Build Coastguard Workerdefine void @sti16_a2(i16 *%p, i64 %w) {
272*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i16
273*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %p, align 2
274*9880d681SAndroid Build Coastguard Worker  ret void
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti16_a4:
278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store16 $drop=, 0($0), $1{{$}}
280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
281*9880d681SAndroid Build Coastguard Workerdefine void @sti16_a4(i16 *%p, i64 %w) {
282*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i16
283*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %p, align 4
284*9880d681SAndroid Build Coastguard Worker  ret void
285*9880d681SAndroid Build Coastguard Worker}
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti32_a1:
288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store32 $drop=, 0($0):p2align=0, $1{{$}}
290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
291*9880d681SAndroid Build Coastguard Workerdefine void @sti32_a1(i32 *%p, i64 %w) {
292*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i32
293*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %p, align 1
294*9880d681SAndroid Build Coastguard Worker  ret void
295*9880d681SAndroid Build Coastguard Worker}
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti32_a2:
298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
299*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store32 $drop=, 0($0):p2align=1, $1{{$}}
300*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
301*9880d681SAndroid Build Coastguard Workerdefine void @sti32_a2(i32 *%p, i64 %w) {
302*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i32
303*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %p, align 2
304*9880d681SAndroid Build Coastguard Worker  ret void
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti32_a4:
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store32 $drop=, 0($0), $1{{$}}
310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
311*9880d681SAndroid Build Coastguard Workerdefine void @sti32_a4(i32 *%p, i64 %w) {
312*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i32
313*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %p, align 4
314*9880d681SAndroid Build Coastguard Worker  ret void
315*9880d681SAndroid Build Coastguard Worker}
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sti32_a8:
318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .param i32, i64{{$}}
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i64.store32 $drop=, 0($0), $1{{$}}
320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}}
321*9880d681SAndroid Build Coastguard Workerdefine void @sti32_a8(i32 *%p, i64 %w) {
322*9880d681SAndroid Build Coastguard Worker  %v = trunc i64 %w to i32
323*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %p, align 8
324*9880d681SAndroid Build Coastguard Worker  ret void
325*9880d681SAndroid Build Coastguard Worker}
326