4
4
define i1 @test_is_inf_or_nan (double %arg ) {
5
5
; CHECK-LABEL: test_is_inf_or_nan:
6
6
; CHECK: // %bb.0:
7
- ; CHECK-NEXT: fabs d0, d0
8
- ; CHECK-NEXT: mov x8, #9218868437227405312 // =0x7ff0000000000000
9
- ; CHECK-NEXT: fmov d1, x8
10
- ; CHECK-NEXT: fcmp d0, d1
11
- ; CHECK-NEXT: cset w8, eq
12
- ; CHECK-NEXT: csinc w0, w8, wzr, vc
7
+ ; CHECK-NEXT: fmov x9, d0
8
+ ; CHECK-NEXT: mov x8, #9218868437227405311 // =0x7fefffffffffffff
9
+ ; CHECK-NEXT: and x9, x9, #0x7fffffffffffffff
10
+ ; CHECK-NEXT: cmp x9, x8
11
+ ; CHECK-NEXT: cset w0, gt
13
12
; CHECK-NEXT: ret
14
13
%abs = tail call double @llvm.fabs.f64 (double %arg )
15
14
%ret = fcmp ueq double %abs , 0x7FF0000000000000
@@ -19,12 +18,11 @@ define i1 @test_is_inf_or_nan(double %arg) {
19
18
define i1 @test_is_not_inf_or_nan (double %arg ) {
20
19
; CHECK-LABEL: test_is_not_inf_or_nan:
21
20
; CHECK: // %bb.0:
22
- ; CHECK-NEXT: fabs d0 , d0
21
+ ; CHECK-NEXT: fmov x9 , d0
23
22
; CHECK-NEXT: mov x8, #9218868437227405312 // =0x7ff0000000000000
24
- ; CHECK-NEXT: fmov d1, x8
25
- ; CHECK-NEXT: fcmp d0, d1
26
- ; CHECK-NEXT: cset w8, mi
27
- ; CHECK-NEXT: csinc w0, w8, wzr, le
23
+ ; CHECK-NEXT: and x9, x9, #0x7fffffffffffffff
24
+ ; CHECK-NEXT: cmp x9, x8
25
+ ; CHECK-NEXT: cset w0, lt
28
26
; CHECK-NEXT: ret
29
27
%abs = tail call double @llvm.fabs.f64 (double %arg )
30
28
%ret = fcmp one double %abs , 0x7FF0000000000000
@@ -63,12 +61,9 @@ define <vscale x 2 x i1> @test_vec_is_inf_or_nan(<vscale x 2 x double> %arg) {
63
61
; CHECK-LABEL: test_vec_is_inf_or_nan:
64
62
; CHECK: // %bb.0:
65
63
; CHECK-NEXT: ptrue p0.d
66
- ; CHECK-NEXT: mov x8, #9218868437227405312 // =0x7ff0000000000000
67
- ; CHECK-NEXT: mov z1.d, x8
68
- ; CHECK-NEXT: fabs z0.d, p0/m, z0.d
69
- ; CHECK-NEXT: fcmuo p1.d, p0/z, z0.d, z1.d
70
- ; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, z1.d
71
- ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
64
+ ; CHECK-NEXT: mov z1.d, #0x7ff0000000000000
65
+ ; CHECK-NEXT: and z0.d, z0.d, #0x7fffffffffffffff
66
+ ; CHECK-NEXT: cmpge p0.d, p0/z, z0.d, z1.d
72
67
; CHECK-NEXT: ret
73
68
%abs = tail call <vscale x 2 x double > @llvm.fabs.nxv2f64 (<vscale x 2 x double > %arg )
74
69
%ret = fcmp ueq <vscale x 2 x double > %abs , splat (double 0x7FF0000000000000 )
@@ -79,12 +74,9 @@ define <vscale x 2 x i1> @test_vec_is_not_inf_or_nan(<vscale x 2 x double> %arg)
79
74
; CHECK-LABEL: test_vec_is_not_inf_or_nan:
80
75
; CHECK: // %bb.0:
81
76
; CHECK-NEXT: ptrue p0.d
82
- ; CHECK-NEXT: mov x8, #9218868437227405312 // =0x7ff0000000000000
83
- ; CHECK-NEXT: mov z1.d, x8
84
- ; CHECK-NEXT: fabs z0.d, p0/m, z0.d
85
- ; CHECK-NEXT: fcmgt p1.d, p0/z, z1.d, z0.d
86
- ; CHECK-NEXT: fcmgt p0.d, p0/z, z0.d, z1.d
87
- ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
77
+ ; CHECK-NEXT: mov z1.d, #0x7ff0000000000000
78
+ ; CHECK-NEXT: and z0.d, z0.d, #0x7fffffffffffffff
79
+ ; CHECK-NEXT: cmpgt p0.d, p0/z, z1.d, z0.d
88
80
; CHECK-NEXT: ret
89
81
%abs = tail call <vscale x 2 x double > @llvm.fabs.nxv2f64 (<vscale x 2 x double > %arg )
90
82
%ret = fcmp one <vscale x 2 x double > %abs , splat (double 0x7FF0000000000000 )
@@ -122,29 +114,14 @@ define <vscale x 2 x i1> @test_vec_is_not_inf(<vscale x 2 x double> %arg) {
122
114
define i1 @test_fp128_is_inf_or_nan (fp128 %arg ) {
123
115
; CHECK-LABEL: test_fp128_is_inf_or_nan:
124
116
; CHECK: // %bb.0:
125
- ; CHECK-NEXT: sub sp, sp, #64
126
- ; CHECK-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
127
- ; CHECK-NEXT: .cfi_def_cfa_offset 64
128
- ; CHECK-NEXT: .cfi_offset w19, -8
129
- ; CHECK-NEXT: .cfi_offset w30, -16
130
- ; CHECK-NEXT: str q0, [sp, #32]
131
- ; CHECK-NEXT: ldrb w8, [sp, #47]
132
- ; CHECK-NEXT: and w8, w8, #0x7f
133
- ; CHECK-NEXT: strb w8, [sp, #47]
134
- ; CHECK-NEXT: adrp x8, .LCPI8_0
135
- ; CHECK-NEXT: ldr q0, [sp, #32]
136
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI8_0]
137
- ; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
138
- ; CHECK-NEXT: str q1, [sp] // 16-byte Folded Spill
139
- ; CHECK-NEXT: bl __eqtf2
140
- ; CHECK-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
141
- ; CHECK-NEXT: mov w19, w0
142
- ; CHECK-NEXT: bl __unordtf2
143
- ; CHECK-NEXT: cmp w0, #0
144
- ; CHECK-NEXT: ccmp w19, #0, #4, eq
145
- ; CHECK-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
146
- ; CHECK-NEXT: cset w0, eq
147
- ; CHECK-NEXT: add sp, sp, #64
117
+ ; CHECK-NEXT: mov x8, #9223090561878065151 // =0x7ffeffffffffffff
118
+ ; CHECK-NEXT: str q0, [sp, #-16]!
119
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
120
+ ; CHECK-NEXT: ldr x9, [sp, #8]
121
+ ; CHECK-NEXT: and x9, x9, #0x7fffffffffffffff
122
+ ; CHECK-NEXT: cmp x9, x8
123
+ ; CHECK-NEXT: cset w0, gt
124
+ ; CHECK-NEXT: add sp, sp, #16
148
125
; CHECK-NEXT: ret
149
126
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
150
127
%ret = fcmp ueq fp128 %abs , 0xL00000000000000007FFF000000000000
@@ -154,29 +131,14 @@ define i1 @test_fp128_is_inf_or_nan(fp128 %arg) {
154
131
define i1 @test_fp128_is_not_inf_or_nan (fp128 %arg ) {
155
132
; CHECK-LABEL: test_fp128_is_not_inf_or_nan:
156
133
; CHECK: // %bb.0:
157
- ; CHECK-NEXT: sub sp, sp, #64
158
- ; CHECK-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
159
- ; CHECK-NEXT: .cfi_def_cfa_offset 64
160
- ; CHECK-NEXT: .cfi_offset w19, -8
161
- ; CHECK-NEXT: .cfi_offset w30, -16
162
- ; CHECK-NEXT: str q0, [sp, #32]
163
- ; CHECK-NEXT: ldrb w8, [sp, #47]
164
- ; CHECK-NEXT: and w8, w8, #0x7f
165
- ; CHECK-NEXT: strb w8, [sp, #47]
166
- ; CHECK-NEXT: adrp x8, .LCPI9_0
167
- ; CHECK-NEXT: ldr q0, [sp, #32]
168
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI9_0]
169
- ; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
170
- ; CHECK-NEXT: str q1, [sp] // 16-byte Folded Spill
171
- ; CHECK-NEXT: bl __eqtf2
172
- ; CHECK-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
173
- ; CHECK-NEXT: mov w19, w0
174
- ; CHECK-NEXT: bl __unordtf2
175
- ; CHECK-NEXT: cmp w0, #0
176
- ; CHECK-NEXT: ccmp w19, #0, #4, eq
177
- ; CHECK-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
178
- ; CHECK-NEXT: cset w0, ne
179
- ; CHECK-NEXT: add sp, sp, #64
134
+ ; CHECK-NEXT: mov x8, #9223090561878065152 // =0x7fff000000000000
135
+ ; CHECK-NEXT: str q0, [sp, #-16]!
136
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
137
+ ; CHECK-NEXT: ldr x9, [sp, #8]
138
+ ; CHECK-NEXT: and x9, x9, #0x7fffffffffffffff
139
+ ; CHECK-NEXT: cmp x9, x8
140
+ ; CHECK-NEXT: cset w0, lt
141
+ ; CHECK-NEXT: add sp, sp, #16
180
142
; CHECK-NEXT: ret
181
143
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
182
144
%ret = fcmp one fp128 %abs , 0xL00000000000000007FFF000000000000
@@ -186,22 +148,14 @@ define i1 @test_fp128_is_not_inf_or_nan(fp128 %arg) {
186
148
define i1 @test_fp128_is_inf (fp128 %arg ) {
187
149
; CHECK-LABEL: test_fp128_is_inf:
188
150
; CHECK: // %bb.0:
189
- ; CHECK-NEXT: sub sp, sp, #32
190
- ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
191
- ; CHECK-NEXT: .cfi_def_cfa_offset 32
192
- ; CHECK-NEXT: .cfi_offset w30, -16
193
- ; CHECK-NEXT: str q0, [sp]
194
- ; CHECK-NEXT: ldrb w8, [sp, #15]
195
- ; CHECK-NEXT: and w8, w8, #0x7f
196
- ; CHECK-NEXT: strb w8, [sp, #15]
197
- ; CHECK-NEXT: adrp x8, .LCPI10_0
198
- ; CHECK-NEXT: ldr q0, [sp]
199
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI10_0]
200
- ; CHECK-NEXT: bl __eqtf2
201
- ; CHECK-NEXT: cmp w0, #0
202
- ; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
151
+ ; CHECK-NEXT: str q0, [sp, #-16]!
152
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
153
+ ; CHECK-NEXT: ldp x9, x8, [sp], #16
154
+ ; CHECK-NEXT: and x8, x8, #0x7fffffffffffffff
155
+ ; CHECK-NEXT: eor x8, x8, #0x7fff000000000000
156
+ ; CHECK-NEXT: orr x8, x9, x8
157
+ ; CHECK-NEXT: cmp x8, #0
203
158
; CHECK-NEXT: cset w0, eq
204
- ; CHECK-NEXT: add sp, sp, #32
205
159
; CHECK-NEXT: ret
206
160
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
207
161
%ret = fcmp oeq fp128 %abs , 0xL00000000000000007FFF000000000000
@@ -211,22 +165,14 @@ define i1 @test_fp128_is_inf(fp128 %arg) {
211
165
define i1 @test_fp128_is_not_inf (fp128 %arg ) {
212
166
; CHECK-LABEL: test_fp128_is_not_inf:
213
167
; CHECK: // %bb.0:
214
- ; CHECK-NEXT: sub sp, sp, #32
215
- ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
216
- ; CHECK-NEXT: .cfi_def_cfa_offset 32
217
- ; CHECK-NEXT: .cfi_offset w30, -16
218
- ; CHECK-NEXT: str q0, [sp]
219
- ; CHECK-NEXT: ldrb w8, [sp, #15]
220
- ; CHECK-NEXT: and w8, w8, #0x7f
221
- ; CHECK-NEXT: strb w8, [sp, #15]
222
- ; CHECK-NEXT: adrp x8, .LCPI11_0
223
- ; CHECK-NEXT: ldr q0, [sp]
224
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI11_0]
225
- ; CHECK-NEXT: bl __netf2
226
- ; CHECK-NEXT: cmp w0, #0
227
- ; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
168
+ ; CHECK-NEXT: str q0, [sp, #-16]!
169
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
170
+ ; CHECK-NEXT: ldp x9, x8, [sp], #16
171
+ ; CHECK-NEXT: and x8, x8, #0x7fffffffffffffff
172
+ ; CHECK-NEXT: eor x8, x8, #0x7fff000000000000
173
+ ; CHECK-NEXT: orr x8, x9, x8
174
+ ; CHECK-NEXT: cmp x8, #0
228
175
; CHECK-NEXT: cset w0, ne
229
- ; CHECK-NEXT: add sp, sp, #32
230
176
; CHECK-NEXT: ret
231
177
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
232
178
%ret = fcmp une fp128 %abs , 0xL00000000000000007FFF000000000000
0 commit comments