Skip to content

Commit 7b8eee6

Browse files
committed
[RISCV][test] Add sincos-expansion.ll test case
1 parent 5da0445 commit 7b8eee6

File tree

1 file changed

+178
-0
lines changed

1 file changed

+178
-0
lines changed
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc -mtriple=riscv64-linux-gnu -mattr=+d -verify-machineinstrs -o - %s | FileCheck %s
3+
4+
; Test adapted from AArch64. Demonstrates the cases where sin and cos libcalls
5+
; will be combined to a sincos libcall.
6+
7+
define float @test_sincos_f32(float %f) nounwind {
8+
; CHECK-LABEL: test_sincos_f32:
9+
; CHECK: # %bb.0:
10+
; CHECK-NEXT: addi sp, sp, -32
11+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
12+
; CHECK-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
13+
; CHECK-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
14+
; CHECK-NEXT: fmv.s fs0, fa0
15+
; CHECK-NEXT: call sinf
16+
; CHECK-NEXT: fmv.s fs1, fa0
17+
; CHECK-NEXT: fmv.s fa0, fs0
18+
; CHECK-NEXT: call cosf
19+
; CHECK-NEXT: fadd.s fa0, fs1, fa0
20+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
21+
; CHECK-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
22+
; CHECK-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
23+
; CHECK-NEXT: addi sp, sp, 32
24+
; CHECK-NEXT: ret
25+
%sin = call float @sinf(float %f) readnone
26+
%cos = call float @cosf(float %f) readnone
27+
%val = fadd float %sin, %cos
28+
ret float %val
29+
}
30+
31+
define float @test_sincos_f32_errno(float %f) nounwind {
32+
; CHECK-LABEL: test_sincos_f32_errno:
33+
; CHECK: # %bb.0:
34+
; CHECK-NEXT: addi sp, sp, -32
35+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
36+
; CHECK-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
37+
; CHECK-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
38+
; CHECK-NEXT: fmv.s fs0, fa0
39+
; CHECK-NEXT: call sinf
40+
; CHECK-NEXT: fmv.s fs1, fa0
41+
; CHECK-NEXT: fmv.s fa0, fs0
42+
; CHECK-NEXT: call cosf
43+
; CHECK-NEXT: fadd.s fa0, fs1, fa0
44+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
45+
; CHECK-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
46+
; CHECK-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
47+
; CHECK-NEXT: addi sp, sp, 32
48+
; CHECK-NEXT: ret
49+
%sin = call float @sinf(float %f)
50+
%cos = call float @cosf(float %f)
51+
%val = fadd float %sin, %cos
52+
ret float %val
53+
}
54+
55+
define double @test_sincos_f64(double %f) nounwind {
56+
; CHECK-LABEL: test_sincos_f64:
57+
; CHECK: # %bb.0:
58+
; CHECK-NEXT: addi sp, sp, -32
59+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
60+
; CHECK-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
61+
; CHECK-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
62+
; CHECK-NEXT: fmv.d fs0, fa0
63+
; CHECK-NEXT: call sin
64+
; CHECK-NEXT: fmv.d fs1, fa0
65+
; CHECK-NEXT: fmv.d fa0, fs0
66+
; CHECK-NEXT: call cos
67+
; CHECK-NEXT: fadd.d fa0, fs1, fa0
68+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
69+
; CHECK-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
70+
; CHECK-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
71+
; CHECK-NEXT: addi sp, sp, 32
72+
; CHECK-NEXT: ret
73+
%sin = call double @sin(double %f) readnone
74+
%cos = call double @cos(double %f) readnone
75+
%val = fadd double %sin, %cos
76+
ret double %val
77+
}
78+
79+
define double @test_sincos_f64_errno(double %f) nounwind {
80+
; CHECK-LABEL: test_sincos_f64_errno:
81+
; CHECK: # %bb.0:
82+
; CHECK-NEXT: addi sp, sp, -32
83+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
84+
; CHECK-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
85+
; CHECK-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
86+
; CHECK-NEXT: fmv.d fs0, fa0
87+
; CHECK-NEXT: call sin
88+
; CHECK-NEXT: fmv.d fs1, fa0
89+
; CHECK-NEXT: fmv.d fa0, fs0
90+
; CHECK-NEXT: call cos
91+
; CHECK-NEXT: fadd.d fa0, fs1, fa0
92+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
93+
; CHECK-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
94+
; CHECK-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
95+
; CHECK-NEXT: addi sp, sp, 32
96+
; CHECK-NEXT: ret
97+
%sin = call double @sin(double %f)
98+
%cos = call double @cos(double %f)
99+
%val = fadd double %sin, %cos
100+
ret double %val
101+
}
102+
103+
define fp128 @test_sincos_f128(fp128 %f) nounwind {
104+
; CHECK-LABEL: test_sincos_f128:
105+
; CHECK: # %bb.0:
106+
; CHECK-NEXT: addi sp, sp, -48
107+
; CHECK-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
108+
; CHECK-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
109+
; CHECK-NEXT: sd s1, 24(sp) # 8-byte Folded Spill
110+
; CHECK-NEXT: sd s2, 16(sp) # 8-byte Folded Spill
111+
; CHECK-NEXT: sd s3, 8(sp) # 8-byte Folded Spill
112+
; CHECK-NEXT: mv s0, a1
113+
; CHECK-NEXT: mv s1, a0
114+
; CHECK-NEXT: call sinl
115+
; CHECK-NEXT: mv s2, a0
116+
; CHECK-NEXT: mv s3, a1
117+
; CHECK-NEXT: mv a0, s1
118+
; CHECK-NEXT: mv a1, s0
119+
; CHECK-NEXT: call cosl
120+
; CHECK-NEXT: mv a2, a0
121+
; CHECK-NEXT: mv a3, a1
122+
; CHECK-NEXT: mv a0, s2
123+
; CHECK-NEXT: mv a1, s3
124+
; CHECK-NEXT: call __addtf3
125+
; CHECK-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
126+
; CHECK-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
127+
; CHECK-NEXT: ld s1, 24(sp) # 8-byte Folded Reload
128+
; CHECK-NEXT: ld s2, 16(sp) # 8-byte Folded Reload
129+
; CHECK-NEXT: ld s3, 8(sp) # 8-byte Folded Reload
130+
; CHECK-NEXT: addi sp, sp, 48
131+
; CHECK-NEXT: ret
132+
%sin = call fp128 @sinl(fp128 %f) readnone
133+
%cos = call fp128 @cosl(fp128 %f) readnone
134+
%val = fadd fp128 %sin, %cos
135+
ret fp128 %val
136+
}
137+
138+
define fp128 @test_sincos_f128_errno(fp128 %f) nounwind {
139+
; CHECK-LABEL: test_sincos_f128_errno:
140+
; CHECK: # %bb.0:
141+
; CHECK-NEXT: addi sp, sp, -48
142+
; CHECK-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
143+
; CHECK-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
144+
; CHECK-NEXT: sd s1, 24(sp) # 8-byte Folded Spill
145+
; CHECK-NEXT: sd s2, 16(sp) # 8-byte Folded Spill
146+
; CHECK-NEXT: sd s3, 8(sp) # 8-byte Folded Spill
147+
; CHECK-NEXT: mv s0, a1
148+
; CHECK-NEXT: mv s1, a0
149+
; CHECK-NEXT: call sinl
150+
; CHECK-NEXT: mv s2, a0
151+
; CHECK-NEXT: mv s3, a1
152+
; CHECK-NEXT: mv a0, s1
153+
; CHECK-NEXT: mv a1, s0
154+
; CHECK-NEXT: call cosl
155+
; CHECK-NEXT: mv a2, a0
156+
; CHECK-NEXT: mv a3, a1
157+
; CHECK-NEXT: mv a0, s2
158+
; CHECK-NEXT: mv a1, s3
159+
; CHECK-NEXT: call __addtf3
160+
; CHECK-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
161+
; CHECK-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
162+
; CHECK-NEXT: ld s1, 24(sp) # 8-byte Folded Reload
163+
; CHECK-NEXT: ld s2, 16(sp) # 8-byte Folded Reload
164+
; CHECK-NEXT: ld s3, 8(sp) # 8-byte Folded Reload
165+
; CHECK-NEXT: addi sp, sp, 48
166+
; CHECK-NEXT: ret
167+
%sin = call fp128 @sinl(fp128 %f)
168+
%cos = call fp128 @cosl(fp128 %f)
169+
%val = fadd fp128 %sin, %cos
170+
ret fp128 %val
171+
}
172+
173+
declare float @sinf(float)
174+
declare double @sin(double)
175+
declare fp128 @sinl(fp128)
176+
declare float @cosf(float)
177+
declare double @cos(double)
178+
declare fp128 @cosl(fp128)

0 commit comments

Comments
 (0)