WebAssembly: print immediates
[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-v128:8:128-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
7
8 ; CHECK-LABEL: zero_i32:
9 ; CHECK-NEXT: (setlocal @0 (immediate 0))
10 ; CHECK-NEXT: (return @0)
11 define i32 @zero_i32() {
12   ret i32 0
13 }
14
15 ; CHECK-LABEL: one_i32:
16 ; CHECK-NEXT: (setlocal @0 (immediate 1))
17 ; CHECK-NEXT: (return @0)
18 define i32 @one_i32() {
19   ret i32 1
20 }
21
22 ; CHECK-LABEL: max_i32:
23 ; CHECK-NEXT: (setlocal @0 (immediate 2147483647))
24 ; CHECK-NEXT: (return @0)
25 define i32 @max_i32() {
26   ret i32 2147483647
27 }
28
29 ; CHECK-LABEL: min_i32:
30 ; CHECK-NEXT: (setlocal @0 (immediate -2147483648))
31 ; CHECK-NEXT: (return @0)
32 define i32 @min_i32() {
33   ret i32 -2147483648
34 }
35
36 ; CHECK-LABEL: zero_i64:
37 ; CHECK-NEXT: (setlocal @0 (immediate 0))
38 ; CHECK-NEXT: (return @0)
39 define i64 @zero_i64() {
40   ret i64 0
41 }
42
43 ; CHECK-LABEL: one_i64:
44 ; CHECK-NEXT: (setlocal @0 (immediate 1))
45 ; CHECK-NEXT: (return @0)
46 define i64 @one_i64() {
47   ret i64 1
48 }
49
50 ; CHECK-LABEL: max_i64:
51 ; CHECK-NEXT: (setlocal @0 (immediate 9223372036854775807))
52 ; CHECK-NEXT: (return @0)
53 define i64 @max_i64() {
54   ret i64 9223372036854775807
55 }
56
57 ; CHECK-LABEL: min_i64:
58 ; CHECK-NEXT: (setlocal @0 (immediate -9223372036854775808))
59 ; CHECK-NEXT: (return @0)
60 define i64 @min_i64() {
61   ret i64 -9223372036854775808
62 }
63
64 ; CHECK-LABEL: negzero_f32:
65 ; CHECK-NEXT: (setlocal @0 (immediate -0x0p0))
66 ; CHECK-NEXT: (return @0)
67 define float @negzero_f32() {
68   ret float -0.0
69 }
70
71 ; CHECK-LABEL: zero_f32:
72 ; CHECK-NEXT: (setlocal @0 (immediate 0x0p0))
73 ; CHECK-NEXT: (return @0)
74 define float @zero_f32() {
75   ret float 0.0
76 }
77
78 ; CHECK-LABEL: one_f32:
79 ; CHECK-NEXT: (setlocal @0 (immediate 0x1p0))
80 ; CHECK-NEXT: (return @0)
81 define float @one_f32() {
82   ret float 1.0
83 }
84
85 ; CHECK-LABEL: two_f32:
86 ; CHECK-NEXT: (setlocal @0 (immediate 0x1p1))
87 ; CHECK-NEXT: (return @0)
88 define float @two_f32() {
89   ret float 2.0
90 }
91
92 ; CHECK-LABEL: nan_f32:
93 ; CHECK-NEXT: (setlocal @0 (immediate nan))
94 ; CHECK-NEXT: (return @0)
95 define float @nan_f32() {
96   ret float 0x7FF8000000000000
97 }
98
99 ; CHECK-LABEL: negnan_f32:
100 ; CHECK-NEXT: (setlocal @0 (immediate nan))
101 ; CHECK-NEXT: (return @0)
102 define float @negnan_f32() {
103   ret float 0xFFF8000000000000
104 }
105
106 ; CHECK-LABEL: inf_f32:
107 ; CHECK-NEXT: (setlocal @0 (immediate infinity))
108 ; CHECK-NEXT: (return @0)
109 define float @inf_f32() {
110   ret float 0x7FF0000000000000
111 }
112
113 ; CHECK-LABEL: neginf_f32:
114 ; CHECK-NEXT: (setlocal @0 (immediate -infinity))
115 ; CHECK-NEXT: (return @0)
116 define float @neginf_f32() {
117   ret float 0xFFF0000000000000
118 }
119
120 ; CHECK-LABEL: negzero_f64:
121 ; CHECK-NEXT: (setlocal @0 (immediate -0x0p0))
122 ; CHECK-NEXT: (return @0)
123 define double @negzero_f64() {
124   ret double -0.0
125 }
126
127 ; CHECK-LABEL: zero_f64:
128 ; CHECK-NEXT: (setlocal @0 (immediate 0x0p0))
129 ; CHECK-NEXT: (return @0)
130 define double @zero_f64() {
131   ret double 0.0
132 }
133
134 ; CHECK-LABEL: one_f64:
135 ; CHECK-NEXT: (setlocal @0 (immediate 0x1p0))
136 ; CHECK-NEXT: (return @0)
137 define double @one_f64() {
138   ret double 1.0
139 }
140
141 ; CHECK-LABEL: two_f64:
142 ; CHECK-NEXT: (setlocal @0 (immediate 0x1p1))
143 ; CHECK-NEXT: (return @0)
144 define double @two_f64() {
145   ret double 2.0
146 }
147
148 ; CHECK-LABEL: nan_f64:
149 ; CHECK-NEXT: (setlocal @0 (immediate nan))
150 ; CHECK-NEXT: (return @0)
151 define double @nan_f64() {
152   ret double 0x7FF8000000000000
153 }
154
155 ; CHECK-LABEL: negnan_f64:
156 ; CHECK-NEXT: (setlocal @0 (immediate nan))
157 ; CHECK-NEXT: (return @0)
158 define double @negnan_f64() {
159   ret double 0xFFF8000000000000
160 }
161
162 ; CHECK-LABEL: inf_f64:
163 ; CHECK-NEXT: (setlocal @0 (immediate infinity))
164 ; CHECK-NEXT: (return @0)
165 define double @inf_f64() {
166   ret double 0x7FF0000000000000
167 }
168
169 ; CHECK-LABEL: neginf_f64:
170 ; CHECK-NEXT: (setlocal @0 (immediate -infinity))
171 ; CHECK-NEXT: (return @0)
172 define double @neginf_f64() {
173   ret double 0xFFF0000000000000
174 }