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