annotate test/CodeGen/WebAssembly/userstack.ll @ 128:c347d3398279 default tip

fix
author mir3636
date Wed, 06 Dec 2017 14:37:17 +0900
parents 803732b1fca8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
1 ; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt | FileCheck %s
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
4 target triple = "wasm32-unknown-unknown-wasm"
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
6 declare void @ext_func(i64* %ptr)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
7 declare void @ext_func_i32(i32* %ptr)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
8
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 ; CHECK-LABEL: alloca32:
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 ; Check that there is an extra local for the stack pointer.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
11 ; CHECK: .local i32{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
12 define void @alloca32() noredzone {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
13 ; CHECK-NEXT: get_global $push[[L2:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
14 ; CHECK-NEXT: i32.const $push[[L3:.+]]=, 16
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
15 ; CHECK-NEXT: i32.sub $push[[L9:.+]]=, $pop[[L2]], $pop[[L3]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
16 ; CHECK-NEXT: tee_local $push[[L8:.+]]=, [[SP:.+]], $pop[[L9]]{{$}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
17 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L8]]{{$}}
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 %retval = alloca i32
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
19 ; CHECK: get_local $push[[L4:.+]]=, [[SP]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
20 ; CHECK: i32.const $push[[L0:.+]]=, 0
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
21 ; CHECK: i32.store 12($pop[[L4]]), $pop[[L0]]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 store i32 0, i32* %retval
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
23 ; CHECK: get_local $push[[L6:.+]]=, [[SP]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
24 ; CHECK-NEXT: i32.const $push[[L5:.+]]=, 16
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
25 ; CHECK-NEXT: i32.add $push[[L7:.+]]=, $pop[[L6]], $pop[[L5]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
26 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L7]]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 ret void
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 ; CHECK-LABEL: alloca3264:
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
31 ; CHECK: .local i32{{$}}
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 define void @alloca3264() {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
33 ; CHECK: get_global $push[[L3:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
34 ; CHECK-NEXT: i32.const $push[[L4:.+]]=, 16
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
35 ; CHECK-NEXT: i32.sub $push[[L6:.+]]=, $pop[[L3]], $pop[[L4]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
36 ; CHECK-NEXT: tee_local $push[[L5:.+]]=, [[SP:.+]], $pop[[L6]]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 %r1 = alloca i32
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 %r2 = alloca double
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
39 store i32 0, i32* %r1
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
40 store double 0.0, double* %r2
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
41 ; CHECK-NEXT: i64.const $push[[L1:.+]]=, 0
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
42 ; CHECK-NEXT: i64.store 0($pop[[L5]]), $pop[[L1]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
43 ; CHECK-NEXT: get_local $push[[L2:.+]]=, [[SP]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
44 ; CHECK-NEXT: i32.const $push[[L0:.+]]=, 0
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
45 ; CHECK-NEXT: i32.store 12($pop[[L2]]), $pop[[L0]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
46 ; CHECK-NEXT: return
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 ret void
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 ; CHECK-LABEL: allocarray:
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
51 ; CHECK: .local i32{{$}}
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 define void @allocarray() {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
53 ; CHECK-NEXT: get_global $push[[L4:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
54 ; CHECK-NEXT: i32.const $push[[L5:.+]]=, 144{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
55 ; CHECK-NEXT: i32.sub $push[[L12:.+]]=, $pop[[L4]], $pop[[L5]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
56 ; CHECK-NEXT: tee_local $push[[L11:.+]]=, 0, $pop[[L12]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
57 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L11]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
58 %r = alloca [33 x i32]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
60 ; CHECK: i32.const $push{{.+}}=, 24
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
61 ; CHECK-NEXT: i32.add $push[[L3:.+]]=, $pop{{.+}}, $pop{{.+}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
62 ; CHECK-NEXT: i32.const $push[[L1:.+]]=, 1{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
63 ; CHECK-NEXT: i32.store 0($pop[[L3]]), $pop[[L1]]{{$}}
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
64 ; CHECK-NEXT: get_local $push[[L4:.+]]=, 0{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
65 ; CHECK-NEXT: i32.const $push[[L10:.+]]=, 1{{$}}
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
66 ; CHECK-NEXT: i32.store 12($pop[[L4]]), $pop[[L10]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
67 %p = getelementptr [33 x i32], [33 x i32]* %r, i32 0, i32 0
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 store i32 1, i32* %p
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
69 %p2 = getelementptr [33 x i32], [33 x i32]* %r, i32 0, i32 3
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 store i32 1, i32* %p2
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
72 ; CHECK-NEXT: get_local $push[[L2:.+]]=, [[SP]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
73 ; CHECK-NEXT: i32.const $push[[L7:.+]]=, 144
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
74 ; CHECK-NEXT: i32.add $push[[L8:.+]]=, $pop[[L2]], $pop[[L7]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
75 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L8]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
76 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
77 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
78
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
79 ; CHECK-LABEL: non_mem_use
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
80 define void @non_mem_use(i8** %addr) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
81 ; CHECK: i32.const $push[[L2:.+]]=, 48
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
82 ; CHECK-NEXT: i32.sub $push[[L12:.+]]=, {{.+}}, $pop[[L2]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
83 ; CHECK-NEXT: tee_local $push[[L11:.+]]=, [[SP:.+]], $pop[[L12]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
84 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L11]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
85 %buf = alloca [27 x i8], align 16
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
86 %r = alloca i64
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
87 %r2 = alloca i64
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
88 ; %r is at SP+8
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
89 ; CHECK: get_local $push[[L3:.+]]=, [[SP]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
90 ; CHECK: i32.const $push[[OFF:.+]]=, 8
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
91 ; CHECK-NEXT: i32.add $push[[ARG1:.+]]=, $pop[[L3]], $pop[[OFF]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
92 ; CHECK-NEXT: call ext_func@FUNCTION, $pop[[ARG1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
93 call void @ext_func(i64* %r)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
94 ; %r2 is at SP+0, no add needed
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
95 ; CHECK: get_local $push[[L4:.+]]=, [[SP]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
96 ; CHECK-NEXT: call ext_func@FUNCTION, $pop[[L4]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
97 call void @ext_func(i64* %r2)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
98 ; Use as a value, but in a store
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
99 ; %buf is at SP+16
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
100 ; CHECK: get_local $push[[L5:.+]]=, [[SP]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
101 ; CHECK: i32.const $push[[OFF:.+]]=, 16
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
102 ; CHECK-NEXT: i32.add $push[[VAL:.+]]=, $pop[[L5]], $pop[[OFF]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
103 ; CHECK-NEXT: i32.store 0($pop{{.+}}), $pop[[VAL]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
104 %gep = getelementptr inbounds [27 x i8], [27 x i8]* %buf, i32 0, i32 0
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
105 store i8* %gep, i8** %addr
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 ret void
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 ; CHECK-LABEL: allocarray_inbounds:
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
110 ; CHECK: .local i32{{$}}
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 define void @allocarray_inbounds() {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
112 ; CHECK: get_global $push[[L3:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
113 ; CHECK-NEXT: i32.const $push[[L4:.+]]=, 32{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
114 ; CHECK-NEXT: i32.sub $push[[L11:.+]]=, $pop[[L3]], $pop[[L4]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
115 ; CHECK-NEXT: tee_local $push[[L10:.+]]=, [[SP:.+]], $pop[[L11]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
116 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L10]]{{$}}
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 %r = alloca [5 x i32]
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 ; CHECK: i32.const $push[[L3:.+]]=, 1
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
119 ; CHECK-DAG: i32.store 24(${{.+}}), $pop[[L3]]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 %p = getelementptr inbounds [5 x i32], [5 x i32]* %r, i32 0, i32 0
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 store i32 1, i32* %p
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 ; This store should have both the GEP and the FI folded into it.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
123 ; CHECK-DAG: i32.store 12(${{.+}}), $pop
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 %p2 = getelementptr inbounds [5 x i32], [5 x i32]* %r, i32 0, i32 3
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 store i32 1, i32* %p2
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
126 call void @ext_func(i64* null);
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
127 ; CHECK: call ext_func
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
128 ; CHECK: i32.const $push[[L5:.+]]=, 32{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
129 ; CHECK-NEXT: i32.add $push[[L7:.+]]=, ${{.+}}, $pop[[L5]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
130 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L7]]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 ret void
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 }
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 ; CHECK-LABEL: dynamic_alloca:
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 define void @dynamic_alloca(i32 %alloc) {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
136 ; CHECK: get_global $push[[L13:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
137 ; CHECK-NEXT: tee_local $push[[L12:.+]]=, [[SP:.+]], $pop[[L13]]{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
138 ; Target independent codegen bumps the stack pointer.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
139 ; CHECK: i32.sub
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
140 ; Check that SP is written back to memory after decrement
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
141 ; CHECK: set_global __stack_pointer,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
142 %r = alloca i32, i32 %alloc
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
143 ; Target-independent codegen also calculates the store addr
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
144 ; CHECK: call ext_func_i32@FUNCTION
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
145 call void @ext_func_i32(i32* %r)
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
146 ; CHECK: set_global __stack_pointer, $pop{{.+}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
147 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
148 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
149
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
150 ; CHECK-LABEL: dynamic_alloca_redzone:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
151 define void @dynamic_alloca_redzone(i32 %alloc) {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
152 ; CHECK: get_global $push[[L13:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
153 ; CHECK-NEXT: tee_local $push[[L12:.+]]=, [[SP:.+]], $pop[[L13]]{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
154 ; Target independent codegen bumps the stack pointer
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
155 ; CHECK: i32.sub
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
156 %r = alloca i32, i32 %alloc
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
157 ; CHECK-NEXT: tee_local $push[[L8:.+]]=, {{.+}}, $pop
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
158 ; CHECK: get_local $push[[L7:.+]]=, 0{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
159 ; CHECK-NEXT: i32.const $push[[L6:.+]]=, 0{{$}}
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
160 ; CHECK-NEXT: i32.store 0($pop[[L7]]), $pop[[L6]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
161 store i32 0, i32* %r
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
162 ; CHECK-NEXT: return
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
163 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
164 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
165
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
166 ; CHECK-LABEL: dynamic_static_alloca:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
167 define void @dynamic_static_alloca(i32 %alloc) noredzone {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
168 ; Decrement SP in the prolog by the static amount and writeback to memory.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
169 ; CHECK: get_global $push[[L11:.+]]=, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
170 ; CHECK-NEXT: i32.const $push[[L12:.+]]=, 16
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
171 ; CHECK-NEXT: i32.sub $push[[L23:.+]]=, $pop[[L11]], $pop[[L12]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
172 ; CHECK-NEXT: tee_local $push[[L22:.+]]=, [[SP:.+]], $pop[[L23]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
173 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L22]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
174
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
175 ; Alloc and write to a static alloca
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
176 ; CHECK: get_local $push[[L21:.+]]=, [[SP:.+]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
177 ; CHECK-NEXT: tee_local $push[[pushedFP:.+]]=, [[FP:.+]], $pop[[L21]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
178 ; CHECK-NEXT: i32.const $push[[L0:.+]]=, 101
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
179 ; CHECK-NEXT: i32.store [[static_offset:.+]]($pop[[pushedFP]]), $pop[[L0]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
180 %static = alloca i32
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
181 store volatile i32 101, i32* %static
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
182
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
183 ; Decrement SP in the body by the dynamic amount.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
184 ; CHECK: i32.sub
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
185 ; CHECK: tee_local $push[[L16:.+]]=, [[dynamic_local:.+]], $pop{{.+}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
186 ; CHECK: tee_local $push[[L15:.+]]=, [[other:.+]], $pop[[L16]]{{$}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
187 ; CHECK: set_global __stack_pointer, $pop[[L15]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
188 %dynamic = alloca i32, i32 %alloc
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
189
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
190 ; Ensure we don't modify the frame pointer after assigning it.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
191 ; CHECK-NOT: $[[FP]]=
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
192
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
193 ; Ensure the static address doesn't change after modifying the stack pointer.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
194 ; CHECK: get_local $push[[L17:.+]]=, [[FP]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
195 ; CHECK: i32.const $push[[L7:.+]]=, 102
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
196 ; CHECK-NEXT: i32.store [[static_offset]]($pop[[L17]]), $pop[[L7]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
197 ; CHECK-NEXT: get_local $push[[L9:.+]]=, [[dynamic_local]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
198 ; CHECK-NEXT: i32.const $push[[L8:.+]]=, 103
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
199 ; CHECK-NEXT: i32.store 0($pop[[L9]]), $pop[[L8]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
200 store volatile i32 102, i32* %static
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
201 store volatile i32 103, i32* %dynamic
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
202
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
203 ; Decrement SP in the body by the dynamic amount.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
204 ; CHECK: i32.sub
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
205 ; CHECK: tee_local $push{{.+}}=, [[dynamic2_local:.+]], $pop{{.+}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
206 %dynamic.2 = alloca i32, i32 %alloc
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
207
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
208 ; CHECK-NOT: $[[FP]]=
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
209
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
210 ; Ensure neither the static nor dynamic address changes after the second
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
211 ; modification of the stack pointer.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
212 ; CHECK: get_local $push[[L22:.+]]=, [[FP]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
213 ; CHECK: i32.const $push[[L9:.+]]=, 104
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
214 ; CHECK-NEXT: i32.store [[static_offset]]($pop[[L22]]), $pop[[L9]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
215 ; CHECK-NEXT: get_local $push[[L23:.+]]=, [[dynamic_local]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
216 ; CHECK-NEXT: i32.const $push[[L10:.+]]=, 105
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
217 ; CHECK-NEXT: i32.store 0($pop[[L23]]), $pop[[L10]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
218 ; CHECK-NEXT: get_local $push[[L23:.+]]=, [[dynamic2_local]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
219 ; CHECK-NEXT: i32.const $push[[L11:.+]]=, 106
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
220 ; CHECK-NEXT: i32.store 0($pop[[L23]]), $pop[[L11]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
221 store volatile i32 104, i32* %static
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
222 store volatile i32 105, i32* %dynamic
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
223 store volatile i32 106, i32* %dynamic.2
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
224
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
225 ; Writeback to memory.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
226 ; CHECK: get_local $push[[L24:.+]]=, [[FP]]{{$}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
227 ; CHECK: i32.const $push[[L18:.+]]=, 16
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
228 ; CHECK-NEXT: i32.add $push[[L19:.+]]=, $pop[[L24]], $pop[[L18]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
229 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L19]]
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 ret void
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 }
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
232
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
233 declare i8* @llvm.stacksave()
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
234 declare void @llvm.stackrestore(i8*)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
235
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
236 ; CHECK-LABEL: llvm_stack_builtins:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
237 define void @llvm_stack_builtins(i32 %alloc) noredzone {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
238 ; CHECK: get_global $push[[L11:.+]]=, __stack_pointer{{$}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
239 ; CHECK-NEXT: tee_local $push[[L10:.+]]=, {{.+}}, $pop[[L11]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
240 ; CHECK-NEXT: set_local [[STACK:.+]], $pop[[L10]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
241 %stack = call i8* @llvm.stacksave()
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
242
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
243 ; Ensure we don't reassign the stacksave local
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
244 ; CHECK-NOT: set_local [[STACK]],
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
245 %dynamic = alloca i32, i32 %alloc
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
246
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
247 ; CHECK: get_local $push[[L12:.+]]=, [[STACK]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
248 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L12]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
249 call void @llvm.stackrestore(i8* %stack)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
250
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
251 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
252 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
253
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
254 ; Not actually using the alloca'd variables exposed an issue with register
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
255 ; stackification, where copying the stack pointer into the frame pointer was
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
256 ; moved after the stack pointer was updated for the dynamic alloca.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
257 ; CHECK-LABEL: dynamic_alloca_nouse:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
258 define void @dynamic_alloca_nouse(i32 %alloc) noredzone {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
259 ; CHECK: get_global $push[[L11:.+]]=, __stack_pointer{{$}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
260 ; CHECK-NEXT: tee_local $push[[L10:.+]]=, {{.+}}, $pop[[L11]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
261 ; CHECK-NEXT: set_local [[FP:.+]], $pop[[L10]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
262 %dynamic = alloca i32, i32 %alloc
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
263
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
264 ; CHECK-NOT: set_local [[FP]],
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
265
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
266 ; CHECK: get_local $push[[L12:.+]]=, [[FP]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
267 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L12]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
268 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
269 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
270
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
271 ; The use of the alloca in a phi causes a CopyToReg DAG node to be generated,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
272 ; which has to have special handling because CopyToReg can't have a FI operand
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
273 ; CHECK-LABEL: copytoreg_fi:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
274 define void @copytoreg_fi(i1 %cond, i32* %b) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
275 entry:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
276 ; CHECK: i32.const $push[[L1:.+]]=, 16
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
277 ; CHECK-NEXT: i32.sub $push[[L3:.+]]=, {{.+}}, $pop[[L1]]
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
278 %addr = alloca i32
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
279 ; CHECK: i32.const $push[[OFF:.+]]=, 12
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
280 ; CHECK-NEXT: i32.add $push[[ADDR:.+]]=, $pop[[L3]], $pop[[OFF]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
281 ; CHECK-NEXT: set_local [[COPY:.+]], $pop[[ADDR]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
282 br label %body
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
283 body:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
284 %a = phi i32* [%addr, %entry], [%b, %body]
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
285 store i32 1, i32* %a
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
286 ; CHECK: get_local $push[[L12:.+]]=, [[COPY]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
287 ; CHECK: i32.store 0($pop[[L12]]),
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
288 br i1 %cond, label %body, label %exit
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
289 exit:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
290 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
291 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
292
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
293 declare void @use_i8_star(i8*)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
294 declare i8* @llvm.frameaddress(i32)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
295
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
296 ; Test __builtin_frame_address(0).
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
297 ; CHECK-LABEL: frameaddress_0:
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
298 ; CHECK: get_global $push[[L3:.+]]=, __stack_pointer{{$}}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
299 ; CHECK-NEXT: tee_local $push[[L2:.+]]=, [[FP:.+]], $pop[[L3]]{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
300 ; CHECK-NEXT: call use_i8_star@FUNCTION, $pop[[L2]]
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
301 ; CHECK-NEXT: get_local $push[[L5:.+]]=, [[FP]]
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
302 ; CHECK-NEXT: set_global __stack_pointer, $pop[[L5]]
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
303 define void @frameaddress_0() {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
304 %t = call i8* @llvm.frameaddress(i32 0)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
305 call void @use_i8_star(i8* %t)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
306 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
307 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
308
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
309 ; Test __builtin_frame_address(1).
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
310
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
311 ; CHECK-LABEL: frameaddress_1:
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
312 ; CHECK-NEXT: i32.const $push0=, 0{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
313 ; CHECK-NEXT: call use_i8_star@FUNCTION, $pop0{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
314 ; CHECK-NEXT: return{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
315 define void @frameaddress_1() {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
316 %t = call i8* @llvm.frameaddress(i32 1)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
317 call void @use_i8_star(i8* %t)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
318 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
319 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
320
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
321 ; Test a stack address passed to an inline asm.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
322 ; CHECK-LABEL: inline_asm:
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
323 ; CHECK: get_global {{.+}}, __stack_pointer{{$}}
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
324 ; CHECK: #APP
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
325 ; CHECK-NEXT: # %{{[0-9]+}}{{$}}
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
326 ; CHECK-NEXT: #NO_APP
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
327 define void @inline_asm() {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
328 %tmp = alloca i8
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
329 call void asm sideeffect "# %0", "r"(i8* %tmp)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
330 ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
331 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
332
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
333 ; TODO: test over-aligned alloca