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
@@ -62,29 +60,14 @@ define i1 @test_is_not_inf(double %arg) {
62
60
define i1 @test_fp128_is_inf_or_nan (fp128 %arg ) {
63
61
; CHECK-LABEL: test_fp128_is_inf_or_nan:
64
62
; CHECK: // %bb.0:
65
- ; CHECK-NEXT: sub sp, sp, #64
66
- ; CHECK-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
67
- ; CHECK-NEXT: .cfi_def_cfa_offset 64
68
- ; CHECK-NEXT: .cfi_offset w19, -8
69
- ; CHECK-NEXT: .cfi_offset w30, -16
70
- ; CHECK-NEXT: str q0, [sp, #32]
71
- ; CHECK-NEXT: ldrb w8, [sp, #47]
72
- ; CHECK-NEXT: and w8, w8, #0x7f
73
- ; CHECK-NEXT: strb w8, [sp, #47]
74
- ; CHECK-NEXT: adrp x8, .LCPI4_0
75
- ; CHECK-NEXT: ldr q0, [sp, #32]
76
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI4_0]
77
- ; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
78
- ; CHECK-NEXT: str q1, [sp] // 16-byte Folded Spill
79
- ; CHECK-NEXT: bl __eqtf2
80
- ; CHECK-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
81
- ; CHECK-NEXT: mov w19, w0
82
- ; CHECK-NEXT: bl __unordtf2
83
- ; CHECK-NEXT: cmp w0, #0
84
- ; CHECK-NEXT: ccmp w19, #0, #4, eq
85
- ; CHECK-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
86
- ; CHECK-NEXT: cset w0, eq
87
- ; CHECK-NEXT: add sp, sp, #64
63
+ ; CHECK-NEXT: mov x8, #9223090561878065151 // =0x7ffeffffffffffff
64
+ ; CHECK-NEXT: str q0, [sp, #-16]!
65
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
66
+ ; CHECK-NEXT: ldr x9, [sp, #8]
67
+ ; CHECK-NEXT: and x9, x9, #0x7fffffffffffffff
68
+ ; CHECK-NEXT: cmp x9, x8
69
+ ; CHECK-NEXT: cset w0, gt
70
+ ; CHECK-NEXT: add sp, sp, #16
88
71
; CHECK-NEXT: ret
89
72
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
90
73
%ret = fcmp ueq fp128 %abs , 0xL00000000000000007FFF000000000000
@@ -94,29 +77,14 @@ define i1 @test_fp128_is_inf_or_nan(fp128 %arg) {
94
77
define i1 @test_fp128_is_not_inf_or_nan (fp128 %arg ) {
95
78
; CHECK-LABEL: test_fp128_is_not_inf_or_nan:
96
79
; CHECK: // %bb.0:
97
- ; CHECK-NEXT: sub sp, sp, #64
98
- ; CHECK-NEXT: stp x30, x19, [sp, #48] // 16-byte Folded Spill
99
- ; CHECK-NEXT: .cfi_def_cfa_offset 64
100
- ; CHECK-NEXT: .cfi_offset w19, -8
101
- ; CHECK-NEXT: .cfi_offset w30, -16
102
- ; CHECK-NEXT: str q0, [sp, #32]
103
- ; CHECK-NEXT: ldrb w8, [sp, #47]
104
- ; CHECK-NEXT: and w8, w8, #0x7f
105
- ; CHECK-NEXT: strb w8, [sp, #47]
106
- ; CHECK-NEXT: adrp x8, .LCPI5_0
107
- ; CHECK-NEXT: ldr q0, [sp, #32]
108
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI5_0]
109
- ; CHECK-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
110
- ; CHECK-NEXT: str q1, [sp] // 16-byte Folded Spill
111
- ; CHECK-NEXT: bl __eqtf2
112
- ; CHECK-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
113
- ; CHECK-NEXT: mov w19, w0
114
- ; CHECK-NEXT: bl __unordtf2
115
- ; CHECK-NEXT: cmp w0, #0
116
- ; CHECK-NEXT: ccmp w19, #0, #4, eq
117
- ; CHECK-NEXT: ldp x30, x19, [sp, #48] // 16-byte Folded Reload
118
- ; CHECK-NEXT: cset w0, ne
119
- ; CHECK-NEXT: add sp, sp, #64
80
+ ; CHECK-NEXT: mov x8, #9223090561878065152 // =0x7fff000000000000
81
+ ; CHECK-NEXT: str q0, [sp, #-16]!
82
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
83
+ ; CHECK-NEXT: ldr x9, [sp, #8]
84
+ ; CHECK-NEXT: and x9, x9, #0x7fffffffffffffff
85
+ ; CHECK-NEXT: cmp x9, x8
86
+ ; CHECK-NEXT: cset w0, lt
87
+ ; CHECK-NEXT: add sp, sp, #16
120
88
; CHECK-NEXT: ret
121
89
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
122
90
%ret = fcmp one fp128 %abs , 0xL00000000000000007FFF000000000000
@@ -126,22 +94,14 @@ define i1 @test_fp128_is_not_inf_or_nan(fp128 %arg) {
126
94
define i1 @test_fp128_is_inf (fp128 %arg ) {
127
95
; CHECK-LABEL: test_fp128_is_inf:
128
96
; CHECK: // %bb.0:
129
- ; CHECK-NEXT: sub sp, sp, #32
130
- ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
131
- ; CHECK-NEXT: .cfi_def_cfa_offset 32
132
- ; CHECK-NEXT: .cfi_offset w30, -16
133
- ; CHECK-NEXT: str q0, [sp]
134
- ; CHECK-NEXT: ldrb w8, [sp, #15]
135
- ; CHECK-NEXT: and w8, w8, #0x7f
136
- ; CHECK-NEXT: strb w8, [sp, #15]
137
- ; CHECK-NEXT: adrp x8, .LCPI6_0
138
- ; CHECK-NEXT: ldr q0, [sp]
139
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI6_0]
140
- ; CHECK-NEXT: bl __eqtf2
141
- ; CHECK-NEXT: cmp w0, #0
142
- ; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
97
+ ; CHECK-NEXT: str q0, [sp, #-16]!
98
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
99
+ ; CHECK-NEXT: ldp x9, x8, [sp], #16
100
+ ; CHECK-NEXT: and x8, x8, #0x7fffffffffffffff
101
+ ; CHECK-NEXT: eor x8, x8, #0x7fff000000000000
102
+ ; CHECK-NEXT: orr x8, x9, x8
103
+ ; CHECK-NEXT: cmp x8, #0
143
104
; CHECK-NEXT: cset w0, eq
144
- ; CHECK-NEXT: add sp, sp, #32
145
105
; CHECK-NEXT: ret
146
106
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
147
107
%ret = fcmp oeq fp128 %abs , 0xL00000000000000007FFF000000000000
@@ -151,22 +111,14 @@ define i1 @test_fp128_is_inf(fp128 %arg) {
151
111
define i1 @test_fp128_is_not_inf (fp128 %arg ) {
152
112
; CHECK-LABEL: test_fp128_is_not_inf:
153
113
; CHECK: // %bb.0:
154
- ; CHECK-NEXT: sub sp, sp, #32
155
- ; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
156
- ; CHECK-NEXT: .cfi_def_cfa_offset 32
157
- ; CHECK-NEXT: .cfi_offset w30, -16
158
- ; CHECK-NEXT: str q0, [sp]
159
- ; CHECK-NEXT: ldrb w8, [sp, #15]
160
- ; CHECK-NEXT: and w8, w8, #0x7f
161
- ; CHECK-NEXT: strb w8, [sp, #15]
162
- ; CHECK-NEXT: adrp x8, .LCPI7_0
163
- ; CHECK-NEXT: ldr q0, [sp]
164
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI7_0]
165
- ; CHECK-NEXT: bl __netf2
166
- ; CHECK-NEXT: cmp w0, #0
167
- ; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
114
+ ; CHECK-NEXT: str q0, [sp, #-16]!
115
+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
116
+ ; CHECK-NEXT: ldp x9, x8, [sp], #16
117
+ ; CHECK-NEXT: and x8, x8, #0x7fffffffffffffff
118
+ ; CHECK-NEXT: eor x8, x8, #0x7fff000000000000
119
+ ; CHECK-NEXT: orr x8, x9, x8
120
+ ; CHECK-NEXT: cmp x8, #0
168
121
; CHECK-NEXT: cset w0, ne
169
- ; CHECK-NEXT: add sp, sp, #32
170
122
; CHECK-NEXT: ret
171
123
%abs = tail call fp128 @llvm.fabs.f128 (fp128 %arg )
172
124
%ret = fcmp une fp128 %abs , 0xL00000000000000007FFF000000000000
0 commit comments