9171e1acdc0acf1a243cc23ff95d6e6964524387
[oota-llvm.git] / test / CodeGen / WebAssembly / immediates.ll
1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
2
3 ; Test that basic immediates assemble as expected.
4
5 target datalayout = "e-p:32:32-i64:64-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
7
8 ; CHECK-LABEL: zero_i32:
9 ; CHECK-NEXT: .result i32{{$}}
10 ; CHECK-NEXT: .local
11 ; CHECK-NEXT: i32.const 0{{$}}
12 ; CHECK-NEXT: set_local 0, pop{{$}}
13 ; CHECK-NEXT: return (get_local 0){{$}}
14 define i32 @zero_i32() {
15   ret i32 0
16 }
17
18 ; CHECK-LABEL: one_i32:
19 ; CHECK-NEXT: .result i32{{$}}
20 ; CHECK-NEXT: .local
21 ; CHECK-NEXT: i32.const 1{{$}}
22 ; CHECK-NEXT: set_local 0, pop{{$}}
23 ; CHECK-NEXT: return (get_local 0){{$}}
24 define i32 @one_i32() {
25   ret i32 1
26 }
27
28 ; CHECK-LABEL: max_i32:
29 ; CHECK-NEXT: .result i32{{$}}
30 ; CHECK-NEXT: .local
31 ; CHECK-NEXT: i32.const 2147483647{{$}}
32 ; CHECK-NEXT: set_local 0, pop{{$}}
33 ; CHECK-NEXT: return (get_local 0){{$}}
34 define i32 @max_i32() {
35   ret i32 2147483647
36 }
37
38 ; CHECK-LABEL: min_i32:
39 ; CHECK-NEXT: .result i32{{$}}
40 ; CHECK-NEXT: .local
41 ; CHECK-NEXT: i32.const -2147483648{{$}}
42 ; CHECK-NEXT: set_local 0, pop{{$}}
43 ; CHECK-NEXT: return (get_local 0){{$}}
44 define i32 @min_i32() {
45   ret i32 -2147483648
46 }
47
48 ; CHECK-LABEL: zero_i64:
49 ; CHECK-NEXT: .result i64{{$}}
50 ; CHECK-NEXT: .local
51 ; CHECK-NEXT: i64.const 0{{$}}
52 ; CHECK-NEXT: set_local 0, pop{{$}}
53 ; CHECK-NEXT: return (get_local 0){{$}}
54 define i64 @zero_i64() {
55   ret i64 0
56 }
57
58 ; CHECK-LABEL: one_i64:
59 ; CHECK-NEXT: .result i64{{$}}
60 ; CHECK-NEXT: .local
61 ; CHECK-NEXT: i64.const 1{{$}}
62 ; CHECK-NEXT: set_local 0, pop{{$}}
63 ; CHECK-NEXT: return (get_local 0){{$}}
64 define i64 @one_i64() {
65   ret i64 1
66 }
67
68 ; CHECK-LABEL: max_i64:
69 ; CHECK-NEXT: .result i64{{$}}
70 ; CHECK-NEXT: .local
71 ; CHECK-NEXT: i64.const 9223372036854775807{{$}}
72 ; CHECK-NEXT: set_local 0, pop{{$}}
73 ; CHECK-NEXT: return (get_local 0){{$}}
74 define i64 @max_i64() {
75   ret i64 9223372036854775807
76 }
77
78 ; CHECK-LABEL: min_i64:
79 ; CHECK-NEXT: .result i64{{$}}
80 ; CHECK-NEXT: .local
81 ; CHECK-NEXT: i64.const -9223372036854775808{{$}}
82 ; CHECK-NEXT: set_local 0, pop{{$}}
83 ; CHECK-NEXT: return (get_local 0){{$}}
84 define i64 @min_i64() {
85   ret i64 -9223372036854775808
86 }
87
88 ; CHECK-LABEL: negzero_f32:
89 ; CHECK-NEXT: .result f32{{$}}
90 ; CHECK-NEXT: .local
91 ; CHECK-NEXT: f32.const -0x0p0{{$}}
92 ; CHECK-NEXT: set_local 0, pop{{$}}
93 ; CHECK-NEXT: return (get_local 0){{$}}
94 define float @negzero_f32() {
95   ret float -0.0
96 }
97
98 ; CHECK-LABEL: zero_f32:
99 ; CHECK-NEXT: .result f32{{$}}
100 ; CHECK-NEXT: .local
101 ; CHECK-NEXT: f32.const 0x0p0{{$}}
102 ; CHECK-NEXT: set_local 0, pop{{$}}
103 ; CHECK-NEXT: return (get_local 0){{$}}
104 define float @zero_f32() {
105   ret float 0.0
106 }
107
108 ; CHECK-LABEL: one_f32:
109 ; CHECK-NEXT: .result f32{{$}}
110 ; CHECK-NEXT: .local
111 ; CHECK-NEXT: f32.const 0x1p0{{$}}
112 ; CHECK-NEXT: set_local 0, pop{{$}}
113 ; CHECK-NEXT: return (get_local 0){{$}}
114 define float @one_f32() {
115   ret float 1.0
116 }
117
118 ; CHECK-LABEL: two_f32:
119 ; CHECK-NEXT: .result f32{{$}}
120 ; CHECK-NEXT: .local
121 ; CHECK-NEXT: f32.const 0x1p1{{$}}
122 ; CHECK-NEXT: set_local 0, pop{{$}}
123 ; CHECK-NEXT: return (get_local 0){{$}}
124 define float @two_f32() {
125   ret float 2.0
126 }
127
128 ; CHECK-LABEL: nan_f32:
129 ; CHECK-NEXT: .result f32{{$}}
130 ; CHECK-NEXT: .local
131 ; CHECK-NEXT: f32.const nan
132 ; CHECK-NEXT: set_local 0, pop{{$}}
133 ; CHECK-NEXT: return (get_local 0){{$}}
134 define float @nan_f32() {
135   ret float 0x7FF8000000000000
136 }
137
138 ; CHECK-LABEL: negnan_f32:
139 ; CHECK-NEXT: .result f32{{$}}
140 ; CHECK-NEXT: .local
141 ; CHECK-NEXT: f32.const -nan
142 ; CHECK-NEXT: set_local 0, pop{{$}}
143 ; CHECK-NEXT: return (get_local 0){{$}}
144 define float @negnan_f32() {
145   ret float 0xFFF8000000000000
146 }
147
148 ; CHECK-LABEL: inf_f32:
149 ; CHECK-NEXT: .result f32{{$}}
150 ; CHECK-NEXT: .local
151 ; CHECK-NEXT: f32.const infinity
152 ; CHECK-NEXT: set_local 0, pop{{$}}
153 ; CHECK-NEXT: return (get_local 0){{$}}
154 define float @inf_f32() {
155   ret float 0x7FF0000000000000
156 }
157
158 ; CHECK-LABEL: neginf_f32:
159 ; CHECK-NEXT: .result f32{{$}}
160 ; CHECK-NEXT: .local
161 ; CHECK-NEXT: f32.const -infinity
162 ; CHECK-NEXT: set_local 0, pop{{$}}
163 ; CHECK-NEXT: return (get_local 0){{$}}
164 define float @neginf_f32() {
165   ret float 0xFFF0000000000000
166 }
167
168 ; CHECK-LABEL: negzero_f64:
169 ; CHECK-NEXT: .result f64{{$}}
170 ; CHECK-NEXT: .local
171 ; CHECK-NEXT: f64.const -0x0p0{{$}}
172 ; CHECK-NEXT: set_local 0, pop{{$}}
173 ; CHECK-NEXT: return (get_local 0){{$}}
174 define double @negzero_f64() {
175   ret double -0.0
176 }
177
178 ; CHECK-LABEL: zero_f64:
179 ; CHECK-NEXT: .result f64{{$}}
180 ; CHECK-NEXT: .local
181 ; CHECK-NEXT: f64.const 0x0p0{{$}}
182 ; CHECK-NEXT: set_local 0, pop{{$}}
183 ; CHECK-NEXT: return (get_local 0){{$}}
184 define double @zero_f64() {
185   ret double 0.0
186 }
187
188 ; CHECK-LABEL: one_f64:
189 ; CHECK-NEXT: .result f64{{$}}
190 ; CHECK-NEXT: .local
191 ; CHECK-NEXT: f64.const 0x1p0{{$}}
192 ; CHECK-NEXT: set_local 0, pop{{$}}
193 ; CHECK-NEXT: return (get_local 0){{$}}
194 define double @one_f64() {
195   ret double 1.0
196 }
197
198 ; CHECK-LABEL: two_f64:
199 ; CHECK-NEXT: .result f64{{$}}
200 ; CHECK-NEXT: .local
201 ; CHECK-NEXT: f64.const 0x1p1{{$}}
202 ; CHECK-NEXT: set_local 0, pop{{$}}
203 ; CHECK-NEXT: return (get_local 0){{$}}
204 define double @two_f64() {
205   ret double 2.0
206 }
207
208 ; CHECK-LABEL: nan_f64:
209 ; CHECK-NEXT: .result f64{{$}}
210 ; CHECK-NEXT: .local
211 ; CHECK-NEXT: f64.const nan
212 ; CHECK-NEXT: set_local 0, pop{{$}}
213 ; CHECK-NEXT: return (get_local 0){{$}}
214 define double @nan_f64() {
215   ret double 0x7FF8000000000000
216 }
217
218 ; CHECK-LABEL: negnan_f64:
219 ; CHECK-NEXT: .result f64{{$}}
220 ; CHECK-NEXT: .local
221 ; CHECK-NEXT: f64.const -nan
222 ; CHECK-NEXT: set_local 0, pop{{$}}
223 ; CHECK-NEXT: return (get_local 0){{$}}
224 define double @negnan_f64() {
225   ret double 0xFFF8000000000000
226 }
227
228 ; CHECK-LABEL: inf_f64:
229 ; CHECK-NEXT: .result f64{{$}}
230 ; CHECK-NEXT: .local
231 ; CHECK-NEXT: f64.const infinity
232 ; CHECK-NEXT: set_local 0, pop{{$}}
233 ; CHECK-NEXT: return (get_local 0){{$}}
234 define double @inf_f64() {
235   ret double 0x7FF0000000000000
236 }
237
238 ; CHECK-LABEL: neginf_f64:
239 ; CHECK-NEXT: .result f64{{$}}
240 ; CHECK-NEXT: .local
241 ; CHECK-NEXT: f64.const -infinity
242 ; CHECK-NEXT: set_local 0, pop{{$}}
243 ; CHECK-NEXT: return (get_local 0){{$}}
244 define double @neginf_f64() {
245   ret double 0xFFF0000000000000
246 }