1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
3 ; Test that basic immediates assemble as expected.
5 target datalayout = "e-p:32:32-i64:64-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
8 ; CHECK-LABEL: zero_i32:
9 ; CHECK-NEXT: .result i32{{$}}
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() {
18 ; CHECK-LABEL: one_i32:
19 ; CHECK-NEXT: .result i32{{$}}
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() {
28 ; CHECK-LABEL: max_i32:
29 ; CHECK-NEXT: .result i32{{$}}
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() {
38 ; CHECK-LABEL: min_i32:
39 ; CHECK-NEXT: .result i32{{$}}
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() {
48 ; CHECK-LABEL: zero_i64:
49 ; CHECK-NEXT: .result i64{{$}}
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() {
58 ; CHECK-LABEL: one_i64:
59 ; CHECK-NEXT: .result i64{{$}}
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() {
68 ; CHECK-LABEL: max_i64:
69 ; CHECK-NEXT: .result i64{{$}}
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
78 ; CHECK-LABEL: min_i64:
79 ; CHECK-NEXT: .result i64{{$}}
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
88 ; CHECK-LABEL: negzero_f32:
89 ; CHECK-NEXT: .result f32{{$}}
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() {
98 ; CHECK-LABEL: zero_f32:
99 ; CHECK-NEXT: .result f32{{$}}
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() {
108 ; CHECK-LABEL: one_f32:
109 ; CHECK-NEXT: .result f32{{$}}
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() {
118 ; CHECK-LABEL: two_f32:
119 ; CHECK-NEXT: .result f32{{$}}
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() {
128 ; CHECK-LABEL: nan_f32:
129 ; CHECK-NEXT: .result f32{{$}}
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
138 ; CHECK-LABEL: negnan_f32:
139 ; CHECK-NEXT: .result f32{{$}}
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
148 ; CHECK-LABEL: inf_f32:
149 ; CHECK-NEXT: .result f32{{$}}
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
158 ; CHECK-LABEL: neginf_f32:
159 ; CHECK-NEXT: .result f32{{$}}
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
168 ; CHECK-LABEL: negzero_f64:
169 ; CHECK-NEXT: .result f64{{$}}
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() {
178 ; CHECK-LABEL: zero_f64:
179 ; CHECK-NEXT: .result f64{{$}}
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() {
188 ; CHECK-LABEL: one_f64:
189 ; CHECK-NEXT: .result f64{{$}}
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() {
198 ; CHECK-LABEL: two_f64:
199 ; CHECK-NEXT: .result f64{{$}}
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() {
208 ; CHECK-LABEL: nan_f64:
209 ; CHECK-NEXT: .result f64{{$}}
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
218 ; CHECK-LABEL: negnan_f64:
219 ; CHECK-NEXT: .result f64{{$}}
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
228 ; CHECK-LABEL: inf_f64:
229 ; CHECK-NEXT: .result f64{{$}}
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
238 ; CHECK-LABEL: neginf_f64:
239 ; CHECK-NEXT: .result f64{{$}}
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