blob: 58c56e14705fa7dfb0184ecb55e2eff395d2d0d3 [file] [log] [blame]
Scott Michel314acc22007-12-19 20:50:49 +00001; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s
2; RUN: grep dfa %t1.s | count 2 &&
3; RUN: grep dfs %t1.s | count 2 &&
4; RUN: grep dfm %t1.s | count 6 &&
5; RUN: grep dfma %t1.s | count 2 &&
6; RUN: grep dfms %t1.s | count 2 &&
7; RUN: grep dfnms %t1.s | count 4
8;
9; This file includes double precision floating point arithmetic instructions
10
11define double @fadd(double %arg1, double %arg2) {
12 %A = add double %arg1, %arg2
13 ret double %A
14}
15
16define <2 x double> @fadd_vec(<2 x double> %arg1, <2 x double> %arg2) {
17 %A = add <2 x double> %arg1, %arg2
18 ret <2 x double> %A
19}
20
21define double @fsub(double %arg1, double %arg2) {
22 %A = sub double %arg1, %arg2
23 ret double %A
24}
25
26define <2 x double> @fsub_vec(<2 x double> %arg1, <2 x double> %arg2) {
27 %A = sub <2 x double> %arg1, %arg2
28 ret <2 x double> %A
29}
30
31define double @fmul(double %arg1, double %arg2) {
32 %A = mul double %arg1, %arg2
33 ret double %A
34}
35
36define <2 x double> @fmul_vec(<2 x double> %arg1, <2 x double> %arg2) {
37 %A = mul <2 x double> %arg1, %arg2
38 ret <2 x double> %A
39}
40
41define double @fma(double %arg1, double %arg2, double %arg3) {
42 %A = mul double %arg1, %arg2
43 %B = add double %A, %arg3
44 ret double %B
45}
46
47define <2 x double> @fma_vec(<2 x double> %arg1, <2 x double> %arg2, <2 x double> %arg3) {
48 %A = mul <2 x double> %arg1, %arg2
49 %B = add <2 x double> %A, %arg3
50 ret <2 x double> %B
51}
52
53define double @fms(double %arg1, double %arg2, double %arg3) {
54 %A = mul double %arg1, %arg2
55 %B = sub double %A, %arg3
56 ret double %B
57}
58
59define <2 x double> @fms_vec(<2 x double> %arg1, <2 x double> %arg2, <2 x double> %arg3) {
60 %A = mul <2 x double> %arg1, %arg2
61 %B = sub <2 x double> %A, %arg3
62 ret <2 x double> %B
63}
64
65; - (a * b - c)
66define double @d_fnms_1(double %arg1, double %arg2, double %arg3) {
67 %A = mul double %arg1, %arg2
68 %B = sub double %A, %arg3
69 %C = sub double -0.000000e+00, %B ; <double> [#uses=1]
70 ret double %C
71}
72
73; Annother way of getting fnms
74; - ( a * b ) + c => c - (a * b)
75define double @d_fnms_2(double %arg1, double %arg2, double %arg3) {
76 %A = mul double %arg1, %arg2
77 %B = sub double %arg3, %A
78 ret double %B
79}
80
81; FNMS: - (a * b - c) => c - (a * b)
82define <2 x double> @d_fnms_vec_1(<2 x double> %arg1, <2 x double> %arg2, <2 x double> %arg3) {
83 %A = mul <2 x double> %arg1, %arg2
84 %B = sub <2 x double> %arg3, %A ;
85 ret <2 x double> %B
86}
87
88; Another way to get fnms using a constant vector
89; - ( a * b - c)
90define <2 x double> @d_fnms_vec_2(<2 x double> %arg1, <2 x double> %arg2, <2 x double> %arg3) {
91 %A = mul <2 x double> %arg1, %arg2 ; <<2 x double>> [#uses=1]
92 %B = sub <2 x double> %A, %arg3 ; <<2 x double>> [#uses=1]
93 %C = sub <2 x double> < double -0.00000e+00, double -0.00000e+00 >, %B
94 ret <2 x double> %C
95}
96
97;define double @fdiv_1(double %arg1, double %arg2) {
98; %A = fdiv double %arg1, %arg2 ; <double> [#uses=1]
99; ret double %A
100;}