@@ -13,14 +13,13 @@ target triple = "wasm32-unknown-unknown-wasm"
13
13
; CHECK-NEXT: f32.abs $push[[ABS:[0-9]+]]=, $0{{$}}
14
14
; CHECK-NEXT: f32.const $push[[LIMIT:[0-9]+]]=, 0x1p31{{$}}
15
15
; CHECK-NEXT: f32.lt $push[[LT:[0-9]+]]=, $pop[[ABS]], $pop[[LIMIT]]{{$}}
16
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
17
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
18
- ; CHECK-NEXT: i32.trunc_s/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
19
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
20
- ; CHECK-NEXT: BB
21
- ; CHECK-NEXT: end_block
16
+ ; CHECK-NEXT: br_if 0, $pop[[LT]]{{$}}
22
17
; CHECK-NEXT: i32.const $push[[ALT:[0-9]+]]=, -2147483648{{$}}
23
18
; CHECK-NEXT: return $pop[[ALT]]{{$}}
19
+ ; CHECK-NEXT: BB
20
+ ; CHECK-NEXT: end_block
21
+ ; CHECK-NEXT: i32.trunc_s/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
22
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
24
23
define i32 @i32_trunc_s_f32 (float %x ) {
25
24
%a = fptosi float %x to i32
26
25
ret i32 %a
@@ -32,14 +31,16 @@ define i32 @i32_trunc_s_f32(float %x) {
32
31
; CHECK-NEXT: block
33
32
; CHECK-NEXT: f32.const $push[[LIMIT:[0-9]+]]=, 0x1p32{{$}}
34
33
; CHECK-NEXT: f32.lt $push[[LT:[0-9]+]]=, $0, $pop[[LIMIT]]{{$}}
35
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
36
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
37
- ; CHECK-NEXT: i32.trunc_u/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
38
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
39
- ; CHECK-NEXT: BB
40
- ; CHECK-NEXT: end_block
34
+ ; CHECK-NEXT: f32.const $push[[ZERO:[0-9]+]]=, 0x0p0{{$}}
35
+ ; CHECK-NEXT: f32.ge $push[[GE:[0-9]+]]=, $0, $pop[[ZERO]]{{$}}
36
+ ; CHECK-NEXT: i32.and $push[[AND:[0-9]+]]=, $pop[[LT]], $pop[[GE]]{{$}}
37
+ ; CHECK-NEXT: br_if 0, $pop[[AND]]{{$}}
41
38
; CHECK-NEXT: i32.const $push[[ALT:[0-9]+]]=, 0{{$}}
42
39
; CHECK-NEXT: return $pop[[ALT]]{{$}}
40
+ ; CHECK-NEXT: BB
41
+ ; CHECK-NEXT: end_block
42
+ ; CHECK-NEXT: i32.trunc_u/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
43
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
43
44
define i32 @i32_trunc_u_f32 (float %x ) {
44
45
%a = fptoui float %x to i32
45
46
ret i32 %a
@@ -52,14 +53,13 @@ define i32 @i32_trunc_u_f32(float %x) {
52
53
; CHECK-NEXT: f64.abs $push[[ABS:[0-9]+]]=, $0{{$}}
53
54
; CHECK-NEXT: f64.const $push[[LIMIT:[0-9]+]]=, 0x1p31{{$}}
54
55
; CHECK-NEXT: f64.lt $push[[LT:[0-9]+]]=, $pop[[ABS]], $pop[[LIMIT]]{{$}}
55
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
56
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
57
- ; CHECK-NEXT: i32.trunc_s/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
58
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
59
- ; CHECK-NEXT: BB
60
- ; CHECK-NEXT: end_block
56
+ ; CHECK-NEXT: br_if 0, $pop[[LT]]{{$}}
61
57
; CHECK-NEXT: i32.const $push[[ALT:[0-9]+]]=, -2147483648{{$}}
62
58
; CHECK-NEXT: return $pop[[ALT]]{{$}}
59
+ ; CHECK-NEXT: BB
60
+ ; CHECK-NEXT: end_block
61
+ ; CHECK-NEXT: i32.trunc_s/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
62
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
63
63
define i32 @i32_trunc_s_f64 (double %x ) {
64
64
%a = fptosi double %x to i32
65
65
ret i32 %a
@@ -71,14 +71,16 @@ define i32 @i32_trunc_s_f64(double %x) {
71
71
; CHECK-NEXT: block
72
72
; CHECK-NEXT: f64.const $push[[LIMIT:[0-9]+]]=, 0x1p32{{$}}
73
73
; CHECK-NEXT: f64.lt $push[[LT:[0-9]+]]=, $0, $pop[[LIMIT]]{{$}}
74
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
75
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
76
- ; CHECK-NEXT: i32.trunc_u/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
77
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
78
- ; CHECK-NEXT: BB
79
- ; CHECK-NEXT: end_block
74
+ ; CHECK-NEXT: f64.const $push[[ZERO:[0-9]+]]=, 0x0p0{{$}}
75
+ ; CHECK-NEXT: f64.ge $push[[GE:[0-9]+]]=, $0, $pop[[ZERO]]{{$}}
76
+ ; CHECK-NEXT: i32.and $push[[AND:[0-9]+]]=, $pop[[LT]], $pop[[GE]]{{$}}
77
+ ; CHECK-NEXT: br_if 0, $pop[[AND]]{{$}}
80
78
; CHECK-NEXT: i32.const $push[[ALT:[0-9]+]]=, 0{{$}}
81
79
; CHECK-NEXT: return $pop[[ALT]]{{$}}
80
+ ; CHECK-NEXT: BB
81
+ ; CHECK-NEXT: end_block
82
+ ; CHECK-NEXT: i32.trunc_u/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
83
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
82
84
define i32 @i32_trunc_u_f64 (double %x ) {
83
85
%a = fptoui double %x to i32
84
86
ret i32 %a
@@ -91,14 +93,13 @@ define i32 @i32_trunc_u_f64(double %x) {
91
93
; CHECK-NEXT: f32.abs $push[[ABS:[0-9]+]]=, $0{{$}}
92
94
; CHECK-NEXT: f32.const $push[[LIMIT:[0-9]+]]=, 0x1p63{{$}}
93
95
; CHECK-NEXT: f32.lt $push[[LT:[0-9]+]]=, $pop[[ABS]], $pop[[LIMIT]]{{$}}
94
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
95
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
96
- ; CHECK-NEXT: i64.trunc_s/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
97
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
98
- ; CHECK-NEXT: BB
99
- ; CHECK-NEXT: end_block
96
+ ; CHECK-NEXT: br_if 0, $pop[[LT]]{{$}}
100
97
; CHECK-NEXT: i64.const $push[[ALT:[0-9]+]]=, -9223372036854775808{{$}}
101
98
; CHECK-NEXT: return $pop[[ALT]]{{$}}
99
+ ; CHECK-NEXT: BB
100
+ ; CHECK-NEXT: end_block
101
+ ; CHECK-NEXT: i64.trunc_s/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
102
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
102
103
define i64 @i64_trunc_s_f32 (float %x ) {
103
104
%a = fptosi float %x to i64
104
105
ret i64 %a
@@ -110,14 +111,16 @@ define i64 @i64_trunc_s_f32(float %x) {
110
111
; CHECK-NEXT: block
111
112
; CHECK-NEXT: f32.const $push[[LIMIT:[0-9]+]]=, 0x1p64{{$}}
112
113
; CHECK-NEXT: f32.lt $push[[LT:[0-9]+]]=, $0, $pop[[LIMIT]]{{$}}
113
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
114
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
115
- ; CHECK-NEXT: i64.trunc_u/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
116
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
117
- ; CHECK-NEXT: BB
118
- ; CHECK-NEXT: end_block
114
+ ; CHECK-NEXT: f32.const $push[[ZERO:[0-9]+]]=, 0x0p0{{$}}
115
+ ; CHECK-NEXT: f32.ge $push[[GE:[0-9]+]]=, $0, $pop[[ZERO]]{{$}}
116
+ ; CHECK-NEXT: i32.and $push[[AND:[0-9]+]]=, $pop[[LT]], $pop[[GE]]{{$}}
117
+ ; CHECK-NEXT: br_if 0, $pop[[AND]]{{$}}
119
118
; CHECK-NEXT: i64.const $push[[ALT:[0-9]+]]=, 0{{$}}
120
119
; CHECK-NEXT: return $pop[[ALT]]{{$}}
120
+ ; CHECK-NEXT: BB
121
+ ; CHECK-NEXT: end_block
122
+ ; CHECK-NEXT: i64.trunc_u/f32 $push[[NUM:[0-9]+]]=, $0{{$}}
123
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
121
124
define i64 @i64_trunc_u_f32 (float %x ) {
122
125
%a = fptoui float %x to i64
123
126
ret i64 %a
@@ -130,14 +133,13 @@ define i64 @i64_trunc_u_f32(float %x) {
130
133
; CHECK-NEXT: f64.abs $push[[ABS:[0-9]+]]=, $0{{$}}
131
134
; CHECK-NEXT: f64.const $push[[LIMIT:[0-9]+]]=, 0x1p63{{$}}
132
135
; CHECK-NEXT: f64.lt $push[[LT:[0-9]+]]=, $pop[[ABS]], $pop[[LIMIT]]{{$}}
133
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
134
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
135
- ; CHECK-NEXT: i64.trunc_s/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
136
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
137
- ; CHECK-NEXT: BB
138
- ; CHECK-NEXT: end_block
136
+ ; CHECK-NEXT: br_if 0, $pop[[LT]]{{$}}
139
137
; CHECK-NEXT: i64.const $push[[ALT:[0-9]+]]=, -9223372036854775808{{$}}
140
138
; CHECK-NEXT: return $pop[[ALT]]{{$}}
139
+ ; CHECK-NEXT: BB
140
+ ; CHECK-NEXT: end_block
141
+ ; CHECK-NEXT: i64.trunc_s/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
142
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
141
143
define i64 @i64_trunc_s_f64 (double %x ) {
142
144
%a = fptosi double %x to i64
143
145
ret i64 %a
@@ -149,14 +151,16 @@ define i64 @i64_trunc_s_f64(double %x) {
149
151
; CHECK-NEXT: block
150
152
; CHECK-NEXT: f64.const $push[[LIMIT:[0-9]+]]=, 0x1p64{{$}}
151
153
; CHECK-NEXT: f64.lt $push[[LT:[0-9]+]]=, $0, $pop[[LIMIT]]{{$}}
152
- ; CHECK-NEXT: i32.eqz $push[[EQZ:[0-9]+]]=, $pop[[LT]]{{$}}
153
- ; CHECK-NEXT: br_if 0, $pop[[EQZ]]{{$}}
154
- ; CHECK-NEXT: i64.trunc_u/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
155
- ; CHECK-NEXT: return $pop[[NUM]]{{$}}
156
- ; CHECK-NEXT: BB
157
- ; CHECK-NEXT: end_block
154
+ ; CHECK-NEXT: f64.const $push[[ZERO:[0-9]+]]=, 0x0p0{{$}}
155
+ ; CHECK-NEXT: f64.ge $push[[GE:[0-9]+]]=, $0, $pop[[ZERO]]{{$}}
156
+ ; CHECK-NEXT: i32.and $push[[AND:[0-9]+]]=, $pop[[LT]], $pop[[GE]]{{$}}
157
+ ; CHECK-NEXT: br_if 0, $pop[[AND]]{{$}}
158
158
; CHECK-NEXT: i64.const $push[[ALT:[0-9]+]]=, 0{{$}}
159
159
; CHECK-NEXT: return $pop[[ALT]]{{$}}
160
+ ; CHECK-NEXT: BB
161
+ ; CHECK-NEXT: end_block
162
+ ; CHECK-NEXT: i64.trunc_u/f64 $push[[NUM:[0-9]+]]=, $0{{$}}
163
+ ; CHECK-NEXT: return $pop[[NUM]]{{$}}
160
164
define i64 @i64_trunc_u_f64 (double %x ) {
161
165
%a = fptoui double %x to i64
162
166
ret i64 %a
0 commit comments