Skip to content

Commit 9a0a56e

Browse files
authored
MSP430: Add test for llvm.sincos intrinsic (#148602)
1 parent 2e75710 commit 9a0a56e

File tree

1 file changed

+352
-0
lines changed

1 file changed

+352
-0
lines changed
Lines changed: 352 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,352 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2+
; RUN: llc -mtriple=msp430-unknown-unknown < %s | FileCheck %s
3+
4+
define { half, half } @test_sincos_f16(half %a) #0 {
5+
; CHECK-LABEL: test_sincos_f16:
6+
; CHECK: ; %bb.0:
7+
; CHECK-NEXT: push r8
8+
; CHECK-NEXT: push r9
9+
; CHECK-NEXT: push r10
10+
; CHECK-NEXT: call #__extendhfsf2
11+
; CHECK-NEXT: mov r12, r10
12+
; CHECK-NEXT: mov r13, r9
13+
; CHECK-NEXT: call #sinf
14+
; CHECK-NEXT: call #__truncsfhf2
15+
; CHECK-NEXT: mov r12, r8
16+
; CHECK-NEXT: mov r10, r12
17+
; CHECK-NEXT: mov r9, r13
18+
; CHECK-NEXT: call #cosf
19+
; CHECK-NEXT: call #__truncsfhf2
20+
; CHECK-NEXT: mov r12, r14
21+
; CHECK-NEXT: mov r8, r12
22+
; CHECK-NEXT: pop r10
23+
; CHECK-NEXT: pop r9
24+
; CHECK-NEXT: pop r8
25+
; CHECK-NEXT: ret
26+
%result = call { half, half } @llvm.sincos.f16(half %a)
27+
ret { half, half } %result
28+
}
29+
30+
define half @test_sincos_f16_only_use_sin(half %a) #0 {
31+
; CHECK-LABEL: test_sincos_f16_only_use_sin:
32+
; CHECK: ; %bb.0:
33+
; CHECK-NEXT: call #__extendhfsf2
34+
; CHECK-NEXT: call #sinf
35+
; CHECK-NEXT: call #__truncsfhf2
36+
; CHECK-NEXT: ret
37+
%result = call { half, half } @llvm.sincos.f16(half %a)
38+
%result.0 = extractvalue { half, half } %result, 0
39+
ret half %result.0
40+
}
41+
42+
define half @test_sincos_f16_only_use_cos(half %a) #0 {
43+
; CHECK-LABEL: test_sincos_f16_only_use_cos:
44+
; CHECK: ; %bb.0:
45+
; CHECK-NEXT: call #__extendhfsf2
46+
; CHECK-NEXT: call #cosf
47+
; CHECK-NEXT: call #__truncsfhf2
48+
; CHECK-NEXT: ret
49+
%result = call { half, half } @llvm.sincos.f16(half %a)
50+
%result.1 = extractvalue { half, half } %result, 1
51+
ret half %result.1
52+
}
53+
54+
define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) #0 {
55+
; CHECK-LABEL: test_sincos_v2f16:
56+
; CHECK: ; %bb.0:
57+
; CHECK-NEXT: push r5
58+
; CHECK-NEXT: push r6
59+
; CHECK-NEXT: push r7
60+
; CHECK-NEXT: push r8
61+
; CHECK-NEXT: push r9
62+
; CHECK-NEXT: push r10
63+
; CHECK-NEXT: mov r12, r7
64+
; CHECK-NEXT: mov r13, r12
65+
; CHECK-NEXT: call #__extendhfsf2
66+
; CHECK-NEXT: mov r12, r10
67+
; CHECK-NEXT: mov r13, r9
68+
; CHECK-NEXT: call #sinf
69+
; CHECK-NEXT: call #__truncsfhf2
70+
; CHECK-NEXT: mov r12, r8
71+
; CHECK-NEXT: mov r7, r12
72+
; CHECK-NEXT: call #__extendhfsf2
73+
; CHECK-NEXT: mov r12, r6
74+
; CHECK-NEXT: mov r13, r5
75+
; CHECK-NEXT: call #cosf
76+
; CHECK-NEXT: call #__truncsfhf2
77+
; CHECK-NEXT: mov r12, r7
78+
; CHECK-NEXT: mov r6, r12
79+
; CHECK-NEXT: mov r5, r13
80+
; CHECK-NEXT: call #sinf
81+
; CHECK-NEXT: call #__truncsfhf2
82+
; CHECK-NEXT: mov r12, r6
83+
; CHECK-NEXT: mov r10, r12
84+
; CHECK-NEXT: mov r9, r13
85+
; CHECK-NEXT: call #cosf
86+
; CHECK-NEXT: call #__truncsfhf2
87+
; CHECK-NEXT: mov r12, r15
88+
; CHECK-NEXT: mov r6, r12
89+
; CHECK-NEXT: mov r8, r13
90+
; CHECK-NEXT: mov r7, r14
91+
; CHECK-NEXT: pop r10
92+
; CHECK-NEXT: pop r9
93+
; CHECK-NEXT: pop r8
94+
; CHECK-NEXT: pop r7
95+
; CHECK-NEXT: pop r6
96+
; CHECK-NEXT: pop r5
97+
; CHECK-NEXT: ret
98+
%result = call { <2 x half>, <2 x half> } @llvm.sincos.v2f16(<2 x half> %a)
99+
ret { <2 x half>, <2 x half> } %result
100+
}
101+
102+
define { float, float } @test_sincos_f32(float %a) #0 {
103+
; CHECK-LABEL: test_sincos_f32:
104+
; CHECK: ; %bb.0:
105+
; CHECK-NEXT: push r7
106+
; CHECK-NEXT: push r8
107+
; CHECK-NEXT: push r9
108+
; CHECK-NEXT: push r10
109+
; CHECK-NEXT: mov r13, r10
110+
; CHECK-NEXT: mov r12, r9
111+
; CHECK-NEXT: call #sinf
112+
; CHECK-NEXT: mov r12, r8
113+
; CHECK-NEXT: mov r13, r7
114+
; CHECK-NEXT: mov r9, r12
115+
; CHECK-NEXT: mov r10, r13
116+
; CHECK-NEXT: call #cosf
117+
; CHECK-NEXT: mov r12, r14
118+
; CHECK-NEXT: mov r13, r15
119+
; CHECK-NEXT: mov r8, r12
120+
; CHECK-NEXT: mov r7, r13
121+
; CHECK-NEXT: pop r10
122+
; CHECK-NEXT: pop r9
123+
; CHECK-NEXT: pop r8
124+
; CHECK-NEXT: pop r7
125+
; CHECK-NEXT: ret
126+
%result = call { float, float } @llvm.sincos.f32(float %a)
127+
ret { float, float } %result
128+
}
129+
130+
define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) #0 {
131+
; CHECK-LABEL: test_sincos_v2f32:
132+
; CHECK: ; %bb.0:
133+
; CHECK-NEXT: push r6
134+
; CHECK-NEXT: push r7
135+
; CHECK-NEXT: push r8
136+
; CHECK-NEXT: push r9
137+
; CHECK-NEXT: push r10
138+
; CHECK-NEXT: mov r12, r10
139+
; CHECK-NEXT: mov 16(r1), r9
140+
; CHECK-NEXT: mov 18(r1), r8
141+
; CHECK-NEXT: mov r9, r12
142+
; CHECK-NEXT: mov r8, r13
143+
; CHECK-NEXT: call #cosf
144+
; CHECK-NEXT: mov r13, 14(r10)
145+
; CHECK-NEXT: mov r12, 12(r10)
146+
; CHECK-NEXT: mov 12(r1), r7
147+
; CHECK-NEXT: mov 14(r1), r6
148+
; CHECK-NEXT: mov r7, r12
149+
; CHECK-NEXT: mov r6, r13
150+
; CHECK-NEXT: call #cosf
151+
; CHECK-NEXT: mov r13, 10(r10)
152+
; CHECK-NEXT: mov r12, 8(r10)
153+
; CHECK-NEXT: mov r9, r12
154+
; CHECK-NEXT: mov r8, r13
155+
; CHECK-NEXT: call #sinf
156+
; CHECK-NEXT: mov r13, 6(r10)
157+
; CHECK-NEXT: mov r12, 4(r10)
158+
; CHECK-NEXT: mov r7, r12
159+
; CHECK-NEXT: mov r6, r13
160+
; CHECK-NEXT: call #sinf
161+
; CHECK-NEXT: mov r13, 2(r10)
162+
; CHECK-NEXT: mov r12, 0(r10)
163+
; CHECK-NEXT: pop r10
164+
; CHECK-NEXT: pop r9
165+
; CHECK-NEXT: pop r8
166+
; CHECK-NEXT: pop r7
167+
; CHECK-NEXT: pop r6
168+
; CHECK-NEXT: ret
169+
%result = call { <2 x float>, <2 x float> } @llvm.sincos.v2f32(<2 x float> %a)
170+
ret { <2 x float>, <2 x float> } %result
171+
}
172+
173+
define { double, double } @test_sincos_f64(double %a) #0 {
174+
; CHECK-LABEL: test_sincos_f64:
175+
; CHECK: ; %bb.0:
176+
; CHECK-NEXT: push r6
177+
; CHECK-NEXT: push r7
178+
; CHECK-NEXT: push r8
179+
; CHECK-NEXT: push r9
180+
; CHECK-NEXT: push r10
181+
; CHECK-NEXT: mov r12, r10
182+
; CHECK-NEXT: mov 12(r1), r9
183+
; CHECK-NEXT: mov 14(r1), r8
184+
; CHECK-NEXT: mov 16(r1), r7
185+
; CHECK-NEXT: mov 18(r1), r6
186+
; CHECK-NEXT: mov r9, r12
187+
; CHECK-NEXT: mov r8, r13
188+
; CHECK-NEXT: mov r7, r14
189+
; CHECK-NEXT: mov r6, r15
190+
; CHECK-NEXT: call #cos
191+
; CHECK-NEXT: mov r15, 14(r10)
192+
; CHECK-NEXT: mov r14, 12(r10)
193+
; CHECK-NEXT: mov r13, 10(r10)
194+
; CHECK-NEXT: mov r12, 8(r10)
195+
; CHECK-NEXT: mov r9, r12
196+
; CHECK-NEXT: mov r8, r13
197+
; CHECK-NEXT: mov r7, r14
198+
; CHECK-NEXT: mov r6, r15
199+
; CHECK-NEXT: call #sin
200+
; CHECK-NEXT: mov r15, 6(r10)
201+
; CHECK-NEXT: mov r14, 4(r10)
202+
; CHECK-NEXT: mov r13, 2(r10)
203+
; CHECK-NEXT: mov r12, 0(r10)
204+
; CHECK-NEXT: pop r10
205+
; CHECK-NEXT: pop r9
206+
; CHECK-NEXT: pop r8
207+
; CHECK-NEXT: pop r7
208+
; CHECK-NEXT: pop r6
209+
; CHECK-NEXT: ret
210+
%result = call { double, double } @llvm.sincos.f64(double %a)
211+
ret { double, double } %result
212+
}
213+
214+
define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {
215+
; CHECK-LABEL: test_sincos_v2f64:
216+
; CHECK: ; %bb.0:
217+
; CHECK-NEXT: push r4
218+
; CHECK-NEXT: push r5
219+
; CHECK-NEXT: push r6
220+
; CHECK-NEXT: push r7
221+
; CHECK-NEXT: push r8
222+
; CHECK-NEXT: push r9
223+
; CHECK-NEXT: push r10
224+
; CHECK-NEXT: mov r12, r10
225+
; CHECK-NEXT: mov 24(r1), r12
226+
; CHECK-NEXT: mov 26(r1), r13
227+
; CHECK-NEXT: mov 28(r1), r7
228+
; CHECK-NEXT: mov 30(r1), r6
229+
; CHECK-NEXT: mov r7, r14
230+
; CHECK-NEXT: mov r6, r15
231+
; CHECK-NEXT: call #cos
232+
; CHECK-NEXT: mov r15, 30(r10)
233+
; CHECK-NEXT: mov r14, 28(r10)
234+
; CHECK-NEXT: mov r13, 26(r10)
235+
; CHECK-NEXT: mov r12, 24(r10)
236+
; CHECK-NEXT: mov 16(r1), r5
237+
; CHECK-NEXT: mov 18(r1), r4
238+
; CHECK-NEXT: mov 20(r1), r9
239+
; CHECK-NEXT: mov 22(r1), r8
240+
; CHECK-NEXT: mov r5, r12
241+
; CHECK-NEXT: mov r4, r13
242+
; CHECK-NEXT: mov r9, r14
243+
; CHECK-NEXT: mov r8, r15
244+
; CHECK-NEXT: call #cos
245+
; CHECK-NEXT: mov r15, 22(r10)
246+
; CHECK-NEXT: mov r14, 20(r10)
247+
; CHECK-NEXT: mov r13, 18(r10)
248+
; CHECK-NEXT: mov r12, 16(r10)
249+
; CHECK-NEXT: mov 24(r1), r12
250+
; CHECK-NEXT: mov 26(r1), r13
251+
; CHECK-NEXT: mov r7, r14
252+
; CHECK-NEXT: mov r6, r15
253+
; CHECK-NEXT: call #sin
254+
; CHECK-NEXT: mov r15, 14(r10)
255+
; CHECK-NEXT: mov r14, 12(r10)
256+
; CHECK-NEXT: mov r13, 10(r10)
257+
; CHECK-NEXT: mov r12, 8(r10)
258+
; CHECK-NEXT: mov r5, r12
259+
; CHECK-NEXT: mov r4, r13
260+
; CHECK-NEXT: mov r9, r14
261+
; CHECK-NEXT: mov r8, r15
262+
; CHECK-NEXT: call #sin
263+
; CHECK-NEXT: mov r15, 6(r10)
264+
; CHECK-NEXT: mov r14, 4(r10)
265+
; CHECK-NEXT: mov r13, 2(r10)
266+
; CHECK-NEXT: mov r12, 0(r10)
267+
; CHECK-NEXT: pop r10
268+
; CHECK-NEXT: pop r9
269+
; CHECK-NEXT: pop r8
270+
; CHECK-NEXT: pop r7
271+
; CHECK-NEXT: pop r6
272+
; CHECK-NEXT: pop r5
273+
; CHECK-NEXT: pop r4
274+
; CHECK-NEXT: ret
275+
%result = call { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %a)
276+
ret { <2 x double>, <2 x double> } %result
277+
}
278+
279+
define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {
280+
; CHECK-LABEL: test_sincos_f128:
281+
; CHECK: ; %bb.0:
282+
; CHECK-NEXT: push r4
283+
; CHECK-NEXT: push r5
284+
; CHECK-NEXT: push r6
285+
; CHECK-NEXT: push r7
286+
; CHECK-NEXT: push r8
287+
; CHECK-NEXT: push r9
288+
; CHECK-NEXT: push r10
289+
; CHECK-NEXT: sub #48, r1
290+
; CHECK-NEXT: mov r12, r10
291+
; CHECK-NEXT: mov 78(r1), r12
292+
; CHECK-NEXT: mov r12, 14(r1)
293+
; CHECK-NEXT: mov 76(r1), r12
294+
; CHECK-NEXT: mov r12, 12(r1)
295+
; CHECK-NEXT: mov 74(r1), r7
296+
; CHECK-NEXT: mov r7, 10(r1)
297+
; CHECK-NEXT: mov 72(r1), r6
298+
; CHECK-NEXT: mov r6, 8(r1)
299+
; CHECK-NEXT: mov 70(r1), r5
300+
; CHECK-NEXT: mov r5, 6(r1)
301+
; CHECK-NEXT: mov 68(r1), r4
302+
; CHECK-NEXT: mov r4, 4(r1)
303+
; CHECK-NEXT: mov 66(r1), r9
304+
; CHECK-NEXT: mov r9, 2(r1)
305+
; CHECK-NEXT: mov 64(r1), r8
306+
; CHECK-NEXT: mov r8, 0(r1)
307+
; CHECK-NEXT: mov r1, r12
308+
; CHECK-NEXT: add #16, r12
309+
; CHECK-NEXT: call #cosl
310+
; CHECK-NEXT: mov 78(r1), r12
311+
; CHECK-NEXT: mov r12, 14(r1)
312+
; CHECK-NEXT: mov 76(r1), r12
313+
; CHECK-NEXT: mov r12, 12(r1)
314+
; CHECK-NEXT: mov r7, 10(r1)
315+
; CHECK-NEXT: mov r6, 8(r1)
316+
; CHECK-NEXT: mov r5, 6(r1)
317+
; CHECK-NEXT: mov r4, 4(r1)
318+
; CHECK-NEXT: mov r9, 2(r1)
319+
; CHECK-NEXT: mov r8, 0(r1)
320+
; CHECK-NEXT: mov r1, r12
321+
; CHECK-NEXT: add #32, r12
322+
; CHECK-NEXT: call #sinl
323+
; CHECK-NEXT: mov 30(r1), 30(r10)
324+
; CHECK-NEXT: mov 28(r1), 28(r10)
325+
; CHECK-NEXT: mov 26(r1), 26(r10)
326+
; CHECK-NEXT: mov 24(r1), 24(r10)
327+
; CHECK-NEXT: mov 22(r1), 22(r10)
328+
; CHECK-NEXT: mov 20(r1), 20(r10)
329+
; CHECK-NEXT: mov 18(r1), 18(r10)
330+
; CHECK-NEXT: mov 16(r1), 16(r10)
331+
; CHECK-NEXT: mov 46(r1), 14(r10)
332+
; CHECK-NEXT: mov 44(r1), 12(r10)
333+
; CHECK-NEXT: mov 42(r1), 10(r10)
334+
; CHECK-NEXT: mov 40(r1), 8(r10)
335+
; CHECK-NEXT: mov 38(r1), 6(r10)
336+
; CHECK-NEXT: mov 36(r1), 4(r10)
337+
; CHECK-NEXT: mov 34(r1), 2(r10)
338+
; CHECK-NEXT: mov 32(r1), 0(r10)
339+
; CHECK-NEXT: add #48, r1
340+
; CHECK-NEXT: pop r10
341+
; CHECK-NEXT: pop r9
342+
; CHECK-NEXT: pop r8
343+
; CHECK-NEXT: pop r7
344+
; CHECK-NEXT: pop r6
345+
; CHECK-NEXT: pop r5
346+
; CHECK-NEXT: pop r4
347+
; CHECK-NEXT: ret
348+
%result = call { fp128, fp128 } @llvm.sincos.f16(fp128 %a)
349+
ret { fp128, fp128 } %result
350+
}
351+
352+
attributes #0 = { nounwind }

0 commit comments

Comments
 (0)