Skip to content

Commit 91f4a78

Browse files
committed
[SDAG] Add pre-commit tests. NFC.
1 parent b17348c commit 91f4a78

File tree

3 files changed

+569
-0
lines changed

3 files changed

+569
-0
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc -mtriple=aarch64 < %s | FileCheck %s
3+
4+
define i1 @test_is_inf_or_nan(double %arg) {
5+
; CHECK-LABEL: test_is_inf_or_nan:
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
13+
; CHECK-NEXT: ret
14+
%abs = tail call double @llvm.fabs.f64(double %arg)
15+
%ret = fcmp ueq double %abs, 0x7FF0000000000000
16+
ret i1 %ret
17+
}
18+
19+
define i1 @test_is_not_inf_or_nan(double %arg) {
20+
; CHECK-LABEL: test_is_not_inf_or_nan:
21+
; CHECK: // %bb.0:
22+
; CHECK-NEXT: fabs d0, d0
23+
; 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
28+
; CHECK-NEXT: ret
29+
%abs = tail call double @llvm.fabs.f64(double %arg)
30+
%ret = fcmp one double %abs, 0x7FF0000000000000
31+
ret i1 %ret
32+
}
33+
34+
define i1 @test_is_inf(double %arg) {
35+
; CHECK-LABEL: test_is_inf:
36+
; CHECK: // %bb.0:
37+
; CHECK-NEXT: fabs d0, d0
38+
; CHECK-NEXT: mov x8, #9218868437227405312 // =0x7ff0000000000000
39+
; CHECK-NEXT: fmov d1, x8
40+
; CHECK-NEXT: fcmp d0, d1
41+
; CHECK-NEXT: cset w0, eq
42+
; CHECK-NEXT: ret
43+
%abs = tail call double @llvm.fabs.f64(double %arg)
44+
%ret = fcmp oeq double %abs, 0x7FF0000000000000
45+
ret i1 %ret
46+
}
47+
48+
define i1 @test_is_not_inf(double %arg) {
49+
; CHECK-LABEL: test_is_not_inf:
50+
; CHECK: // %bb.0:
51+
; CHECK-NEXT: fabs d0, d0
52+
; CHECK-NEXT: mov x8, #9218868437227405312 // =0x7ff0000000000000
53+
; CHECK-NEXT: fmov d1, x8
54+
; CHECK-NEXT: fcmp d0, d1
55+
; CHECK-NEXT: cset w0, ne
56+
; CHECK-NEXT: ret
57+
%abs = tail call double @llvm.fabs.f64(double %arg)
58+
%ret = fcmp une double %abs, 0x7FF0000000000000
59+
ret i1 %ret
60+
}
61+
62+
define i1 @test_fp128_is_inf_or_nan(fp128 %arg) {
63+
; CHECK-LABEL: test_fp128_is_inf_or_nan:
64+
; 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
88+
; CHECK-NEXT: ret
89+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
90+
%ret = fcmp ueq fp128 %abs, 0xL00000000000000007FFF000000000000
91+
ret i1 %ret
92+
}
93+
94+
define i1 @test_fp128_is_not_inf_or_nan(fp128 %arg) {
95+
; CHECK-LABEL: test_fp128_is_not_inf_or_nan:
96+
; 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
120+
; CHECK-NEXT: ret
121+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
122+
%ret = fcmp one fp128 %abs, 0xL00000000000000007FFF000000000000
123+
ret i1 %ret
124+
}
125+
126+
define i1 @test_fp128_is_inf(fp128 %arg) {
127+
; CHECK-LABEL: test_fp128_is_inf:
128+
; 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
143+
; CHECK-NEXT: cset w0, eq
144+
; CHECK-NEXT: add sp, sp, #32
145+
; CHECK-NEXT: ret
146+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
147+
%ret = fcmp oeq fp128 %abs, 0xL00000000000000007FFF000000000000
148+
ret i1 %ret
149+
}
150+
151+
define i1 @test_fp128_is_not_inf(fp128 %arg) {
152+
; CHECK-LABEL: test_fp128_is_not_inf:
153+
; 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
168+
; CHECK-NEXT: cset w0, ne
169+
; CHECK-NEXT: add sp, sp, #32
170+
; CHECK-NEXT: ret
171+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
172+
%ret = fcmp une fp128 %abs, 0xL00000000000000007FFF000000000000
173+
ret i1 %ret
174+
}
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc -mtriple=riscv64 -mattr=+f,+d < %s | FileCheck %s
3+
4+
define i1 @test_is_inf_or_nan(double %arg) {
5+
; CHECK-LABEL: test_is_inf_or_nan:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: fclass.d a0, fa0
8+
; CHECK-NEXT: andi a0, a0, 897
9+
; CHECK-NEXT: snez a0, a0
10+
; CHECK-NEXT: ret
11+
%abs = tail call double @llvm.fabs.f64(double %arg)
12+
%ret = fcmp ueq double %abs, 0x7FF0000000000000
13+
ret i1 %ret
14+
}
15+
16+
define i1 @test_is_not_inf_or_nan(double %arg) {
17+
; CHECK-LABEL: test_is_not_inf_or_nan:
18+
; CHECK: # %bb.0:
19+
; CHECK-NEXT: lui a0, %hi(.LCPI1_0)
20+
; CHECK-NEXT: fld fa5, %lo(.LCPI1_0)(a0)
21+
; CHECK-NEXT: fabs.d fa4, fa0
22+
; CHECK-NEXT: flt.d a0, fa4, fa5
23+
; CHECK-NEXT: ret
24+
%abs = tail call double @llvm.fabs.f64(double %arg)
25+
%ret = fcmp one double %abs, 0x7FF0000000000000
26+
ret i1 %ret
27+
}
28+
29+
define i1 @test_is_inf(double %arg) {
30+
; CHECK-LABEL: test_is_inf:
31+
; CHECK: # %bb.0:
32+
; CHECK-NEXT: fclass.d a0, fa0
33+
; CHECK-NEXT: andi a0, a0, 129
34+
; CHECK-NEXT: snez a0, a0
35+
; CHECK-NEXT: ret
36+
%abs = tail call double @llvm.fabs.f64(double %arg)
37+
%ret = fcmp oeq double %abs, 0x7FF0000000000000
38+
ret i1 %ret
39+
}
40+
41+
define i1 @test_is_not_inf(double %arg) {
42+
; CHECK-LABEL: test_is_not_inf:
43+
; CHECK: # %bb.0:
44+
; CHECK-NEXT: lui a0, %hi(.LCPI3_0)
45+
; CHECK-NEXT: fld fa5, %lo(.LCPI3_0)(a0)
46+
; CHECK-NEXT: fabs.d fa4, fa0
47+
; CHECK-NEXT: feq.d a0, fa4, fa5
48+
; CHECK-NEXT: xori a0, a0, 1
49+
; CHECK-NEXT: ret
50+
%abs = tail call double @llvm.fabs.f64(double %arg)
51+
%ret = fcmp une double %abs, 0x7FF0000000000000
52+
ret i1 %ret
53+
}
54+
55+
define i1 @test_fp128_is_inf_or_nan(fp128 %arg) {
56+
; CHECK-LABEL: test_fp128_is_inf_or_nan:
57+
; CHECK: # %bb.0:
58+
; CHECK-NEXT: addi sp, sp, -48
59+
; CHECK-NEXT: .cfi_def_cfa_offset 48
60+
; CHECK-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
61+
; CHECK-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
62+
; CHECK-NEXT: sd s1, 24(sp) # 8-byte Folded Spill
63+
; CHECK-NEXT: sd s2, 16(sp) # 8-byte Folded Spill
64+
; CHECK-NEXT: sd s3, 8(sp) # 8-byte Folded Spill
65+
; CHECK-NEXT: .cfi_offset ra, -8
66+
; CHECK-NEXT: .cfi_offset s0, -16
67+
; CHECK-NEXT: .cfi_offset s1, -24
68+
; CHECK-NEXT: .cfi_offset s2, -32
69+
; CHECK-NEXT: .cfi_offset s3, -40
70+
; CHECK-NEXT: mv s0, a0
71+
; CHECK-NEXT: slli a1, a1, 1
72+
; CHECK-NEXT: srli s1, a1, 1
73+
; CHECK-NEXT: lui s2, 32767
74+
; CHECK-NEXT: slli s2, s2, 36
75+
; CHECK-NEXT: mv a1, s1
76+
; CHECK-NEXT: li a2, 0
77+
; CHECK-NEXT: mv a3, s2
78+
; CHECK-NEXT: call __eqtf2
79+
; CHECK-NEXT: seqz s3, a0
80+
; CHECK-NEXT: mv a0, s0
81+
; CHECK-NEXT: mv a1, s1
82+
; CHECK-NEXT: li a2, 0
83+
; CHECK-NEXT: mv a3, s2
84+
; CHECK-NEXT: call __unordtf2
85+
; CHECK-NEXT: snez a0, a0
86+
; CHECK-NEXT: or a0, a0, s3
87+
; CHECK-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
88+
; CHECK-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
89+
; CHECK-NEXT: ld s1, 24(sp) # 8-byte Folded Reload
90+
; CHECK-NEXT: ld s2, 16(sp) # 8-byte Folded Reload
91+
; CHECK-NEXT: ld s3, 8(sp) # 8-byte Folded Reload
92+
; CHECK-NEXT: addi sp, sp, 48
93+
; CHECK-NEXT: ret
94+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
95+
%ret = fcmp ueq fp128 %abs, 0xL00000000000000007FFF000000000000
96+
ret i1 %ret
97+
}
98+
99+
define i1 @test_fp128_is_not_inf_or_nan(fp128 %arg) {
100+
; CHECK-LABEL: test_fp128_is_not_inf_or_nan:
101+
; CHECK: # %bb.0:
102+
; CHECK-NEXT: addi sp, sp, -48
103+
; CHECK-NEXT: .cfi_def_cfa_offset 48
104+
; CHECK-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
105+
; CHECK-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
106+
; CHECK-NEXT: sd s1, 24(sp) # 8-byte Folded Spill
107+
; CHECK-NEXT: sd s2, 16(sp) # 8-byte Folded Spill
108+
; CHECK-NEXT: sd s3, 8(sp) # 8-byte Folded Spill
109+
; CHECK-NEXT: .cfi_offset ra, -8
110+
; CHECK-NEXT: .cfi_offset s0, -16
111+
; CHECK-NEXT: .cfi_offset s1, -24
112+
; CHECK-NEXT: .cfi_offset s2, -32
113+
; CHECK-NEXT: .cfi_offset s3, -40
114+
; CHECK-NEXT: mv s0, a0
115+
; CHECK-NEXT: slli a1, a1, 1
116+
; CHECK-NEXT: srli s1, a1, 1
117+
; CHECK-NEXT: lui s2, 32767
118+
; CHECK-NEXT: slli s2, s2, 36
119+
; CHECK-NEXT: mv a1, s1
120+
; CHECK-NEXT: li a2, 0
121+
; CHECK-NEXT: mv a3, s2
122+
; CHECK-NEXT: call __eqtf2
123+
; CHECK-NEXT: snez s3, a0
124+
; CHECK-NEXT: mv a0, s0
125+
; CHECK-NEXT: mv a1, s1
126+
; CHECK-NEXT: li a2, 0
127+
; CHECK-NEXT: mv a3, s2
128+
; CHECK-NEXT: call __unordtf2
129+
; CHECK-NEXT: seqz a0, a0
130+
; CHECK-NEXT: and a0, a0, s3
131+
; CHECK-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
132+
; CHECK-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
133+
; CHECK-NEXT: ld s1, 24(sp) # 8-byte Folded Reload
134+
; CHECK-NEXT: ld s2, 16(sp) # 8-byte Folded Reload
135+
; CHECK-NEXT: ld s3, 8(sp) # 8-byte Folded Reload
136+
; CHECK-NEXT: addi sp, sp, 48
137+
; CHECK-NEXT: ret
138+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
139+
%ret = fcmp one fp128 %abs, 0xL00000000000000007FFF000000000000
140+
ret i1 %ret
141+
}
142+
143+
define i1 @test_fp128_is_inf(fp128 %arg) {
144+
; CHECK-LABEL: test_fp128_is_inf:
145+
; CHECK: # %bb.0:
146+
; CHECK-NEXT: addi sp, sp, -16
147+
; CHECK-NEXT: .cfi_def_cfa_offset 16
148+
; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
149+
; CHECK-NEXT: .cfi_offset ra, -8
150+
; CHECK-NEXT: slli a1, a1, 1
151+
; CHECK-NEXT: srli a1, a1, 1
152+
; CHECK-NEXT: lui a3, 32767
153+
; CHECK-NEXT: slli a3, a3, 36
154+
; CHECK-NEXT: li a2, 0
155+
; CHECK-NEXT: call __eqtf2
156+
; CHECK-NEXT: seqz a0, a0
157+
; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
158+
; CHECK-NEXT: addi sp, sp, 16
159+
; CHECK-NEXT: ret
160+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
161+
%ret = fcmp oeq fp128 %abs, 0xL00000000000000007FFF000000000000
162+
ret i1 %ret
163+
}
164+
165+
define i1 @test_fp128_is_not_inf(fp128 %arg) {
166+
; CHECK-LABEL: test_fp128_is_not_inf:
167+
; CHECK: # %bb.0:
168+
; CHECK-NEXT: addi sp, sp, -16
169+
; CHECK-NEXT: .cfi_def_cfa_offset 16
170+
; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
171+
; CHECK-NEXT: .cfi_offset ra, -8
172+
; CHECK-NEXT: slli a1, a1, 1
173+
; CHECK-NEXT: srli a1, a1, 1
174+
; CHECK-NEXT: lui a3, 32767
175+
; CHECK-NEXT: slli a3, a3, 36
176+
; CHECK-NEXT: li a2, 0
177+
; CHECK-NEXT: call __netf2
178+
; CHECK-NEXT: snez a0, a0
179+
; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
180+
; CHECK-NEXT: addi sp, sp, 16
181+
; CHECK-NEXT: ret
182+
%abs = tail call fp128 @llvm.fabs.f128(fp128 %arg)
183+
%ret = fcmp une fp128 %abs, 0xL00000000000000007FFF000000000000
184+
ret i1 %ret
185+
}

0 commit comments

Comments
 (0)