8a9d389687276cedc61c26131c6dcf1ef1acb1e6
[oota-llvm.git] / test / CodeGen / Mips / msa / vec.ll
1 ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck %s
2
3 ; Test the MSA intrinsics that are encoded with the VEC instruction format.
4
5 @llvm_mips_and_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
6 @llvm_mips_and_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
7 @llvm_mips_and_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
8
9 define void @llvm_mips_and_v_b_test() nounwind {
10 entry:
11   %0 = load <16 x i8>* @llvm_mips_and_v_b_ARG1
12   %1 = load <16 x i8>* @llvm_mips_and_v_b_ARG2
13   %2 = bitcast <16 x i8> %0 to <16 x i8>
14   %3 = bitcast <16 x i8> %1 to <16 x i8>
15   %4 = tail call <16 x i8> @llvm.mips.and.v(<16 x i8> %2, <16 x i8> %3)
16   %5 = bitcast <16 x i8> %4 to <16 x i8>
17   store <16 x i8> %5, <16 x i8>* @llvm_mips_and_v_b_RES
18   ret void
19 }
20
21 ; CHECK: llvm_mips_and_v_b_test:
22 ; CHECK: ld.b
23 ; CHECK: ld.b
24 ; CHECK: and.v
25 ; CHECK: st.b
26 ; CHECK: .size llvm_mips_and_v_b_test
27 ;
28 @llvm_mips_bmnz_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
29 @llvm_mips_bmnz_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
30 @llvm_mips_bmnz_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
31
32 define void @llvm_mips_bmnz_v_b_test() nounwind {
33 entry:
34   %0 = load <16 x i8>* @llvm_mips_bmnz_v_b_ARG1
35   %1 = load <16 x i8>* @llvm_mips_bmnz_v_b_ARG2
36   %2 = bitcast <16 x i8> %0 to <16 x i8>
37   %3 = bitcast <16 x i8> %1 to <16 x i8>
38   %4 = tail call <16 x i8> @llvm.mips.bmnz.v(<16 x i8> %2, <16 x i8> %3)
39   %5 = bitcast <16 x i8> %4 to <16 x i8>
40   store <16 x i8> %5, <16 x i8>* @llvm_mips_bmnz_v_b_RES
41   ret void
42 }
43
44 ; CHECK: llvm_mips_bmnz_v_b_test:
45 ; CHECK: ld.b
46 ; CHECK: ld.b
47 ; CHECK: bmnz.v
48 ; CHECK: st.b
49 ; CHECK: .size llvm_mips_bmnz_v_b_test
50 ;
51 @llvm_mips_bmz_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
52 @llvm_mips_bmz_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
53 @llvm_mips_bmz_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
54
55 define void @llvm_mips_bmz_v_b_test() nounwind {
56 entry:
57   %0 = load <16 x i8>* @llvm_mips_bmz_v_b_ARG1
58   %1 = load <16 x i8>* @llvm_mips_bmz_v_b_ARG2
59   %2 = bitcast <16 x i8> %0 to <16 x i8>
60   %3 = bitcast <16 x i8> %1 to <16 x i8>
61   %4 = tail call <16 x i8> @llvm.mips.bmz.v(<16 x i8> %2, <16 x i8> %3)
62   %5 = bitcast <16 x i8> %4 to <16 x i8>
63   store <16 x i8> %5, <16 x i8>* @llvm_mips_bmz_v_b_RES
64   ret void
65 }
66
67 ; CHECK: llvm_mips_bmz_v_b_test:
68 ; CHECK: ld.b
69 ; CHECK: ld.b
70 ; CHECK: bmz.v
71 ; CHECK: st.b
72 ; CHECK: .size llvm_mips_bmz_v_b_test
73 ;
74 @llvm_mips_bmz_v_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
75 @llvm_mips_bmz_v_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
76 @llvm_mips_bmz_v_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
77
78 @llvm_mips_bsel_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
79 @llvm_mips_bsel_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
80 @llvm_mips_bsel_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
81
82 define void @llvm_mips_bsel_v_b_test() nounwind {
83 entry:
84   %0 = load <16 x i8>* @llvm_mips_bsel_v_b_ARG1
85   %1 = load <16 x i8>* @llvm_mips_bsel_v_b_ARG2
86   %2 = bitcast <16 x i8> %0 to <16 x i8>
87   %3 = bitcast <16 x i8> %1 to <16 x i8>
88   %4 = tail call <16 x i8> @llvm.mips.bsel.v(<16 x i8> %2, <16 x i8> %3)
89   %5 = bitcast <16 x i8> %4 to <16 x i8>
90   store <16 x i8> %5, <16 x i8>* @llvm_mips_bsel_v_b_RES
91   ret void
92 }
93
94 ; CHECK: llvm_mips_bsel_v_b_test:
95 ; CHECK: ld.b
96 ; CHECK: ld.b
97 ; CHECK: bsel.v
98 ; CHECK: st.b
99 ; CHECK: .size llvm_mips_bsel_v_b_test
100 ;
101 @llvm_mips_nor_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
102 @llvm_mips_nor_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
103 @llvm_mips_nor_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
104
105 define void @llvm_mips_nor_v_b_test() nounwind {
106 entry:
107   %0 = load <16 x i8>* @llvm_mips_nor_v_b_ARG1
108   %1 = load <16 x i8>* @llvm_mips_nor_v_b_ARG2
109   %2 = bitcast <16 x i8> %0 to <16 x i8>
110   %3 = bitcast <16 x i8> %1 to <16 x i8>
111   %4 = tail call <16 x i8> @llvm.mips.nor.v(<16 x i8> %2, <16 x i8> %3)
112   %5 = bitcast <16 x i8> %4 to <16 x i8>
113   store <16 x i8> %5, <16 x i8>* @llvm_mips_nor_v_b_RES
114   ret void
115 }
116
117 ; CHECK: llvm_mips_nor_v_b_test:
118 ; CHECK: ld.b
119 ; CHECK: ld.b
120 ; CHECK: nor.v
121 ; CHECK: st.b
122 ; CHECK: .size llvm_mips_nor_v_b_test
123 ;
124 @llvm_mips_or_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
125 @llvm_mips_or_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
126 @llvm_mips_or_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
127
128 define void @llvm_mips_or_v_b_test() nounwind {
129 entry:
130   %0 = load <16 x i8>* @llvm_mips_or_v_b_ARG1
131   %1 = load <16 x i8>* @llvm_mips_or_v_b_ARG2
132   %2 = bitcast <16 x i8> %0 to <16 x i8>
133   %3 = bitcast <16 x i8> %1 to <16 x i8>
134   %4 = tail call <16 x i8> @llvm.mips.or.v(<16 x i8> %2, <16 x i8> %3)
135   %5 = bitcast <16 x i8> %4 to <16 x i8>
136   store <16 x i8> %5, <16 x i8>* @llvm_mips_or_v_b_RES
137   ret void
138 }
139
140 ; CHECK: llvm_mips_or_v_b_test:
141 ; CHECK: ld.b
142 ; CHECK: ld.b
143 ; CHECK: or.v
144 ; CHECK: st.b
145 ; CHECK: .size llvm_mips_or_v_b_test
146 ;
147 @llvm_mips_xor_v_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
148 @llvm_mips_xor_v_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
149 @llvm_mips_xor_v_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
150
151 define void @llvm_mips_xor_v_b_test() nounwind {
152 entry:
153   %0 = load <16 x i8>* @llvm_mips_xor_v_b_ARG1
154   %1 = load <16 x i8>* @llvm_mips_xor_v_b_ARG2
155   %2 = bitcast <16 x i8> %0 to <16 x i8>
156   %3 = bitcast <16 x i8> %1 to <16 x i8>
157   %4 = tail call <16 x i8> @llvm.mips.xor.v(<16 x i8> %2, <16 x i8> %3)
158   %5 = bitcast <16 x i8> %4 to <16 x i8>
159   store <16 x i8> %5, <16 x i8>* @llvm_mips_xor_v_b_RES
160   ret void
161 }
162
163 ; CHECK: llvm_mips_xor_v_b_test:
164 ; CHECK: ld.b
165 ; CHECK: ld.b
166 ; CHECK: xor.v
167 ; CHECK: st.b
168 ; CHECK: .size llvm_mips_xor_v_b_test
169 ;
170 declare <16 x i8> @llvm.mips.and.v(<16 x i8>, <16 x i8>) nounwind
171 declare <16 x i8> @llvm.mips.bmnz.v(<16 x i8>, <16 x i8>) nounwind
172 declare <16 x i8> @llvm.mips.bmz.v(<16 x i8>, <16 x i8>) nounwind
173 declare <16 x i8> @llvm.mips.bsel.v(<16 x i8>, <16 x i8>) nounwind
174 declare <16 x i8> @llvm.mips.nor.v(<16 x i8>, <16 x i8>) nounwind
175 declare <16 x i8> @llvm.mips.or.v(<16 x i8>, <16 x i8>) nounwind
176 declare <16 x i8> @llvm.mips.xor.v(<16 x i8>, <16 x i8>) nounwind