xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/qpx-recipest.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2q -enable-unsafe-fp-math | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=a2q | FileCheck -check-prefix=CHECK-SAFE %s
3*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
4*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.sqrt.v4f64(<4 x double>)
7*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.sqrt.v4f32(<4 x float>)
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @foo(<4 x double> %a, <4 x double> %b) nounwind {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker  %x = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %b)
12*9880d681SAndroid Build Coastguard Worker  %r = fdiv <4 x double> %a, %x
13*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo
16*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsqrte
17*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
18*9880d681SAndroid Build Coastguard Worker; FIXME: We're currently loading two constants here (1.5 and -1.5), and using
19*9880d681SAndroid Build Coastguard Worker;        an qvfmadd instead of a qvfnmsub
20*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
21*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
22*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
23*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
24*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
25*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
26*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
27*9880d681SAndroid Build Coastguard Worker; CHECK: blr
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @foo
30*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fsqrt
31*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fdiv
32*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @foof(<4 x double> %a, <4 x float> %b) nounwind {
36*9880d681SAndroid Build Coastguard Workerentry:
37*9880d681SAndroid Build Coastguard Worker  %x = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %b)
38*9880d681SAndroid Build Coastguard Worker  %y = fpext <4 x float> %x to <4 x double>
39*9880d681SAndroid Build Coastguard Worker  %r = fdiv <4 x double> %a, %y
40*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foof
43*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsqrtes
44*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
45*9880d681SAndroid Build Coastguard Worker; FIXME: We're currently loading two constants here (1.5 and -1.5), and using
46*9880d681SAndroid Build Coastguard Worker;        an qvfmadd instead of a qvfnmsubs
47*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadds
48*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadds
49*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
50*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
51*9880d681SAndroid Build Coastguard Worker; CHECK: blr
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @foof
54*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fsqrts
55*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fdiv
56*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @food(<4 x float> %a, <4 x double> %b) nounwind {
60*9880d681SAndroid Build Coastguard Workerentry:
61*9880d681SAndroid Build Coastguard Worker  %x = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %b)
62*9880d681SAndroid Build Coastguard Worker  %y = fptrunc <4 x double> %x to <4 x float>
63*9880d681SAndroid Build Coastguard Worker  %r = fdiv <4 x float> %a, %y
64*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @food
67*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsqrte
68*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
69*9880d681SAndroid Build Coastguard Worker; FIXME: We're currently loading two constants here (1.5 and -1.5), and using
70*9880d681SAndroid Build Coastguard Worker;        an qvfmadd instead of a qvfnmsub
71*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
72*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
73*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
74*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
75*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
76*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
77*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsp
78*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
79*9880d681SAndroid Build Coastguard Worker; CHECK: blr
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @food
82*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fsqrt
83*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fdivs
84*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @goo(<4 x float> %a, <4 x float> %b) nounwind {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker  %x = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %b)
90*9880d681SAndroid Build Coastguard Worker  %r = fdiv <4 x float> %a, %x
91*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @goo
94*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsqrtes
95*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
96*9880d681SAndroid Build Coastguard Worker; FIXME: We're currently loading two constants here (1.5 and -1.5), and using
97*9880d681SAndroid Build Coastguard Worker;        an qvfmadd instead of a qvfnmsubs
98*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadds
99*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadds
100*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
101*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
102*9880d681SAndroid Build Coastguard Worker; CHECK: blr
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @goo
105*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fsqrts
106*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fdivs
107*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @foo2(<4 x double> %a, <4 x double> %b) nounwind {
111*9880d681SAndroid Build Coastguard Workerentry:
112*9880d681SAndroid Build Coastguard Worker  %r = fdiv <4 x double> %a, %b
113*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo2
116*9880d681SAndroid Build Coastguard Worker; CHECK: qvfre
117*9880d681SAndroid Build Coastguard Worker; CHECK: qvfnmsub
118*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
119*9880d681SAndroid Build Coastguard Worker; CHECK: qvfnmsub
120*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadd
121*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
122*9880d681SAndroid Build Coastguard Worker; CHECK: blr
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @foo2
125*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fdiv
126*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @goo2(<4 x float> %a, <4 x float> %b) nounwind {
130*9880d681SAndroid Build Coastguard Workerentry:
131*9880d681SAndroid Build Coastguard Worker  %r = fdiv <4 x float> %a, %b
132*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @goo2
135*9880d681SAndroid Build Coastguard Worker; CHECK: qvfres
136*9880d681SAndroid Build Coastguard Worker; CHECK: qvfnmsubs
137*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmadds
138*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
139*9880d681SAndroid Build Coastguard Worker; CHECK: blr
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @goo2
142*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fdivs
143*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @foo3(<4 x double> %a) nounwind {
147*9880d681SAndroid Build Coastguard Workerentry:
148*9880d681SAndroid Build Coastguard Worker  %r = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %a)
149*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %r
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo3
152*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsqrte
153*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmul
154*9880d681SAndroid Build Coastguard Worker; FIXME: We're currently loading two constants here (1.5 and -1.5), and using
155*9880d681SAndroid Build Coastguard Worker;        an qvfmadd instead of a qvfnmsub
156*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmadd
157*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfcmpeq
158*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmadd
159*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmul
160*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmul
161*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmadd
162*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmul
163*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmul
164*9880d681SAndroid Build Coastguard Worker; CHECK: qvfsel
165*9880d681SAndroid Build Coastguard Worker; CHECK: blr
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @foo3
168*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fsqrt
169*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @goo3(<4 x float> %a) nounwind {
173*9880d681SAndroid Build Coastguard Workerentry:
174*9880d681SAndroid Build Coastguard Worker  %r = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %a)
175*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %r
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @goo3
178*9880d681SAndroid Build Coastguard Worker; CHECK: qvfrsqrtes
179*9880d681SAndroid Build Coastguard Worker; CHECK: qvfmuls
180*9880d681SAndroid Build Coastguard Worker; FIXME: We're currently loading two constants here (1.5 and -1.5), and using
181*9880d681SAndroid Build Coastguard Worker;        an qvfmadds instead of a qvfnmsubs
182*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmadds
183*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfcmpeq
184*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmadds
185*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmuls
186*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: qvfmuls
187*9880d681SAndroid Build Coastguard Worker; CHECK: qvfsel
188*9880d681SAndroid Build Coastguard Worker; CHECK: blr
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE-LABEL: @goo3
191*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: fsqrts
192*9880d681SAndroid Build Coastguard Worker; CHECK-SAFE: blr
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195