blob: 5af843bcbaacb27aeb764786591c13affcc7ecf7 [file] [log] [blame]
Wouter van Oortmerssen8a9cb242018-08-27 15:45:51 +00001; RUN: llc < %s -mattr=+atomics -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s
Dan Gohmanbb372242016-01-26 03:39:31 +00002
3; Test loads and stores with custom alignment values.
4
5target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
Sam Clegga5908002018-05-10 17:49:11 +00006target triple = "wasm32-unknown-unknown"
Dan Gohmanbb372242016-01-26 03:39:31 +00007
Heejin Ahnd31bc982018-07-09 20:18:21 +00008;===----------------------------------------------------------------------------
9; Loads
10;===----------------------------------------------------------------------------
Heejin Ahn402b4902018-07-02 21:22:59 +000011
Dan Gohmanbb372242016-01-26 03:39:31 +000012; CHECK-LABEL: ldi64_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000013; CHECK-NEXT: .functype ldi64_a1 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000014; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0):p2align=0{{$}}
15; CHECK-NEXT: return $pop[[NUM]]{{$}}
16define i64 @ldi64_a1(i64 *%p) {
17 %v = load i64, i64* %p, align 1
18 ret i64 %v
19}
20
21; CHECK-LABEL: ldi64_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000022; CHECK-NEXT: .functype ldi64_a2 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000023; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0):p2align=1{{$}}
24; CHECK-NEXT: return $pop[[NUM]]{{$}}
25define i64 @ldi64_a2(i64 *%p) {
26 %v = load i64, i64* %p, align 2
27 ret i64 %v
28}
29
30; CHECK-LABEL: ldi64_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000031; CHECK-NEXT: .functype ldi64_a4 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000032; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0):p2align=2{{$}}
33; CHECK-NEXT: return $pop[[NUM]]{{$}}
34define i64 @ldi64_a4(i64 *%p) {
35 %v = load i64, i64* %p, align 4
36 ret i64 %v
37}
38
Dan Gohman04e7fb72016-04-21 23:59:48 +000039; 8 is the default alignment for i64 so no attribute is needed.
Dan Gohmanbb372242016-01-26 03:39:31 +000040
41; CHECK-LABEL: ldi64_a8:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000042; CHECK-NEXT: .functype ldi64_a8 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000043; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
44; CHECK-NEXT: return $pop[[NUM]]{{$}}
45define i64 @ldi64_a8(i64 *%p) {
46 %v = load i64, i64* %p, align 8
47 ret i64 %v
48}
49
Nico Weberb61910b2019-01-09 14:20:20 +000050; The default alignment in LLVM is the same as the default alignment in wasm.
Dan Gohmanbb372242016-01-26 03:39:31 +000051
52; CHECK-LABEL: ldi64:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000053; CHECK-NEXT: .functype ldi64 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000054; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
55; CHECK-NEXT: return $pop[[NUM]]{{$}}
56define i64 @ldi64(i64 *%p) {
57 %v = load i64, i64* %p
58 ret i64 %v
59}
60
Dan Gohman04e7fb72016-04-21 23:59:48 +000061; 16 is greater than the default alignment so it is ignored.
62
Dan Gohmanbb372242016-01-26 03:39:31 +000063; CHECK-LABEL: ldi64_a16:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000064; CHECK-NEXT: .functype ldi64_a16 (i32) -> (i64){{$}}
Dan Gohman04e7fb72016-04-21 23:59:48 +000065; CHECK-NEXT: i64.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000066; CHECK-NEXT: return $pop[[NUM]]{{$}}
67define i64 @ldi64_a16(i64 *%p) {
68 %v = load i64, i64* %p, align 16
69 ret i64 %v
70}
71
Heejin Ahnd31bc982018-07-09 20:18:21 +000072;===----------------------------------------------------------------------------
73; Extending loads
74;===----------------------------------------------------------------------------
Dan Gohmanbb372242016-01-26 03:39:31 +000075
76; CHECK-LABEL: ldi8_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000077; CHECK-NEXT: .functype ldi8_a1 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000078; CHECK-NEXT: i64.load8_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
79; CHECK-NEXT: return $pop[[NUM]]{{$}}
80define i64 @ldi8_a1(i8 *%p) {
81 %v = load i8, i8* %p, align 1
82 %w = zext i8 %v to i64
83 ret i64 %w
84}
85
86; CHECK-LABEL: ldi8_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000087; CHECK-NEXT: .functype ldi8_a2 (i32) -> (i64){{$}}
Dan Gohman04e7fb72016-04-21 23:59:48 +000088; CHECK-NEXT: i64.load8_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000089; CHECK-NEXT: return $pop[[NUM]]{{$}}
90define i64 @ldi8_a2(i8 *%p) {
91 %v = load i8, i8* %p, align 2
92 %w = zext i8 %v to i64
93 ret i64 %w
94}
95
96; CHECK-LABEL: ldi16_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +000097; CHECK-NEXT: .functype ldi16_a1 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +000098; CHECK-NEXT: i64.load16_u $push[[NUM:[0-9]+]]=, 0($0):p2align=0{{$}}
99; CHECK-NEXT: return $pop[[NUM]]{{$}}
100define i64 @ldi16_a1(i16 *%p) {
101 %v = load i16, i16* %p, align 1
102 %w = zext i16 %v to i64
103 ret i64 %w
104}
105
106; CHECK-LABEL: ldi16_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000107; CHECK-NEXT: .functype ldi16_a2 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000108; CHECK-NEXT: i64.load16_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
109; CHECK-NEXT: return $pop[[NUM]]{{$}}
110define i64 @ldi16_a2(i16 *%p) {
111 %v = load i16, i16* %p, align 2
112 %w = zext i16 %v to i64
113 ret i64 %w
114}
115
116; CHECK-LABEL: ldi16_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000117; CHECK-NEXT: .functype ldi16_a4 (i32) -> (i64){{$}}
Dan Gohman04e7fb72016-04-21 23:59:48 +0000118; CHECK-NEXT: i64.load16_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000119; CHECK-NEXT: return $pop[[NUM]]{{$}}
120define i64 @ldi16_a4(i16 *%p) {
121 %v = load i16, i16* %p, align 4
122 %w = zext i16 %v to i64
123 ret i64 %w
124}
125
126; CHECK-LABEL: ldi32_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000127; CHECK-NEXT: .functype ldi32_a1 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000128; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0):p2align=0{{$}}
129; CHECK-NEXT: return $pop[[NUM]]{{$}}
130define i64 @ldi32_a1(i32 *%p) {
131 %v = load i32, i32* %p, align 1
132 %w = zext i32 %v to i64
133 ret i64 %w
134}
135
136; CHECK-LABEL: ldi32_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000137; CHECK-NEXT: .functype ldi32_a2 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000138; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0):p2align=1{{$}}
139; CHECK-NEXT: return $pop[[NUM]]{{$}}
140define i64 @ldi32_a2(i32 *%p) {
141 %v = load i32, i32* %p, align 2
142 %w = zext i32 %v to i64
143 ret i64 %w
144}
145
146; CHECK-LABEL: ldi32_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000147; CHECK-NEXT: .functype ldi32_a4 (i32) -> (i64){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000148; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
149; CHECK-NEXT: return $pop[[NUM]]{{$}}
150define i64 @ldi32_a4(i32 *%p) {
151 %v = load i32, i32* %p, align 4
152 %w = zext i32 %v to i64
153 ret i64 %w
154}
155
156; CHECK-LABEL: ldi32_a8:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000157; CHECK-NEXT: .functype ldi32_a8 (i32) -> (i64){{$}}
Dan Gohman04e7fb72016-04-21 23:59:48 +0000158; CHECK-NEXT: i64.load32_u $push[[NUM:[0-9]+]]=, 0($0){{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000159; CHECK-NEXT: return $pop[[NUM]]{{$}}
160define i64 @ldi32_a8(i32 *%p) {
161 %v = load i32, i32* %p, align 8
162 %w = zext i32 %v to i64
163 ret i64 %w
164}
165
Heejin Ahnd31bc982018-07-09 20:18:21 +0000166;===----------------------------------------------------------------------------
167; Stores
168;===----------------------------------------------------------------------------
Dan Gohmanbb372242016-01-26 03:39:31 +0000169
170; CHECK-LABEL: sti64_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000171; CHECK-NEXT: .functype sti64_a1 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000172; CHECK-NEXT: i64.store 0($0):p2align=0, $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000173; CHECK-NEXT: return{{$}}
174define void @sti64_a1(i64 *%p, i64 %v) {
175 store i64 %v, i64* %p, align 1
176 ret void
177}
178
179; CHECK-LABEL: sti64_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000180; CHECK-NEXT: .functype sti64_a2 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000181; CHECK-NEXT: i64.store 0($0):p2align=1, $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000182; CHECK-NEXT: return{{$}}
183define void @sti64_a2(i64 *%p, i64 %v) {
184 store i64 %v, i64* %p, align 2
185 ret void
186}
187
188; CHECK-LABEL: sti64_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000189; CHECK-NEXT: .functype sti64_a4 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000190; CHECK-NEXT: i64.store 0($0):p2align=2, $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000191; CHECK-NEXT: return{{$}}
192define void @sti64_a4(i64 *%p, i64 %v) {
193 store i64 %v, i64* %p, align 4
194 ret void
195}
196
197; 8 is the default alignment for i32 so no attribute is needed.
198
199; CHECK-LABEL: sti64_a8:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000200; CHECK-NEXT: .functype sti64_a8 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000201; CHECK-NEXT: i64.store 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000202; CHECK-NEXT: return{{$}}
203define void @sti64_a8(i64 *%p, i64 %v) {
204 store i64 %v, i64* %p, align 8
205 ret void
206}
207
Nico Weberb61910b2019-01-09 14:20:20 +0000208; The default alignment in LLVM is the same as the default alignment in wasm.
Dan Gohmanbb372242016-01-26 03:39:31 +0000209
210; CHECK-LABEL: sti64:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000211; CHECK-NEXT: .functype sti64 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000212; CHECK-NEXT: i64.store 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000213; CHECK-NEXT: return{{$}}
214define void @sti64(i64 *%p, i64 %v) {
215 store i64 %v, i64* %p
216 ret void
217}
218
219; CHECK-LABEL: sti64_a16:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000220; CHECK-NEXT: .functype sti64_a16 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000221; CHECK-NEXT: i64.store 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000222; CHECK-NEXT: return{{$}}
223define void @sti64_a16(i64 *%p, i64 %v) {
224 store i64 %v, i64* %p, align 16
225 ret void
226}
227
Heejin Ahnd31bc982018-07-09 20:18:21 +0000228;===----------------------------------------------------------------------------
229; Truncating stores
230;===----------------------------------------------------------------------------
Dan Gohmanbb372242016-01-26 03:39:31 +0000231
232; CHECK-LABEL: sti8_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000233; CHECK-NEXT: .functype sti8_a1 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000234; CHECK-NEXT: i64.store8 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000235; CHECK-NEXT: return{{$}}
236define void @sti8_a1(i8 *%p, i64 %w) {
237 %v = trunc i64 %w to i8
238 store i8 %v, i8* %p, align 1
239 ret void
240}
241
242; CHECK-LABEL: sti8_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000243; CHECK-NEXT: .functype sti8_a2 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000244; CHECK-NEXT: i64.store8 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000245; CHECK-NEXT: return{{$}}
246define void @sti8_a2(i8 *%p, i64 %w) {
247 %v = trunc i64 %w to i8
248 store i8 %v, i8* %p, align 2
249 ret void
250}
251
252; CHECK-LABEL: sti16_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000253; CHECK-NEXT: .functype sti16_a1 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000254; CHECK-NEXT: i64.store16 0($0):p2align=0, $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000255; CHECK-NEXT: return{{$}}
256define void @sti16_a1(i16 *%p, i64 %w) {
257 %v = trunc i64 %w to i16
258 store i16 %v, i16* %p, align 1
259 ret void
260}
261
262; CHECK-LABEL: sti16_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000263; CHECK-NEXT: .functype sti16_a2 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000264; CHECK-NEXT: i64.store16 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000265; CHECK-NEXT: return{{$}}
266define void @sti16_a2(i16 *%p, i64 %w) {
267 %v = trunc i64 %w to i16
268 store i16 %v, i16* %p, align 2
269 ret void
270}
271
272; CHECK-LABEL: sti16_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000273; CHECK-NEXT: .functype sti16_a4 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000274; CHECK-NEXT: i64.store16 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000275; CHECK-NEXT: return{{$}}
276define void @sti16_a4(i16 *%p, i64 %w) {
277 %v = trunc i64 %w to i16
278 store i16 %v, i16* %p, align 4
279 ret void
280}
281
282; CHECK-LABEL: sti32_a1:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000283; CHECK-NEXT: .functype sti32_a1 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000284; CHECK-NEXT: i64.store32 0($0):p2align=0, $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000285; CHECK-NEXT: return{{$}}
286define void @sti32_a1(i32 *%p, i64 %w) {
287 %v = trunc i64 %w to i32
288 store i32 %v, i32* %p, align 1
289 ret void
290}
291
292; CHECK-LABEL: sti32_a2:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000293; CHECK-NEXT: .functype sti32_a2 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000294; CHECK-NEXT: i64.store32 0($0):p2align=1, $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000295; CHECK-NEXT: return{{$}}
296define void @sti32_a2(i32 *%p, i64 %w) {
297 %v = trunc i64 %w to i32
298 store i32 %v, i32* %p, align 2
299 ret void
300}
301
302; CHECK-LABEL: sti32_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000303; CHECK-NEXT: .functype sti32_a4 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000304; CHECK-NEXT: i64.store32 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000305; CHECK-NEXT: return{{$}}
306define void @sti32_a4(i32 *%p, i64 %w) {
307 %v = trunc i64 %w to i32
308 store i32 %v, i32* %p, align 4
309 ret void
310}
311
312; CHECK-LABEL: sti32_a8:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000313; CHECK-NEXT: .functype sti32_a8 (i32, i64) -> (){{$}}
Dan Gohman7f1bdb22016-10-06 22:08:28 +0000314; CHECK-NEXT: i64.store32 0($0), $1{{$}}
Dan Gohmanbb372242016-01-26 03:39:31 +0000315; CHECK-NEXT: return{{$}}
316define void @sti32_a8(i32 *%p, i64 %w) {
317 %v = trunc i64 %w to i32
318 store i32 %v, i32* %p, align 8
319 ret void
320}
Derek Schuff885dc592017-10-05 21:18:42 +0000321
Heejin Ahnd31bc982018-07-09 20:18:21 +0000322;===----------------------------------------------------------------------------
323; Atomic loads
324;===----------------------------------------------------------------------------
325
Heejin Ahn402b4902018-07-02 21:22:59 +0000326; Wasm atomics have the alignment field, but it must always have the type's
327; natural alignment.
328
Derek Schuff885dc592017-10-05 21:18:42 +0000329; CHECK-LABEL: ldi64_atomic_a8:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000330; CHECK-NEXT: .functype ldi64_atomic_a8 (i32) -> (i64){{$}}
Derek Schuff885dc592017-10-05 21:18:42 +0000331; CHECK-NEXT: i64.atomic.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
332; CHECK-NEXT: return $pop[[NUM]]{{$}}
333define i64 @ldi64_atomic_a8(i64 *%p) {
334 %v = load atomic i64, i64* %p seq_cst, align 8
335 ret i64 %v
336}
337
338; 16 is greater than the default alignment so it is ignored.
Heejin Ahnd31bc982018-07-09 20:18:21 +0000339
Derek Schuff885dc592017-10-05 21:18:42 +0000340; CHECK-LABEL: ldi64_atomic_a16:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000341; CHECK-NEXT: .functype ldi64_atomic_a16 (i32) -> (i64){{$}}
Derek Schuff885dc592017-10-05 21:18:42 +0000342; CHECK-NEXT: i64.atomic.load $push[[NUM:[0-9]+]]=, 0($0){{$}}
343; CHECK-NEXT: return $pop[[NUM]]{{$}}
344define i64 @ldi64_atomic_a16(i64 *%p) {
345 %v = load atomic i64, i64* %p seq_cst, align 16
346 ret i64 %v
347}
Heejin Ahn402b4902018-07-02 21:22:59 +0000348
Heejin Ahnd31bc982018-07-09 20:18:21 +0000349;===----------------------------------------------------------------------------
350; Atomic stores
351;===----------------------------------------------------------------------------
352
Heejin Ahn402b4902018-07-02 21:22:59 +0000353; CHECK-LABEL: sti64_atomic_a4:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000354; CHECK-NEXT: .functype sti64_atomic_a4 (i32, i64) -> (){{$}}
Heejin Ahn402b4902018-07-02 21:22:59 +0000355; CHECK-NEXT: i64.atomic.store 0($0), $1{{$}}
356; CHECK-NEXT: return{{$}}
357define void @sti64_atomic_a4(i64 *%p, i64 %v) {
358 store atomic i64 %v, i64* %p seq_cst, align 8
359 ret void
360}
361
362; 16 is greater than the default alignment so it is ignored.
Heejin Ahnd31bc982018-07-09 20:18:21 +0000363
Heejin Ahn402b4902018-07-02 21:22:59 +0000364; CHECK-LABEL: sti64_atomic_a8:
Wouter van Oortmerssen49482f82018-11-19 17:10:36 +0000365; CHECK-NEXT: .functype sti64_atomic_a8 (i32, i64) -> (){{$}}
Heejin Ahn402b4902018-07-02 21:22:59 +0000366; CHECK-NEXT: i64.atomic.store 0($0), $1{{$}}
367; CHECK-NEXT: return{{$}}
368define void @sti64_atomic_a8(i64 *%p, i64 %v) {
369 store atomic i64 %v, i64* %p seq_cst, align 16
370 ret void
371}