cef38fd6e9a1f4120d99570924193710bcff4746
[oota-llvm.git] / test / CodeGen / Mips / msa / 3rf_4rf.ll
1 ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck %s
2
3 @llvm_mips_fmadd_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
4 @llvm_mips_fmadd_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
5 @llvm_mips_fmadd_w_ARG3 = global <4 x float> <float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01>, align 16
6 @llvm_mips_fmadd_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
7
8 define void @llvm_mips_fmadd_w_test() nounwind {
9 entry:
10   %0 = load <4 x float>* @llvm_mips_fmadd_w_ARG1
11   %1 = load <4 x float>* @llvm_mips_fmadd_w_ARG2
12   %2 = load <4 x float>* @llvm_mips_fmadd_w_ARG3
13   %3 = tail call <4 x float> @llvm.mips.fmadd.w(<4 x float> %0, <4 x float> %1, <4 x float> %2)
14   store <4 x float> %3, <4 x float>* @llvm_mips_fmadd_w_RES
15   ret void
16 }
17
18 declare <4 x float> @llvm.mips.fmadd.w(<4 x float>, <4 x float>, <4 x float>) nounwind
19
20 ; CHECK: llvm_mips_fmadd_w_test:
21 ; CHECK: ld.w
22 ; CHECK: ld.w
23 ; CHECK: ld.w
24 ; CHECK: fmadd.w
25 ; CHECK: st.w
26 ; CHECK: .size llvm_mips_fmadd_w_test
27 ;
28 @llvm_mips_fmadd_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
29 @llvm_mips_fmadd_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
30 @llvm_mips_fmadd_d_ARG3 = global <2 x double> <double 4.000000e+00, double 5.000000e+00>, align 16
31 @llvm_mips_fmadd_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
32
33 define void @llvm_mips_fmadd_d_test() nounwind {
34 entry:
35   %0 = load <2 x double>* @llvm_mips_fmadd_d_ARG1
36   %1 = load <2 x double>* @llvm_mips_fmadd_d_ARG2
37   %2 = load <2 x double>* @llvm_mips_fmadd_d_ARG3
38   %3 = tail call <2 x double> @llvm.mips.fmadd.d(<2 x double> %0, <2 x double> %1, <2 x double> %2)
39   store <2 x double> %3, <2 x double>* @llvm_mips_fmadd_d_RES
40   ret void
41 }
42
43 declare <2 x double> @llvm.mips.fmadd.d(<2 x double>, <2 x double>, <2 x double>) nounwind
44
45 ; CHECK: llvm_mips_fmadd_d_test:
46 ; CHECK: ld.d
47 ; CHECK: ld.d
48 ; CHECK: ld.d
49 ; CHECK: fmadd.d
50 ; CHECK: st.d
51 ; CHECK: .size llvm_mips_fmadd_d_test
52 ;
53 @llvm_mips_fmsub_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
54 @llvm_mips_fmsub_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
55 @llvm_mips_fmsub_w_ARG3 = global <4 x float> <float 8.000000e+00, float 9.000000e+00, float 1.000000e+01, float 1.100000e+01>, align 16
56 @llvm_mips_fmsub_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
57
58 define void @llvm_mips_fmsub_w_test() nounwind {
59 entry:
60   %0 = load <4 x float>* @llvm_mips_fmsub_w_ARG1
61   %1 = load <4 x float>* @llvm_mips_fmsub_w_ARG2
62   %2 = load <4 x float>* @llvm_mips_fmsub_w_ARG3
63   %3 = tail call <4 x float> @llvm.mips.fmsub.w(<4 x float> %0, <4 x float> %1, <4 x float> %2)
64   store <4 x float> %3, <4 x float>* @llvm_mips_fmsub_w_RES
65   ret void
66 }
67
68 declare <4 x float> @llvm.mips.fmsub.w(<4 x float>, <4 x float>, <4 x float>) nounwind
69
70 ; CHECK: llvm_mips_fmsub_w_test:
71 ; CHECK: ld.w
72 ; CHECK: ld.w
73 ; CHECK: ld.w
74 ; CHECK: fmsub.w
75 ; CHECK: st.w
76 ; CHECK: .size llvm_mips_fmsub_w_test
77 ;
78 @llvm_mips_fmsub_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
79 @llvm_mips_fmsub_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
80 @llvm_mips_fmsub_d_ARG3 = global <2 x double> <double 4.000000e+00, double 5.000000e+00>, align 16
81 @llvm_mips_fmsub_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
82
83 define void @llvm_mips_fmsub_d_test() nounwind {
84 entry:
85   %0 = load <2 x double>* @llvm_mips_fmsub_d_ARG1
86   %1 = load <2 x double>* @llvm_mips_fmsub_d_ARG2
87   %2 = load <2 x double>* @llvm_mips_fmsub_d_ARG3
88   %3 = tail call <2 x double> @llvm.mips.fmsub.d(<2 x double> %0, <2 x double> %1, <2 x double> %2)
89   store <2 x double> %3, <2 x double>* @llvm_mips_fmsub_d_RES
90   ret void
91 }
92
93 declare <2 x double> @llvm.mips.fmsub.d(<2 x double>, <2 x double>, <2 x double>) nounwind
94
95 ; CHECK: llvm_mips_fmsub_d_test:
96 ; CHECK: ld.d
97 ; CHECK: ld.d
98 ; CHECK: ld.d
99 ; CHECK: fmsub.d
100 ; CHECK: st.d
101 ; CHECK: .size llvm_mips_fmsub_d_test
102 ;