xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/sincospow-vector-expansion.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -o - %s -verify-machineinstrs -mtriple=aarch64-linux-gnu -mattr=+neon | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_cos_v2f64(<2 x double> %v1) {
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_cos_v2f64:
6*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
7*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
8*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x double> @llvm.cos.v2f64(<2 x double> %v1)
9*9880d681SAndroid Build Coastguard Worker  %2 = fptrunc <2 x double> %1 to <2 x float>
10*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %2
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_sin_v2f64(<2 x double> %v1) {
14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sin_v2f64:
15*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
16*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
17*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x double> @llvm.sin.v2f64(<2 x double> %v1)
18*9880d681SAndroid Build Coastguard Worker  %2 = fptrunc <2 x double> %1 to <2 x float>
19*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %2
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_pow_v2f64(<2 x double> %v1, <2 x double> %v2) {
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pow_v2f64:
24*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
25*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
26*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x double> @llvm.pow.v2f64(<2 x double> %v1, <2 x double> %v2)
27*9880d681SAndroid Build Coastguard Worker  %2 = fptrunc <2 x double> %1 to <2 x float>
28*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %2
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.cos.v2f64(<2 x double>)
32*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.sin.v2f64(<2 x double>)
33*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>)
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_cos_v2f32(<2 x float> %v1) {
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_cos_v2f32:
37*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
38*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
39*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x float> @llvm.cos.v2f32(<2 x float> %v1)
40*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_sin_v2f32(<2 x float> %v1) {
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sin_v2f32:
45*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
46*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
47*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x float> @llvm.sin.v2f32(<2 x float> %v1)
48*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_pow_v2f32(<2 x float> %v1, <2 x float> %v2) {
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pow_v2f32:
53*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
54*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
55*9880d681SAndroid Build Coastguard Worker  %1 = call <2 x float> @llvm.pow.v2f32(<2 x float> %v1, <2 x float> %v2)
56*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.cos.v2f32(<2 x float>)
60*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.sin.v2f32(<2 x float>)
61*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.pow.v2f32(<2 x float>, <2 x float>)
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_cos_v4f32(<4 x float> %v1) {
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_cos_v4f32:
65*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
66*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
67*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
68*9880d681SAndroid Build Coastguard Worker; CHECK: bl cos
69*9880d681SAndroid Build Coastguard Worker  %1 = call <4 x float> @llvm.cos.v4f32(<4 x float> %v1)
70*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_sin_v4f32(<4 x float> %v1) {
74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sin_v4f32:
75*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
76*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
77*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
78*9880d681SAndroid Build Coastguard Worker; CHECK: bl sin
79*9880d681SAndroid Build Coastguard Worker  %1 = call <4 x float> @llvm.sin.v4f32(<4 x float> %v1)
80*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_pow_v4f32(<4 x float> %v1, <4 x float> %v2) {
84*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pow_v4f32:
85*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
86*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
87*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
88*9880d681SAndroid Build Coastguard Worker; CHECK: bl pow
89*9880d681SAndroid Build Coastguard Worker  %1 = call <4 x float> @llvm.pow.v4f32(<4 x float> %v1, <4 x float> %v2)
90*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.cos.v4f32(<4 x float>)
94*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.sin.v4f32(<4 x float>)
95*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>)
96*9880d681SAndroid Build Coastguard Worker
97