[mips][msa] Added support for matching bsel and bseli from normal IR (i.e. not intrin...
[oota-llvm.git] / test / CodeGen / Mips / msa / vec.ll
1 ; Test the MSA intrinsics that are encoded with the VEC instruction format.
2
3 ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck -check-prefix=ANYENDIAN %s
4 ; RUN: llc -march=mipsel -mattr=+msa < %s | FileCheck -check-prefix=ANYENDIAN %s
5
6 @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
7 @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
8 @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
9
10 define void @llvm_mips_and_v_b_test() nounwind {
11 entry:
12   %0 = load <16 x i8>* @llvm_mips_and_v_b_ARG1
13   %1 = load <16 x i8>* @llvm_mips_and_v_b_ARG2
14   %2 = bitcast <16 x i8> %0 to <16 x i8>
15   %3 = bitcast <16 x i8> %1 to <16 x i8>
16   %4 = tail call <16 x i8> @llvm.mips.and.v(<16 x i8> %2, <16 x i8> %3)
17   %5 = bitcast <16 x i8> %4 to <16 x i8>
18   store <16 x i8> %5, <16 x i8>* @llvm_mips_and_v_b_RES
19   ret void
20 }
21
22 ; ANYENDIAN: llvm_mips_and_v_b_test:
23 ; ANYENDIAN: ld.b
24 ; ANYENDIAN: ld.b
25 ; ANYENDIAN: and.v
26 ; ANYENDIAN: st.b
27 ; ANYENDIAN: .size llvm_mips_and_v_b_test
28 ;
29 @llvm_mips_and_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
30 @llvm_mips_and_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
31 @llvm_mips_and_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
32
33 define void @llvm_mips_and_v_h_test() nounwind {
34 entry:
35   %0 = load <8 x i16>* @llvm_mips_and_v_h_ARG1
36   %1 = load <8 x i16>* @llvm_mips_and_v_h_ARG2
37   %2 = bitcast <8 x i16> %0 to <16 x i8>
38   %3 = bitcast <8 x i16> %1 to <16 x i8>
39   %4 = tail call <16 x i8> @llvm.mips.and.v(<16 x i8> %2, <16 x i8> %3)
40   %5 = bitcast <16 x i8> %4 to <8 x i16>
41   store <8 x i16> %5, <8 x i16>* @llvm_mips_and_v_h_RES
42   ret void
43 }
44
45 ; ANYENDIAN: llvm_mips_and_v_h_test:
46 ; ANYENDIAN: ld.b
47 ; ANYENDIAN: ld.b
48 ; ANYENDIAN: and.v
49 ; ANYENDIAN: st.b
50 ; ANYENDIAN: .size llvm_mips_and_v_h_test
51 ;
52 @llvm_mips_and_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
53 @llvm_mips_and_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
54 @llvm_mips_and_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
55
56 define void @llvm_mips_and_v_w_test() nounwind {
57 entry:
58   %0 = load <4 x i32>* @llvm_mips_and_v_w_ARG1
59   %1 = load <4 x i32>* @llvm_mips_and_v_w_ARG2
60   %2 = bitcast <4 x i32> %0 to <16 x i8>
61   %3 = bitcast <4 x i32> %1 to <16 x i8>
62   %4 = tail call <16 x i8> @llvm.mips.and.v(<16 x i8> %2, <16 x i8> %3)
63   %5 = bitcast <16 x i8> %4 to <4 x i32>
64   store <4 x i32> %5, <4 x i32>* @llvm_mips_and_v_w_RES
65   ret void
66 }
67
68 ; ANYENDIAN: llvm_mips_and_v_w_test:
69 ; ANYENDIAN: ld.b
70 ; ANYENDIAN: ld.b
71 ; ANYENDIAN: and.v
72 ; ANYENDIAN: st.b
73 ; ANYENDIAN: .size llvm_mips_and_v_w_test
74 ;
75 @llvm_mips_and_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
76 @llvm_mips_and_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
77 @llvm_mips_and_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
78
79 define void @llvm_mips_and_v_d_test() nounwind {
80 entry:
81   %0 = load <2 x i64>* @llvm_mips_and_v_d_ARG1
82   %1 = load <2 x i64>* @llvm_mips_and_v_d_ARG2
83   %2 = bitcast <2 x i64> %0 to <16 x i8>
84   %3 = bitcast <2 x i64> %1 to <16 x i8>
85   %4 = tail call <16 x i8> @llvm.mips.and.v(<16 x i8> %2, <16 x i8> %3)
86   %5 = bitcast <16 x i8> %4 to <2 x i64>
87   store <2 x i64> %5, <2 x i64>* @llvm_mips_and_v_d_RES
88   ret void
89 }
90
91 ; ANYENDIAN: llvm_mips_and_v_d_test:
92 ; ANYENDIAN: ld.b
93 ; ANYENDIAN: ld.b
94 ; ANYENDIAN: and.v
95 ; ANYENDIAN: st.b
96 ; ANYENDIAN: .size llvm_mips_and_v_d_test
97 ;
98 define void @and_v_b_test() nounwind {
99 entry:
100   %0 = load <16 x i8>* @llvm_mips_and_v_b_ARG1
101   %1 = load <16 x i8>* @llvm_mips_and_v_b_ARG2
102   %2 = and <16 x i8> %0, %1
103   store <16 x i8> %2, <16 x i8>* @llvm_mips_and_v_b_RES
104   ret void
105 }
106
107 ; CHECK: and_v_b_test:
108 ; CHECK: ld.b
109 ; CHECK: ld.b
110 ; CHECK: and.v
111 ; CHECK: st.b
112 ; CHECK: .size and_v_b_test
113 ;
114 define void @and_v_h_test() nounwind {
115 entry:
116   %0 = load <8 x i16>* @llvm_mips_and_v_h_ARG1
117   %1 = load <8 x i16>* @llvm_mips_and_v_h_ARG2
118   %2 = and <8 x i16> %0, %1
119   store <8 x i16> %2, <8 x i16>* @llvm_mips_and_v_h_RES
120   ret void
121 }
122
123 ; CHECK: and_v_h_test:
124 ; CHECK: ld.h
125 ; CHECK: ld.h
126 ; CHECK: and.v
127 ; CHECK: st.h
128 ; CHECK: .size and_v_h_test
129 ;
130
131 define void @and_v_w_test() nounwind {
132 entry:
133   %0 = load <4 x i32>* @llvm_mips_and_v_w_ARG1
134   %1 = load <4 x i32>* @llvm_mips_and_v_w_ARG2
135   %2 = and <4 x i32> %0, %1
136   store <4 x i32> %2, <4 x i32>* @llvm_mips_and_v_w_RES
137   ret void
138 }
139
140 ; CHECK: and_v_w_test:
141 ; CHECK: ld.w
142 ; CHECK: ld.w
143 ; CHECK: and.v
144 ; CHECK: st.w
145 ; CHECK: .size and_v_w_test
146 ;
147
148 define void @and_v_d_test() nounwind {
149 entry:
150   %0 = load <2 x i64>* @llvm_mips_and_v_d_ARG1
151   %1 = load <2 x i64>* @llvm_mips_and_v_d_ARG2
152   %2 = and <2 x i64> %0, %1
153   store <2 x i64> %2, <2 x i64>* @llvm_mips_and_v_d_RES
154   ret void
155 }
156
157 ; CHECK: and_v_d_test:
158 ; CHECK: ld.d
159 ; CHECK: ld.d
160 ; CHECK: and.v
161 ; CHECK: st.d
162 ; CHECK: .size and_v_d_test
163 ;
164 @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
165 @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
166 @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
167
168 define void @llvm_mips_bmnz_v_b_test() nounwind {
169 entry:
170   %0 = load <16 x i8>* @llvm_mips_bmnz_v_b_ARG1
171   %1 = load <16 x i8>* @llvm_mips_bmnz_v_b_ARG2
172   %2 = bitcast <16 x i8> %0 to <16 x i8>
173   %3 = bitcast <16 x i8> %1 to <16 x i8>
174   %4 = tail call <16 x i8> @llvm.mips.bmnz.v(<16 x i8> %2, <16 x i8> %3)
175   %5 = bitcast <16 x i8> %4 to <16 x i8>
176   store <16 x i8> %5, <16 x i8>* @llvm_mips_bmnz_v_b_RES
177   ret void
178 }
179
180 ; ANYENDIAN: llvm_mips_bmnz_v_b_test:
181 ; ANYENDIAN: ld.b
182 ; ANYENDIAN: ld.b
183 ; ANYENDIAN: bmnz.v
184 ; ANYENDIAN: st.b
185 ; ANYENDIAN: .size llvm_mips_bmnz_v_b_test
186 ;
187 @llvm_mips_bmnz_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
188 @llvm_mips_bmnz_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
189 @llvm_mips_bmnz_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
190
191 define void @llvm_mips_bmnz_v_h_test() nounwind {
192 entry:
193   %0 = load <8 x i16>* @llvm_mips_bmnz_v_h_ARG1
194   %1 = load <8 x i16>* @llvm_mips_bmnz_v_h_ARG2
195   %2 = bitcast <8 x i16> %0 to <16 x i8>
196   %3 = bitcast <8 x i16> %1 to <16 x i8>
197   %4 = tail call <16 x i8> @llvm.mips.bmnz.v(<16 x i8> %2, <16 x i8> %3)
198   %5 = bitcast <16 x i8> %4 to <8 x i16>
199   store <8 x i16> %5, <8 x i16>* @llvm_mips_bmnz_v_h_RES
200   ret void
201 }
202
203 ; ANYENDIAN: llvm_mips_bmnz_v_h_test:
204 ; ANYENDIAN: ld.b
205 ; ANYENDIAN: ld.b
206 ; ANYENDIAN: bmnz.v
207 ; ANYENDIAN: st.b
208 ; ANYENDIAN: .size llvm_mips_bmnz_v_h_test
209 ;
210 @llvm_mips_bmnz_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
211 @llvm_mips_bmnz_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
212 @llvm_mips_bmnz_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
213
214 define void @llvm_mips_bmnz_v_w_test() nounwind {
215 entry:
216   %0 = load <4 x i32>* @llvm_mips_bmnz_v_w_ARG1
217   %1 = load <4 x i32>* @llvm_mips_bmnz_v_w_ARG2
218   %2 = bitcast <4 x i32> %0 to <16 x i8>
219   %3 = bitcast <4 x i32> %1 to <16 x i8>
220   %4 = tail call <16 x i8> @llvm.mips.bmnz.v(<16 x i8> %2, <16 x i8> %3)
221   %5 = bitcast <16 x i8> %4 to <4 x i32>
222   store <4 x i32> %5, <4 x i32>* @llvm_mips_bmnz_v_w_RES
223   ret void
224 }
225
226 ; ANYENDIAN: llvm_mips_bmnz_v_w_test:
227 ; ANYENDIAN: ld.b
228 ; ANYENDIAN: ld.b
229 ; ANYENDIAN: bmnz.v
230 ; ANYENDIAN: st.b
231 ; ANYENDIAN: .size llvm_mips_bmnz_v_w_test
232 ;
233 @llvm_mips_bmnz_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
234 @llvm_mips_bmnz_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
235 @llvm_mips_bmnz_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
236
237 define void @llvm_mips_bmnz_v_d_test() nounwind {
238 entry:
239   %0 = load <2 x i64>* @llvm_mips_bmnz_v_d_ARG1
240   %1 = load <2 x i64>* @llvm_mips_bmnz_v_d_ARG2
241   %2 = bitcast <2 x i64> %0 to <16 x i8>
242   %3 = bitcast <2 x i64> %1 to <16 x i8>
243   %4 = tail call <16 x i8> @llvm.mips.bmnz.v(<16 x i8> %2, <16 x i8> %3)
244   %5 = bitcast <16 x i8> %4 to <2 x i64>
245   store <2 x i64> %5, <2 x i64>* @llvm_mips_bmnz_v_d_RES
246   ret void
247 }
248
249 ; ANYENDIAN: llvm_mips_bmnz_v_d_test:
250 ; ANYENDIAN: ld.b
251 ; ANYENDIAN: ld.b
252 ; ANYENDIAN: bmnz.v
253 ; ANYENDIAN: st.b
254 ; ANYENDIAN: .size llvm_mips_bmnz_v_d_test
255 ;
256 @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
257 @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
258 @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
259
260 define void @llvm_mips_bmz_v_b_test() nounwind {
261 entry:
262   %0 = load <16 x i8>* @llvm_mips_bmz_v_b_ARG1
263   %1 = load <16 x i8>* @llvm_mips_bmz_v_b_ARG2
264   %2 = bitcast <16 x i8> %0 to <16 x i8>
265   %3 = bitcast <16 x i8> %1 to <16 x i8>
266   %4 = tail call <16 x i8> @llvm.mips.bmz.v(<16 x i8> %2, <16 x i8> %3)
267   %5 = bitcast <16 x i8> %4 to <16 x i8>
268   store <16 x i8> %5, <16 x i8>* @llvm_mips_bmz_v_b_RES
269   ret void
270 }
271
272 ; ANYENDIAN: llvm_mips_bmz_v_b_test:
273 ; ANYENDIAN: ld.b
274 ; ANYENDIAN: ld.b
275 ; ANYENDIAN: bmz.v
276 ; ANYENDIAN: st.b
277 ; ANYENDIAN: .size llvm_mips_bmz_v_b_test
278 ;
279 @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
280 @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
281 @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
282
283 define void @llvm_mips_bmz_v_h_test() nounwind {
284 entry:
285   %0 = load <8 x i16>* @llvm_mips_bmz_v_h_ARG1
286   %1 = load <8 x i16>* @llvm_mips_bmz_v_h_ARG2
287   %2 = bitcast <8 x i16> %0 to <16 x i8>
288   %3 = bitcast <8 x i16> %1 to <16 x i8>
289   %4 = tail call <16 x i8> @llvm.mips.bmz.v(<16 x i8> %2, <16 x i8> %3)
290   %5 = bitcast <16 x i8> %4 to <8 x i16>
291   store <8 x i16> %5, <8 x i16>* @llvm_mips_bmz_v_h_RES
292   ret void
293 }
294
295 ; ANYENDIAN: llvm_mips_bmz_v_h_test:
296 ; ANYENDIAN: ld.b
297 ; ANYENDIAN: ld.b
298 ; ANYENDIAN: bmz.v
299 ; ANYENDIAN: st.b
300 ; ANYENDIAN: .size llvm_mips_bmz_v_h_test
301 ;
302 @llvm_mips_bmz_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
303 @llvm_mips_bmz_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
304 @llvm_mips_bmz_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
305
306 define void @llvm_mips_bmz_v_w_test() nounwind {
307 entry:
308   %0 = load <4 x i32>* @llvm_mips_bmz_v_w_ARG1
309   %1 = load <4 x i32>* @llvm_mips_bmz_v_w_ARG2
310   %2 = bitcast <4 x i32> %0 to <16 x i8>
311   %3 = bitcast <4 x i32> %1 to <16 x i8>
312   %4 = tail call <16 x i8> @llvm.mips.bmz.v(<16 x i8> %2, <16 x i8> %3)
313   %5 = bitcast <16 x i8> %4 to <4 x i32>
314   store <4 x i32> %5, <4 x i32>* @llvm_mips_bmz_v_w_RES
315   ret void
316 }
317
318 ; ANYENDIAN: llvm_mips_bmz_v_w_test:
319 ; ANYENDIAN: ld.b
320 ; ANYENDIAN: ld.b
321 ; ANYENDIAN: bmz.v
322 ; ANYENDIAN: st.b
323 ; ANYENDIAN: .size llvm_mips_bmz_v_w_test
324 ;
325 @llvm_mips_bmz_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
326 @llvm_mips_bmz_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
327 @llvm_mips_bmz_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
328
329 define void @llvm_mips_bmz_v_d_test() nounwind {
330 entry:
331   %0 = load <2 x i64>* @llvm_mips_bmz_v_d_ARG1
332   %1 = load <2 x i64>* @llvm_mips_bmz_v_d_ARG2
333   %2 = bitcast <2 x i64> %0 to <16 x i8>
334   %3 = bitcast <2 x i64> %1 to <16 x i8>
335   %4 = tail call <16 x i8> @llvm.mips.bmz.v(<16 x i8> %2, <16 x i8> %3)
336   %5 = bitcast <16 x i8> %4 to <2 x i64>
337   store <2 x i64> %5, <2 x i64>* @llvm_mips_bmz_v_d_RES
338   ret void
339 }
340
341 ; ANYENDIAN: llvm_mips_bmz_v_d_test:
342 ; ANYENDIAN: ld.b
343 ; ANYENDIAN: ld.b
344 ; ANYENDIAN: bmz.v
345 ; ANYENDIAN: st.b
346 ; ANYENDIAN: .size llvm_mips_bmz_v_d_test
347 ;
348 @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
349 @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
350 @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
351
352 define void @llvm_mips_bsel_v_b_test() nounwind {
353 entry:
354   %0 = load <16 x i8>* @llvm_mips_bsel_v_b_ARG1
355   %1 = load <16 x i8>* @llvm_mips_bsel_v_b_ARG2
356   %2 = bitcast <16 x i8> %0 to <16 x i8>
357   %3 = bitcast <16 x i8> %1 to <16 x i8>
358   %4 = tail call <16 x i8> @llvm.mips.bsel.v(<16 x i8> %2, <16 x i8> %2, <16 x i8> %3)
359   %5 = bitcast <16 x i8> %4 to <16 x i8>
360   store <16 x i8> %5, <16 x i8>* @llvm_mips_bsel_v_b_RES
361   ret void
362 }
363
364 ; ANYENDIAN: llvm_mips_bsel_v_b_test:
365 ; ANYENDIAN: ld.b
366 ; ANYENDIAN: ld.b
367 ; ANYENDIAN: bsel.v
368 ; ANYENDIAN: st.b
369 ; ANYENDIAN: .size llvm_mips_bsel_v_b_test
370 ;
371 @llvm_mips_bsel_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
372 @llvm_mips_bsel_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
373 @llvm_mips_bsel_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
374
375 define void @llvm_mips_bsel_v_h_test() nounwind {
376 entry:
377   %0 = load <8 x i16>* @llvm_mips_bsel_v_h_ARG1
378   %1 = load <8 x i16>* @llvm_mips_bsel_v_h_ARG2
379   %2 = bitcast <8 x i16> %0 to <16 x i8>
380   %3 = bitcast <8 x i16> %1 to <16 x i8>
381   %4 = tail call <16 x i8> @llvm.mips.bsel.v(<16 x i8> %2, <16 x i8> %2, <16 x i8> %3)
382   %5 = bitcast <16 x i8> %4 to <8 x i16>
383   store <8 x i16> %5, <8 x i16>* @llvm_mips_bsel_v_h_RES
384   ret void
385 }
386
387 ; ANYENDIAN: llvm_mips_bsel_v_h_test:
388 ; ANYENDIAN: ld.b
389 ; ANYENDIAN: ld.b
390 ; ANYENDIAN: bsel.v
391 ; ANYENDIAN: st.b
392 ; ANYENDIAN: .size llvm_mips_bsel_v_h_test
393 ;
394 @llvm_mips_bsel_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
395 @llvm_mips_bsel_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
396 @llvm_mips_bsel_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
397
398 define void @llvm_mips_bsel_v_w_test() nounwind {
399 entry:
400   %0 = load <4 x i32>* @llvm_mips_bsel_v_w_ARG1
401   %1 = load <4 x i32>* @llvm_mips_bsel_v_w_ARG2
402   %2 = bitcast <4 x i32> %0 to <16 x i8>
403   %3 = bitcast <4 x i32> %1 to <16 x i8>
404   %4 = tail call <16 x i8> @llvm.mips.bsel.v(<16 x i8> %2, <16 x i8> %2, <16 x i8> %3)
405   %5 = bitcast <16 x i8> %4 to <4 x i32>
406   store <4 x i32> %5, <4 x i32>* @llvm_mips_bsel_v_w_RES
407   ret void
408 }
409
410 ; ANYENDIAN: llvm_mips_bsel_v_w_test:
411 ; ANYENDIAN: ld.b
412 ; ANYENDIAN: ld.b
413 ; ANYENDIAN: bsel.v
414 ; ANYENDIAN: st.b
415 ; ANYENDIAN: .size llvm_mips_bsel_v_w_test
416 ;
417 @llvm_mips_bsel_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
418 @llvm_mips_bsel_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
419 @llvm_mips_bsel_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
420
421 define void @llvm_mips_bsel_v_d_test() nounwind {
422 entry:
423   %0 = load <2 x i64>* @llvm_mips_bsel_v_d_ARG1
424   %1 = load <2 x i64>* @llvm_mips_bsel_v_d_ARG2
425   %2 = bitcast <2 x i64> %0 to <16 x i8>
426   %3 = bitcast <2 x i64> %1 to <16 x i8>
427   %4 = tail call <16 x i8> @llvm.mips.bsel.v(<16 x i8> %2, <16 x i8> %2, <16 x i8> %3)
428   %5 = bitcast <16 x i8> %4 to <2 x i64>
429   store <2 x i64> %5, <2 x i64>* @llvm_mips_bsel_v_d_RES
430   ret void
431 }
432
433 ; ANYENDIAN: llvm_mips_bsel_v_d_test:
434 ; ANYENDIAN: ld.b
435 ; ANYENDIAN: ld.b
436 ; ANYENDIAN: bsel.v
437 ; ANYENDIAN: st.b
438 ; ANYENDIAN: .size llvm_mips_bsel_v_d_test
439 ;
440 @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
441 @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
442 @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
443
444 define void @llvm_mips_nor_v_b_test() nounwind {
445 entry:
446   %0 = load <16 x i8>* @llvm_mips_nor_v_b_ARG1
447   %1 = load <16 x i8>* @llvm_mips_nor_v_b_ARG2
448   %2 = bitcast <16 x i8> %0 to <16 x i8>
449   %3 = bitcast <16 x i8> %1 to <16 x i8>
450   %4 = tail call <16 x i8> @llvm.mips.nor.v(<16 x i8> %2, <16 x i8> %3)
451   %5 = bitcast <16 x i8> %4 to <16 x i8>
452   store <16 x i8> %5, <16 x i8>* @llvm_mips_nor_v_b_RES
453   ret void
454 }
455
456 ; ANYENDIAN: llvm_mips_nor_v_b_test:
457 ; ANYENDIAN: ld.b
458 ; ANYENDIAN: ld.b
459 ; ANYENDIAN: nor.v
460 ; ANYENDIAN: st.b
461 ; ANYENDIAN: .size llvm_mips_nor_v_b_test
462 ;
463 @llvm_mips_nor_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
464 @llvm_mips_nor_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
465 @llvm_mips_nor_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
466
467 define void @llvm_mips_nor_v_h_test() nounwind {
468 entry:
469   %0 = load <8 x i16>* @llvm_mips_nor_v_h_ARG1
470   %1 = load <8 x i16>* @llvm_mips_nor_v_h_ARG2
471   %2 = bitcast <8 x i16> %0 to <16 x i8>
472   %3 = bitcast <8 x i16> %1 to <16 x i8>
473   %4 = tail call <16 x i8> @llvm.mips.nor.v(<16 x i8> %2, <16 x i8> %3)
474   %5 = bitcast <16 x i8> %4 to <8 x i16>
475   store <8 x i16> %5, <8 x i16>* @llvm_mips_nor_v_h_RES
476   ret void
477 }
478
479 ; ANYENDIAN: llvm_mips_nor_v_h_test:
480 ; ANYENDIAN: ld.b
481 ; ANYENDIAN: ld.b
482 ; ANYENDIAN: nor.v
483 ; ANYENDIAN: st.b
484 ; ANYENDIAN: .size llvm_mips_nor_v_h_test
485 ;
486 @llvm_mips_nor_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
487 @llvm_mips_nor_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
488 @llvm_mips_nor_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
489
490 define void @llvm_mips_nor_v_w_test() nounwind {
491 entry:
492   %0 = load <4 x i32>* @llvm_mips_nor_v_w_ARG1
493   %1 = load <4 x i32>* @llvm_mips_nor_v_w_ARG2
494   %2 = bitcast <4 x i32> %0 to <16 x i8>
495   %3 = bitcast <4 x i32> %1 to <16 x i8>
496   %4 = tail call <16 x i8> @llvm.mips.nor.v(<16 x i8> %2, <16 x i8> %3)
497   %5 = bitcast <16 x i8> %4 to <4 x i32>
498   store <4 x i32> %5, <4 x i32>* @llvm_mips_nor_v_w_RES
499   ret void
500 }
501
502 ; ANYENDIAN: llvm_mips_nor_v_w_test:
503 ; ANYENDIAN: ld.b
504 ; ANYENDIAN: ld.b
505 ; ANYENDIAN: nor.v
506 ; ANYENDIAN: st.b
507 ; ANYENDIAN: .size llvm_mips_nor_v_w_test
508 ;
509 @llvm_mips_nor_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
510 @llvm_mips_nor_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
511 @llvm_mips_nor_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
512
513 define void @llvm_mips_nor_v_d_test() nounwind {
514 entry:
515   %0 = load <2 x i64>* @llvm_mips_nor_v_d_ARG1
516   %1 = load <2 x i64>* @llvm_mips_nor_v_d_ARG2
517   %2 = bitcast <2 x i64> %0 to <16 x i8>
518   %3 = bitcast <2 x i64> %1 to <16 x i8>
519   %4 = tail call <16 x i8> @llvm.mips.nor.v(<16 x i8> %2, <16 x i8> %3)
520   %5 = bitcast <16 x i8> %4 to <2 x i64>
521   store <2 x i64> %5, <2 x i64>* @llvm_mips_nor_v_d_RES
522   ret void
523 }
524
525 ; ANYENDIAN: llvm_mips_nor_v_d_test:
526 ; ANYENDIAN: ld.b
527 ; ANYENDIAN: ld.b
528 ; ANYENDIAN: nor.v
529 ; ANYENDIAN: st.b
530 ; ANYENDIAN: .size llvm_mips_nor_v_d_test
531 ;
532 @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
533 @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
534 @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
535
536 define void @llvm_mips_or_v_b_test() nounwind {
537 entry:
538   %0 = load <16 x i8>* @llvm_mips_or_v_b_ARG1
539   %1 = load <16 x i8>* @llvm_mips_or_v_b_ARG2
540   %2 = bitcast <16 x i8> %0 to <16 x i8>
541   %3 = bitcast <16 x i8> %1 to <16 x i8>
542   %4 = tail call <16 x i8> @llvm.mips.or.v(<16 x i8> %2, <16 x i8> %3)
543   %5 = bitcast <16 x i8> %4 to <16 x i8>
544   store <16 x i8> %5, <16 x i8>* @llvm_mips_or_v_b_RES
545   ret void
546 }
547
548 ; ANYENDIAN: llvm_mips_or_v_b_test:
549 ; ANYENDIAN: ld.b
550 ; ANYENDIAN: ld.b
551 ; ANYENDIAN: or.v
552 ; ANYENDIAN: st.b
553 ; ANYENDIAN: .size llvm_mips_or_v_b_test
554 ;
555 @llvm_mips_or_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
556 @llvm_mips_or_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
557 @llvm_mips_or_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
558
559 define void @llvm_mips_or_v_h_test() nounwind {
560 entry:
561   %0 = load <8 x i16>* @llvm_mips_or_v_h_ARG1
562   %1 = load <8 x i16>* @llvm_mips_or_v_h_ARG2
563   %2 = bitcast <8 x i16> %0 to <16 x i8>
564   %3 = bitcast <8 x i16> %1 to <16 x i8>
565   %4 = tail call <16 x i8> @llvm.mips.or.v(<16 x i8> %2, <16 x i8> %3)
566   %5 = bitcast <16 x i8> %4 to <8 x i16>
567   store <8 x i16> %5, <8 x i16>* @llvm_mips_or_v_h_RES
568   ret void
569 }
570
571 ; ANYENDIAN: llvm_mips_or_v_h_test:
572 ; ANYENDIAN: ld.b
573 ; ANYENDIAN: ld.b
574 ; ANYENDIAN: or.v
575 ; ANYENDIAN: st.b
576 ; ANYENDIAN: .size llvm_mips_or_v_h_test
577 ;
578 @llvm_mips_or_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
579 @llvm_mips_or_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
580 @llvm_mips_or_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
581
582 define void @llvm_mips_or_v_w_test() nounwind {
583 entry:
584   %0 = load <4 x i32>* @llvm_mips_or_v_w_ARG1
585   %1 = load <4 x i32>* @llvm_mips_or_v_w_ARG2
586   %2 = bitcast <4 x i32> %0 to <16 x i8>
587   %3 = bitcast <4 x i32> %1 to <16 x i8>
588   %4 = tail call <16 x i8> @llvm.mips.or.v(<16 x i8> %2, <16 x i8> %3)
589   %5 = bitcast <16 x i8> %4 to <4 x i32>
590   store <4 x i32> %5, <4 x i32>* @llvm_mips_or_v_w_RES
591   ret void
592 }
593
594 ; ANYENDIAN: llvm_mips_or_v_w_test:
595 ; ANYENDIAN: ld.b
596 ; ANYENDIAN: ld.b
597 ; ANYENDIAN: or.v
598 ; ANYENDIAN: st.b
599 ; ANYENDIAN: .size llvm_mips_or_v_w_test
600 ;
601 @llvm_mips_or_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
602 @llvm_mips_or_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
603 @llvm_mips_or_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
604
605 define void @llvm_mips_or_v_d_test() nounwind {
606 entry:
607   %0 = load <2 x i64>* @llvm_mips_or_v_d_ARG1
608   %1 = load <2 x i64>* @llvm_mips_or_v_d_ARG2
609   %2 = bitcast <2 x i64> %0 to <16 x i8>
610   %3 = bitcast <2 x i64> %1 to <16 x i8>
611   %4 = tail call <16 x i8> @llvm.mips.or.v(<16 x i8> %2, <16 x i8> %3)
612   %5 = bitcast <16 x i8> %4 to <2 x i64>
613   store <2 x i64> %5, <2 x i64>* @llvm_mips_or_v_d_RES
614   ret void
615 }
616
617 ; ANYENDIAN: llvm_mips_or_v_d_test:
618 ; ANYENDIAN: ld.b
619 ; ANYENDIAN: ld.b
620 ; ANYENDIAN: or.v
621 ; ANYENDIAN: st.b
622 ; ANYENDIAN: .size llvm_mips_or_v_d_test
623 ;
624 define void @or_v_b_test() nounwind {
625 entry:
626   %0 = load <16 x i8>* @llvm_mips_or_v_b_ARG1
627   %1 = load <16 x i8>* @llvm_mips_or_v_b_ARG2
628   %2 = or <16 x i8> %0, %1
629   store <16 x i8> %2, <16 x i8>* @llvm_mips_or_v_b_RES
630   ret void
631 }
632
633 ; CHECK: or_v_b_test:
634 ; CHECK: ld.b
635 ; CHECK: ld.b
636 ; CHECK: or.v
637 ; CHECK: st.b
638 ; CHECK: .size or_v_b_test
639 ;
640 define void @or_v_h_test() nounwind {
641 entry:
642   %0 = load <8 x i16>* @llvm_mips_or_v_h_ARG1
643   %1 = load <8 x i16>* @llvm_mips_or_v_h_ARG2
644   %2 = or <8 x i16> %0, %1
645   store <8 x i16> %2, <8 x i16>* @llvm_mips_or_v_h_RES
646   ret void
647 }
648
649 ; CHECK: or_v_h_test:
650 ; CHECK: ld.h
651 ; CHECK: ld.h
652 ; CHECK: or.v
653 ; CHECK: st.h
654 ; CHECK: .size or_v_h_test
655 ;
656
657 define void @or_v_w_test() nounwind {
658 entry:
659   %0 = load <4 x i32>* @llvm_mips_or_v_w_ARG1
660   %1 = load <4 x i32>* @llvm_mips_or_v_w_ARG2
661   %2 = or <4 x i32> %0, %1
662   store <4 x i32> %2, <4 x i32>* @llvm_mips_or_v_w_RES
663   ret void
664 }
665
666 ; CHECK: or_v_w_test:
667 ; CHECK: ld.w
668 ; CHECK: ld.w
669 ; CHECK: or.v
670 ; CHECK: st.w
671 ; CHECK: .size or_v_w_test
672 ;
673
674 define void @or_v_d_test() nounwind {
675 entry:
676   %0 = load <2 x i64>* @llvm_mips_or_v_d_ARG1
677   %1 = load <2 x i64>* @llvm_mips_or_v_d_ARG2
678   %2 = or <2 x i64> %0, %1
679   store <2 x i64> %2, <2 x i64>* @llvm_mips_or_v_d_RES
680   ret void
681 }
682
683 ; CHECK: or_v_d_test:
684 ; CHECK: ld.d
685 ; CHECK: ld.d
686 ; CHECK: or.v
687 ; CHECK: st.d
688 ; CHECK: .size or_v_d_test
689 ;
690 @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
691 @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
692 @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
693
694 define void @llvm_mips_xor_v_b_test() nounwind {
695 entry:
696   %0 = load <16 x i8>* @llvm_mips_xor_v_b_ARG1
697   %1 = load <16 x i8>* @llvm_mips_xor_v_b_ARG2
698   %2 = bitcast <16 x i8> %0 to <16 x i8>
699   %3 = bitcast <16 x i8> %1 to <16 x i8>
700   %4 = tail call <16 x i8> @llvm.mips.xor.v(<16 x i8> %2, <16 x i8> %3)
701   %5 = bitcast <16 x i8> %4 to <16 x i8>
702   store <16 x i8> %5, <16 x i8>* @llvm_mips_xor_v_b_RES
703   ret void
704 }
705
706 ; ANYENDIAN: llvm_mips_xor_v_b_test:
707 ; ANYENDIAN: ld.b
708 ; ANYENDIAN: ld.b
709 ; ANYENDIAN: xor.v
710 ; ANYENDIAN: st.b
711 ; ANYENDIAN: .size llvm_mips_xor_v_b_test
712 ;
713 @llvm_mips_xor_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
714 @llvm_mips_xor_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
715 @llvm_mips_xor_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
716
717 define void @llvm_mips_xor_v_h_test() nounwind {
718 entry:
719   %0 = load <8 x i16>* @llvm_mips_xor_v_h_ARG1
720   %1 = load <8 x i16>* @llvm_mips_xor_v_h_ARG2
721   %2 = bitcast <8 x i16> %0 to <16 x i8>
722   %3 = bitcast <8 x i16> %1 to <16 x i8>
723   %4 = tail call <16 x i8> @llvm.mips.xor.v(<16 x i8> %2, <16 x i8> %3)
724   %5 = bitcast <16 x i8> %4 to <8 x i16>
725   store <8 x i16> %5, <8 x i16>* @llvm_mips_xor_v_h_RES
726   ret void
727 }
728
729 ; ANYENDIAN: llvm_mips_xor_v_h_test:
730 ; ANYENDIAN: ld.b
731 ; ANYENDIAN: ld.b
732 ; ANYENDIAN: xor.v
733 ; ANYENDIAN: st.b
734 ; ANYENDIAN: .size llvm_mips_xor_v_h_test
735 ;
736 @llvm_mips_xor_v_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
737 @llvm_mips_xor_v_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
738 @llvm_mips_xor_v_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
739
740 define void @llvm_mips_xor_v_w_test() nounwind {
741 entry:
742   %0 = load <4 x i32>* @llvm_mips_xor_v_w_ARG1
743   %1 = load <4 x i32>* @llvm_mips_xor_v_w_ARG2
744   %2 = bitcast <4 x i32> %0 to <16 x i8>
745   %3 = bitcast <4 x i32> %1 to <16 x i8>
746   %4 = tail call <16 x i8> @llvm.mips.xor.v(<16 x i8> %2, <16 x i8> %3)
747   %5 = bitcast <16 x i8> %4 to <4 x i32>
748   store <4 x i32> %5, <4 x i32>* @llvm_mips_xor_v_w_RES
749   ret void
750 }
751
752 ; ANYENDIAN: llvm_mips_xor_v_w_test:
753 ; ANYENDIAN: ld.b
754 ; ANYENDIAN: ld.b
755 ; ANYENDIAN: xor.v
756 ; ANYENDIAN: st.b
757 ; ANYENDIAN: .size llvm_mips_xor_v_w_test
758 ;
759 @llvm_mips_xor_v_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
760 @llvm_mips_xor_v_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
761 @llvm_mips_xor_v_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
762
763 define void @llvm_mips_xor_v_d_test() nounwind {
764 entry:
765   %0 = load <2 x i64>* @llvm_mips_xor_v_d_ARG1
766   %1 = load <2 x i64>* @llvm_mips_xor_v_d_ARG2
767   %2 = bitcast <2 x i64> %0 to <16 x i8>
768   %3 = bitcast <2 x i64> %1 to <16 x i8>
769   %4 = tail call <16 x i8> @llvm.mips.xor.v(<16 x i8> %2, <16 x i8> %3)
770   %5 = bitcast <16 x i8> %4 to <2 x i64>
771   store <2 x i64> %5, <2 x i64>* @llvm_mips_xor_v_d_RES
772   ret void
773 }
774
775 ; ANYENDIAN: llvm_mips_xor_v_d_test:
776 ; ANYENDIAN: ld.b
777 ; ANYENDIAN: ld.b
778 ; ANYENDIAN: xor.v
779 ; ANYENDIAN: st.b
780 ; ANYENDIAN: .size llvm_mips_xor_v_d_test
781 ;
782 define void @xor_v_b_test() nounwind {
783 entry:
784   %0 = load <16 x i8>* @llvm_mips_xor_v_b_ARG1
785   %1 = load <16 x i8>* @llvm_mips_xor_v_b_ARG2
786   %2 = xor <16 x i8> %0, %1
787   store <16 x i8> %2, <16 x i8>* @llvm_mips_xor_v_b_RES
788   ret void
789 }
790
791 ; CHECK: xor_v_b_test:
792 ; CHECK: ld.b
793 ; CHECK: ld.b
794 ; CHECK: xor.v
795 ; CHECK: st.b
796 ; CHECK: .size xor_v_b_test
797 ;
798 define void @xor_v_h_test() nounwind {
799 entry:
800   %0 = load <8 x i16>* @llvm_mips_xor_v_h_ARG1
801   %1 = load <8 x i16>* @llvm_mips_xor_v_h_ARG2
802   %2 = xor <8 x i16> %0, %1
803   store <8 x i16> %2, <8 x i16>* @llvm_mips_xor_v_h_RES
804   ret void
805 }
806
807 ; CHECK: xor_v_h_test:
808 ; CHECK: ld.h
809 ; CHECK: ld.h
810 ; CHECK: xor.v
811 ; CHECK: st.h
812 ; CHECK: .size xor_v_h_test
813 ;
814
815 define void @xor_v_w_test() nounwind {
816 entry:
817   %0 = load <4 x i32>* @llvm_mips_xor_v_w_ARG1
818   %1 = load <4 x i32>* @llvm_mips_xor_v_w_ARG2
819   %2 = xor <4 x i32> %0, %1
820   store <4 x i32> %2, <4 x i32>* @llvm_mips_xor_v_w_RES
821   ret void
822 }
823
824 ; CHECK: xor_v_w_test:
825 ; CHECK: ld.w
826 ; CHECK: ld.w
827 ; CHECK: xor.v
828 ; CHECK: st.w
829 ; CHECK: .size xor_v_w_test
830 ;
831
832 define void @xor_v_d_test() nounwind {
833 entry:
834   %0 = load <2 x i64>* @llvm_mips_xor_v_d_ARG1
835   %1 = load <2 x i64>* @llvm_mips_xor_v_d_ARG2
836   %2 = xor <2 x i64> %0, %1
837   store <2 x i64> %2, <2 x i64>* @llvm_mips_xor_v_d_RES
838   ret void
839 }
840
841 ; CHECK: xor_v_d_test:
842 ; CHECK: ld.d
843 ; CHECK: ld.d
844 ; CHECK: xor.v
845 ; CHECK: st.d
846 ; CHECK: .size xor_v_d_test
847 ;
848 declare <16 x i8> @llvm.mips.and.v(<16 x i8>, <16 x i8>) nounwind
849 declare <16 x i8> @llvm.mips.bmnz.v(<16 x i8>, <16 x i8>) nounwind
850 declare <16 x i8> @llvm.mips.bmz.v(<16 x i8>, <16 x i8>) nounwind
851 declare <16 x i8> @llvm.mips.bsel.v(<16 x i8>, <16 x i8>, <16 x i8>) nounwind
852 declare <16 x i8> @llvm.mips.nor.v(<16 x i8>, <16 x i8>) nounwind
853 declare <16 x i8> @llvm.mips.or.v(<16 x i8>, <16 x i8>) nounwind
854 declare <16 x i8> @llvm.mips.xor.v(<16 x i8>, <16 x i8>) nounwind