[mips][msa] Improves robustness of the test by enhancing pattern matching.
[oota-llvm.git] / test / CodeGen / Mips / msa / 3r-a.ll
1 ; Test the MSA intrinsics that are encoded with the 3R instruction format.
2 ; There are lots of these so this covers those beginning with 'a'
3
4 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
5
6 ; It should fail to compile without fp64.
7 ; RUN: not llc -march=mips -mattr=+msa < %s 2>&1 | \
8 ; RUN:    FileCheck -check-prefix=FP32ERROR %s
9 ; FP32ERROR: LLVM ERROR: MSA requires a 64-bit FPU register file (FR=1 mode).
10
11 @llvm_mips_add_a_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
12 @llvm_mips_add_a_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
13 @llvm_mips_add_a_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
14
15 define void @llvm_mips_add_a_b_test() nounwind {
16 entry:
17   %0 = load <16 x i8>* @llvm_mips_add_a_b_ARG1
18   %1 = load <16 x i8>* @llvm_mips_add_a_b_ARG2
19   %2 = tail call <16 x i8> @llvm.mips.add.a.b(<16 x i8> %0, <16 x i8> %1)
20   store <16 x i8> %2, <16 x i8>* @llvm_mips_add_a_b_RES
21   ret void
22 }
23
24 declare <16 x i8> @llvm.mips.add.a.b(<16 x i8>, <16 x i8>) nounwind
25
26 ; CHECK: llvm_mips_add_a_b_test:
27 ; CHECK: ld.b
28 ; CHECK: ld.b
29 ; CHECK: add_a.b
30 ; CHECK: st.b
31 ; CHECK: .size llvm_mips_add_a_b_test
32 ;
33 @llvm_mips_add_a_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
34 @llvm_mips_add_a_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
35 @llvm_mips_add_a_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
36
37 define void @llvm_mips_add_a_h_test() nounwind {
38 entry:
39   %0 = load <8 x i16>* @llvm_mips_add_a_h_ARG1
40   %1 = load <8 x i16>* @llvm_mips_add_a_h_ARG2
41   %2 = tail call <8 x i16> @llvm.mips.add.a.h(<8 x i16> %0, <8 x i16> %1)
42   store <8 x i16> %2, <8 x i16>* @llvm_mips_add_a_h_RES
43   ret void
44 }
45
46 declare <8 x i16> @llvm.mips.add.a.h(<8 x i16>, <8 x i16>) nounwind
47
48 ; CHECK: llvm_mips_add_a_h_test:
49 ; CHECK: ld.h
50 ; CHECK: ld.h
51 ; CHECK: add_a.h
52 ; CHECK: st.h
53 ; CHECK: .size llvm_mips_add_a_h_test
54 ;
55 @llvm_mips_add_a_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
56 @llvm_mips_add_a_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
57 @llvm_mips_add_a_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
58
59 define void @llvm_mips_add_a_w_test() nounwind {
60 entry:
61   %0 = load <4 x i32>* @llvm_mips_add_a_w_ARG1
62   %1 = load <4 x i32>* @llvm_mips_add_a_w_ARG2
63   %2 = tail call <4 x i32> @llvm.mips.add.a.w(<4 x i32> %0, <4 x i32> %1)
64   store <4 x i32> %2, <4 x i32>* @llvm_mips_add_a_w_RES
65   ret void
66 }
67
68 declare <4 x i32> @llvm.mips.add.a.w(<4 x i32>, <4 x i32>) nounwind
69
70 ; CHECK: llvm_mips_add_a_w_test:
71 ; CHECK: ld.w
72 ; CHECK: ld.w
73 ; CHECK: add_a.w
74 ; CHECK: st.w
75 ; CHECK: .size llvm_mips_add_a_w_test
76 ;
77 @llvm_mips_add_a_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
78 @llvm_mips_add_a_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
79 @llvm_mips_add_a_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
80
81 define void @llvm_mips_add_a_d_test() nounwind {
82 entry:
83   %0 = load <2 x i64>* @llvm_mips_add_a_d_ARG1
84   %1 = load <2 x i64>* @llvm_mips_add_a_d_ARG2
85   %2 = tail call <2 x i64> @llvm.mips.add.a.d(<2 x i64> %0, <2 x i64> %1)
86   store <2 x i64> %2, <2 x i64>* @llvm_mips_add_a_d_RES
87   ret void
88 }
89
90 declare <2 x i64> @llvm.mips.add.a.d(<2 x i64>, <2 x i64>) nounwind
91
92 ; CHECK: llvm_mips_add_a_d_test:
93 ; CHECK: ld.d
94 ; CHECK: ld.d
95 ; CHECK: add_a.d
96 ; CHECK: st.d
97 ; CHECK: .size llvm_mips_add_a_d_test
98 ;
99 @llvm_mips_adds_a_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
100 @llvm_mips_adds_a_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
101 @llvm_mips_adds_a_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
102
103 define void @llvm_mips_adds_a_b_test() nounwind {
104 entry:
105   %0 = load <16 x i8>* @llvm_mips_adds_a_b_ARG1
106   %1 = load <16 x i8>* @llvm_mips_adds_a_b_ARG2
107   %2 = tail call <16 x i8> @llvm.mips.adds.a.b(<16 x i8> %0, <16 x i8> %1)
108   store <16 x i8> %2, <16 x i8>* @llvm_mips_adds_a_b_RES
109   ret void
110 }
111
112 declare <16 x i8> @llvm.mips.adds.a.b(<16 x i8>, <16 x i8>) nounwind
113
114 ; CHECK: llvm_mips_adds_a_b_test:
115 ; CHECK: ld.b
116 ; CHECK: ld.b
117 ; CHECK: adds_a.b
118 ; CHECK: st.b
119 ; CHECK: .size llvm_mips_adds_a_b_test
120 ;
121 @llvm_mips_adds_a_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
122 @llvm_mips_adds_a_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
123 @llvm_mips_adds_a_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
124
125 define void @llvm_mips_adds_a_h_test() nounwind {
126 entry:
127   %0 = load <8 x i16>* @llvm_mips_adds_a_h_ARG1
128   %1 = load <8 x i16>* @llvm_mips_adds_a_h_ARG2
129   %2 = tail call <8 x i16> @llvm.mips.adds.a.h(<8 x i16> %0, <8 x i16> %1)
130   store <8 x i16> %2, <8 x i16>* @llvm_mips_adds_a_h_RES
131   ret void
132 }
133
134 declare <8 x i16> @llvm.mips.adds.a.h(<8 x i16>, <8 x i16>) nounwind
135
136 ; CHECK: llvm_mips_adds_a_h_test:
137 ; CHECK: ld.h
138 ; CHECK: ld.h
139 ; CHECK: adds_a.h
140 ; CHECK: st.h
141 ; CHECK: .size llvm_mips_adds_a_h_test
142 ;
143 @llvm_mips_adds_a_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
144 @llvm_mips_adds_a_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
145 @llvm_mips_adds_a_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
146
147 define void @llvm_mips_adds_a_w_test() nounwind {
148 entry:
149   %0 = load <4 x i32>* @llvm_mips_adds_a_w_ARG1
150   %1 = load <4 x i32>* @llvm_mips_adds_a_w_ARG2
151   %2 = tail call <4 x i32> @llvm.mips.adds.a.w(<4 x i32> %0, <4 x i32> %1)
152   store <4 x i32> %2, <4 x i32>* @llvm_mips_adds_a_w_RES
153   ret void
154 }
155
156 declare <4 x i32> @llvm.mips.adds.a.w(<4 x i32>, <4 x i32>) nounwind
157
158 ; CHECK: llvm_mips_adds_a_w_test:
159 ; CHECK: ld.w
160 ; CHECK: ld.w
161 ; CHECK: adds_a.w
162 ; CHECK: st.w
163 ; CHECK: .size llvm_mips_adds_a_w_test
164 ;
165 @llvm_mips_adds_a_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
166 @llvm_mips_adds_a_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
167 @llvm_mips_adds_a_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
168
169 define void @llvm_mips_adds_a_d_test() nounwind {
170 entry:
171   %0 = load <2 x i64>* @llvm_mips_adds_a_d_ARG1
172   %1 = load <2 x i64>* @llvm_mips_adds_a_d_ARG2
173   %2 = tail call <2 x i64> @llvm.mips.adds.a.d(<2 x i64> %0, <2 x i64> %1)
174   store <2 x i64> %2, <2 x i64>* @llvm_mips_adds_a_d_RES
175   ret void
176 }
177
178 declare <2 x i64> @llvm.mips.adds.a.d(<2 x i64>, <2 x i64>) nounwind
179
180 ; CHECK: llvm_mips_adds_a_d_test:
181 ; CHECK: ld.d
182 ; CHECK: ld.d
183 ; CHECK: adds_a.d
184 ; CHECK: st.d
185 ; CHECK: .size llvm_mips_adds_a_d_test
186 ;
187 @llvm_mips_adds_s_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
188 @llvm_mips_adds_s_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
189 @llvm_mips_adds_s_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
190
191 define void @llvm_mips_adds_s_b_test() nounwind {
192 entry:
193   %0 = load <16 x i8>* @llvm_mips_adds_s_b_ARG1
194   %1 = load <16 x i8>* @llvm_mips_adds_s_b_ARG2
195   %2 = tail call <16 x i8> @llvm.mips.adds.s.b(<16 x i8> %0, <16 x i8> %1)
196   store <16 x i8> %2, <16 x i8>* @llvm_mips_adds_s_b_RES
197   ret void
198 }
199
200 declare <16 x i8> @llvm.mips.adds.s.b(<16 x i8>, <16 x i8>) nounwind
201
202 ; CHECK: llvm_mips_adds_s_b_test:
203 ; CHECK: ld.b
204 ; CHECK: ld.b
205 ; CHECK: adds_s.b
206 ; CHECK: st.b
207 ; CHECK: .size llvm_mips_adds_s_b_test
208 ;
209 @llvm_mips_adds_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
210 @llvm_mips_adds_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
211 @llvm_mips_adds_s_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
212
213 define void @llvm_mips_adds_s_h_test() nounwind {
214 entry:
215   %0 = load <8 x i16>* @llvm_mips_adds_s_h_ARG1
216   %1 = load <8 x i16>* @llvm_mips_adds_s_h_ARG2
217   %2 = tail call <8 x i16> @llvm.mips.adds.s.h(<8 x i16> %0, <8 x i16> %1)
218   store <8 x i16> %2, <8 x i16>* @llvm_mips_adds_s_h_RES
219   ret void
220 }
221
222 declare <8 x i16> @llvm.mips.adds.s.h(<8 x i16>, <8 x i16>) nounwind
223
224 ; CHECK: llvm_mips_adds_s_h_test:
225 ; CHECK: ld.h
226 ; CHECK: ld.h
227 ; CHECK: adds_s.h
228 ; CHECK: st.h
229 ; CHECK: .size llvm_mips_adds_s_h_test
230 ;
231 @llvm_mips_adds_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
232 @llvm_mips_adds_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
233 @llvm_mips_adds_s_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
234
235 define void @llvm_mips_adds_s_w_test() nounwind {
236 entry:
237   %0 = load <4 x i32>* @llvm_mips_adds_s_w_ARG1
238   %1 = load <4 x i32>* @llvm_mips_adds_s_w_ARG2
239   %2 = tail call <4 x i32> @llvm.mips.adds.s.w(<4 x i32> %0, <4 x i32> %1)
240   store <4 x i32> %2, <4 x i32>* @llvm_mips_adds_s_w_RES
241   ret void
242 }
243
244 declare <4 x i32> @llvm.mips.adds.s.w(<4 x i32>, <4 x i32>) nounwind
245
246 ; CHECK: llvm_mips_adds_s_w_test:
247 ; CHECK: ld.w
248 ; CHECK: ld.w
249 ; CHECK: adds_s.w
250 ; CHECK: st.w
251 ; CHECK: .size llvm_mips_adds_s_w_test
252 ;
253 @llvm_mips_adds_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
254 @llvm_mips_adds_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
255 @llvm_mips_adds_s_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
256
257 define void @llvm_mips_adds_s_d_test() nounwind {
258 entry:
259   %0 = load <2 x i64>* @llvm_mips_adds_s_d_ARG1
260   %1 = load <2 x i64>* @llvm_mips_adds_s_d_ARG2
261   %2 = tail call <2 x i64> @llvm.mips.adds.s.d(<2 x i64> %0, <2 x i64> %1)
262   store <2 x i64> %2, <2 x i64>* @llvm_mips_adds_s_d_RES
263   ret void
264 }
265
266 declare <2 x i64> @llvm.mips.adds.s.d(<2 x i64>, <2 x i64>) nounwind
267
268 ; CHECK: llvm_mips_adds_s_d_test:
269 ; CHECK: ld.d
270 ; CHECK: ld.d
271 ; CHECK: adds_s.d
272 ; CHECK: st.d
273 ; CHECK: .size llvm_mips_adds_s_d_test
274 ;
275 @llvm_mips_adds_u_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
276 @llvm_mips_adds_u_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
277 @llvm_mips_adds_u_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
278
279 define void @llvm_mips_adds_u_b_test() nounwind {
280 entry:
281   %0 = load <16 x i8>* @llvm_mips_adds_u_b_ARG1
282   %1 = load <16 x i8>* @llvm_mips_adds_u_b_ARG2
283   %2 = tail call <16 x i8> @llvm.mips.adds.u.b(<16 x i8> %0, <16 x i8> %1)
284   store <16 x i8> %2, <16 x i8>* @llvm_mips_adds_u_b_RES
285   ret void
286 }
287
288 declare <16 x i8> @llvm.mips.adds.u.b(<16 x i8>, <16 x i8>) nounwind
289
290 ; CHECK: llvm_mips_adds_u_b_test:
291 ; CHECK: ld.b
292 ; CHECK: ld.b
293 ; CHECK: adds_u.b
294 ; CHECK: st.b
295 ; CHECK: .size llvm_mips_adds_u_b_test
296 ;
297 @llvm_mips_adds_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
298 @llvm_mips_adds_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
299 @llvm_mips_adds_u_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
300
301 define void @llvm_mips_adds_u_h_test() nounwind {
302 entry:
303   %0 = load <8 x i16>* @llvm_mips_adds_u_h_ARG1
304   %1 = load <8 x i16>* @llvm_mips_adds_u_h_ARG2
305   %2 = tail call <8 x i16> @llvm.mips.adds.u.h(<8 x i16> %0, <8 x i16> %1)
306   store <8 x i16> %2, <8 x i16>* @llvm_mips_adds_u_h_RES
307   ret void
308 }
309
310 declare <8 x i16> @llvm.mips.adds.u.h(<8 x i16>, <8 x i16>) nounwind
311
312 ; CHECK: llvm_mips_adds_u_h_test:
313 ; CHECK: ld.h
314 ; CHECK: ld.h
315 ; CHECK: adds_u.h
316 ; CHECK: st.h
317 ; CHECK: .size llvm_mips_adds_u_h_test
318 ;
319 @llvm_mips_adds_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
320 @llvm_mips_adds_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
321 @llvm_mips_adds_u_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
322
323 define void @llvm_mips_adds_u_w_test() nounwind {
324 entry:
325   %0 = load <4 x i32>* @llvm_mips_adds_u_w_ARG1
326   %1 = load <4 x i32>* @llvm_mips_adds_u_w_ARG2
327   %2 = tail call <4 x i32> @llvm.mips.adds.u.w(<4 x i32> %0, <4 x i32> %1)
328   store <4 x i32> %2, <4 x i32>* @llvm_mips_adds_u_w_RES
329   ret void
330 }
331
332 declare <4 x i32> @llvm.mips.adds.u.w(<4 x i32>, <4 x i32>) nounwind
333
334 ; CHECK: llvm_mips_adds_u_w_test:
335 ; CHECK: ld.w
336 ; CHECK: ld.w
337 ; CHECK: adds_u.w
338 ; CHECK: st.w
339 ; CHECK: .size llvm_mips_adds_u_w_test
340 ;
341 @llvm_mips_adds_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
342 @llvm_mips_adds_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
343 @llvm_mips_adds_u_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
344
345 define void @llvm_mips_adds_u_d_test() nounwind {
346 entry:
347   %0 = load <2 x i64>* @llvm_mips_adds_u_d_ARG1
348   %1 = load <2 x i64>* @llvm_mips_adds_u_d_ARG2
349   %2 = tail call <2 x i64> @llvm.mips.adds.u.d(<2 x i64> %0, <2 x i64> %1)
350   store <2 x i64> %2, <2 x i64>* @llvm_mips_adds_u_d_RES
351   ret void
352 }
353
354 declare <2 x i64> @llvm.mips.adds.u.d(<2 x i64>, <2 x i64>) nounwind
355
356 ; CHECK: llvm_mips_adds_u_d_test:
357 ; CHECK: ld.d
358 ; CHECK: ld.d
359 ; CHECK: adds_u.d
360 ; CHECK: st.d
361 ; CHECK: .size llvm_mips_adds_u_d_test
362 ;
363 @llvm_mips_addv_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
364 @llvm_mips_addv_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
365 @llvm_mips_addv_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
366
367 define void @llvm_mips_addv_b_test() nounwind {
368 entry:
369   %0 = load <16 x i8>* @llvm_mips_addv_b_ARG1
370   %1 = load <16 x i8>* @llvm_mips_addv_b_ARG2
371   %2 = tail call <16 x i8> @llvm.mips.addv.b(<16 x i8> %0, <16 x i8> %1)
372   store <16 x i8> %2, <16 x i8>* @llvm_mips_addv_b_RES
373   ret void
374 }
375
376 declare <16 x i8> @llvm.mips.addv.b(<16 x i8>, <16 x i8>) nounwind
377
378 ; CHECK: llvm_mips_addv_b_test:
379 ; CHECK: ld.b
380 ; CHECK: ld.b
381 ; CHECK: addv.b
382 ; CHECK: st.b
383 ; CHECK: .size llvm_mips_addv_b_test
384 ;
385 @llvm_mips_addv_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
386 @llvm_mips_addv_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
387 @llvm_mips_addv_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
388
389 define void @llvm_mips_addv_h_test() nounwind {
390 entry:
391   %0 = load <8 x i16>* @llvm_mips_addv_h_ARG1
392   %1 = load <8 x i16>* @llvm_mips_addv_h_ARG2
393   %2 = tail call <8 x i16> @llvm.mips.addv.h(<8 x i16> %0, <8 x i16> %1)
394   store <8 x i16> %2, <8 x i16>* @llvm_mips_addv_h_RES
395   ret void
396 }
397
398 declare <8 x i16> @llvm.mips.addv.h(<8 x i16>, <8 x i16>) nounwind
399
400 ; CHECK: llvm_mips_addv_h_test:
401 ; CHECK: ld.h
402 ; CHECK: ld.h
403 ; CHECK: addv.h
404 ; CHECK: st.h
405 ; CHECK: .size llvm_mips_addv_h_test
406 ;
407 @llvm_mips_addv_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
408 @llvm_mips_addv_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
409 @llvm_mips_addv_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
410
411 define void @llvm_mips_addv_w_test() nounwind {
412 entry:
413   %0 = load <4 x i32>* @llvm_mips_addv_w_ARG1
414   %1 = load <4 x i32>* @llvm_mips_addv_w_ARG2
415   %2 = tail call <4 x i32> @llvm.mips.addv.w(<4 x i32> %0, <4 x i32> %1)
416   store <4 x i32> %2, <4 x i32>* @llvm_mips_addv_w_RES
417   ret void
418 }
419
420 declare <4 x i32> @llvm.mips.addv.w(<4 x i32>, <4 x i32>) nounwind
421
422 ; CHECK: llvm_mips_addv_w_test:
423 ; CHECK: ld.w
424 ; CHECK: ld.w
425 ; CHECK: addv.w
426 ; CHECK: st.w
427 ; CHECK: .size llvm_mips_addv_w_test
428 ;
429 @llvm_mips_addv_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
430 @llvm_mips_addv_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
431 @llvm_mips_addv_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
432
433 define void @llvm_mips_addv_d_test() nounwind {
434 entry:
435   %0 = load <2 x i64>* @llvm_mips_addv_d_ARG1
436   %1 = load <2 x i64>* @llvm_mips_addv_d_ARG2
437   %2 = tail call <2 x i64> @llvm.mips.addv.d(<2 x i64> %0, <2 x i64> %1)
438   store <2 x i64> %2, <2 x i64>* @llvm_mips_addv_d_RES
439   ret void
440 }
441
442 declare <2 x i64> @llvm.mips.addv.d(<2 x i64>, <2 x i64>) nounwind
443
444 ; CHECK: llvm_mips_addv_d_test:
445 ; CHECK: ld.d
446 ; CHECK: ld.d
447 ; CHECK: addv.d
448 ; CHECK: st.d
449 ; CHECK: .size llvm_mips_addv_d_test
450 ;
451
452 define void @addv_b_test() nounwind {
453 entry:
454   %0 = load <16 x i8>* @llvm_mips_addv_b_ARG1
455   %1 = load <16 x i8>* @llvm_mips_addv_b_ARG2
456   %2 = add <16 x i8> %0, %1
457   store <16 x i8> %2, <16 x i8>* @llvm_mips_addv_b_RES
458   ret void
459 }
460
461 ; CHECK: addv_b_test:
462 ; CHECK: ld.b
463 ; CHECK: ld.b
464 ; CHECK: addv.b
465 ; CHECK: st.b
466 ; CHECK: .size addv_b_test
467 ;
468
469 define void @addv_h_test() nounwind {
470 entry:
471   %0 = load <8 x i16>* @llvm_mips_addv_h_ARG1
472   %1 = load <8 x i16>* @llvm_mips_addv_h_ARG2
473   %2 = add <8 x i16> %0, %1
474   store <8 x i16> %2, <8 x i16>* @llvm_mips_addv_h_RES
475   ret void
476 }
477
478 ; CHECK: addv_h_test:
479 ; CHECK: ld.h
480 ; CHECK: ld.h
481 ; CHECK: addv.h
482 ; CHECK: st.h
483 ; CHECK: .size addv_h_test
484 ;
485
486 define void @addv_w_test() nounwind {
487 entry:
488   %0 = load <4 x i32>* @llvm_mips_addv_w_ARG1
489   %1 = load <4 x i32>* @llvm_mips_addv_w_ARG2
490   %2 = add <4 x i32> %0, %1
491   store <4 x i32> %2, <4 x i32>* @llvm_mips_addv_w_RES
492   ret void
493 }
494
495 ; CHECK: addv_w_test:
496 ; CHECK: ld.w
497 ; CHECK: ld.w
498 ; CHECK: addv.w
499 ; CHECK: st.w
500 ; CHECK: .size addv_w_test
501 ;
502
503 define void @addv_d_test() nounwind {
504 entry:
505   %0 = load <2 x i64>* @llvm_mips_addv_d_ARG1
506   %1 = load <2 x i64>* @llvm_mips_addv_d_ARG2
507   %2 = add <2 x i64> %0, %1
508   store <2 x i64> %2, <2 x i64>* @llvm_mips_addv_d_RES
509   ret void
510 }
511
512 ; CHECK: addv_d_test:
513 ; CHECK: ld.d
514 ; CHECK: ld.d
515 ; CHECK: addv.d
516 ; CHECK: st.d
517 ; CHECK: .size addv_d_test
518 ;
519 @llvm_mips_asub_s_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
520 @llvm_mips_asub_s_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
521 @llvm_mips_asub_s_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
522
523 define void @llvm_mips_asub_s_b_test() nounwind {
524 entry:
525   %0 = load <16 x i8>* @llvm_mips_asub_s_b_ARG1
526   %1 = load <16 x i8>* @llvm_mips_asub_s_b_ARG2
527   %2 = tail call <16 x i8> @llvm.mips.asub.s.b(<16 x i8> %0, <16 x i8> %1)
528   store <16 x i8> %2, <16 x i8>* @llvm_mips_asub_s_b_RES
529   ret void
530 }
531
532 declare <16 x i8> @llvm.mips.asub.s.b(<16 x i8>, <16 x i8>) nounwind
533
534 ; CHECK: llvm_mips_asub_s_b_test:
535 ; CHECK: ld.b
536 ; CHECK: ld.b
537 ; CHECK: asub_s.b
538 ; CHECK: st.b
539 ; CHECK: .size llvm_mips_asub_s_b_test
540 ;
541 @llvm_mips_asub_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
542 @llvm_mips_asub_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
543 @llvm_mips_asub_s_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
544
545 define void @llvm_mips_asub_s_h_test() nounwind {
546 entry:
547   %0 = load <8 x i16>* @llvm_mips_asub_s_h_ARG1
548   %1 = load <8 x i16>* @llvm_mips_asub_s_h_ARG2
549   %2 = tail call <8 x i16> @llvm.mips.asub.s.h(<8 x i16> %0, <8 x i16> %1)
550   store <8 x i16> %2, <8 x i16>* @llvm_mips_asub_s_h_RES
551   ret void
552 }
553
554 declare <8 x i16> @llvm.mips.asub.s.h(<8 x i16>, <8 x i16>) nounwind
555
556 ; CHECK: llvm_mips_asub_s_h_test:
557 ; CHECK: ld.h
558 ; CHECK: ld.h
559 ; CHECK: asub_s.h
560 ; CHECK: st.h
561 ; CHECK: .size llvm_mips_asub_s_h_test
562 ;
563 @llvm_mips_asub_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
564 @llvm_mips_asub_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
565 @llvm_mips_asub_s_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
566
567 define void @llvm_mips_asub_s_w_test() nounwind {
568 entry:
569   %0 = load <4 x i32>* @llvm_mips_asub_s_w_ARG1
570   %1 = load <4 x i32>* @llvm_mips_asub_s_w_ARG2
571   %2 = tail call <4 x i32> @llvm.mips.asub.s.w(<4 x i32> %0, <4 x i32> %1)
572   store <4 x i32> %2, <4 x i32>* @llvm_mips_asub_s_w_RES
573   ret void
574 }
575
576 declare <4 x i32> @llvm.mips.asub.s.w(<4 x i32>, <4 x i32>) nounwind
577
578 ; CHECK: llvm_mips_asub_s_w_test:
579 ; CHECK: ld.w
580 ; CHECK: ld.w
581 ; CHECK: asub_s.w
582 ; CHECK: st.w
583 ; CHECK: .size llvm_mips_asub_s_w_test
584 ;
585 @llvm_mips_asub_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
586 @llvm_mips_asub_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
587 @llvm_mips_asub_s_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
588
589 define void @llvm_mips_asub_s_d_test() nounwind {
590 entry:
591   %0 = load <2 x i64>* @llvm_mips_asub_s_d_ARG1
592   %1 = load <2 x i64>* @llvm_mips_asub_s_d_ARG2
593   %2 = tail call <2 x i64> @llvm.mips.asub.s.d(<2 x i64> %0, <2 x i64> %1)
594   store <2 x i64> %2, <2 x i64>* @llvm_mips_asub_s_d_RES
595   ret void
596 }
597
598 declare <2 x i64> @llvm.mips.asub.s.d(<2 x i64>, <2 x i64>) nounwind
599
600 ; CHECK: llvm_mips_asub_s_d_test:
601 ; CHECK: ld.d
602 ; CHECK: ld.d
603 ; CHECK: asub_s.d
604 ; CHECK: st.d
605 ; CHECK: .size llvm_mips_asub_s_d_test
606 ;
607 @llvm_mips_asub_u_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
608 @llvm_mips_asub_u_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
609 @llvm_mips_asub_u_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
610
611 define void @llvm_mips_asub_u_b_test() nounwind {
612 entry:
613   %0 = load <16 x i8>* @llvm_mips_asub_u_b_ARG1
614   %1 = load <16 x i8>* @llvm_mips_asub_u_b_ARG2
615   %2 = tail call <16 x i8> @llvm.mips.asub.u.b(<16 x i8> %0, <16 x i8> %1)
616   store <16 x i8> %2, <16 x i8>* @llvm_mips_asub_u_b_RES
617   ret void
618 }
619
620 declare <16 x i8> @llvm.mips.asub.u.b(<16 x i8>, <16 x i8>) nounwind
621
622 ; CHECK: llvm_mips_asub_u_b_test:
623 ; CHECK: ld.b
624 ; CHECK: ld.b
625 ; CHECK: asub_u.b
626 ; CHECK: st.b
627 ; CHECK: .size llvm_mips_asub_u_b_test
628 ;
629 @llvm_mips_asub_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
630 @llvm_mips_asub_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
631 @llvm_mips_asub_u_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
632
633 define void @llvm_mips_asub_u_h_test() nounwind {
634 entry:
635   %0 = load <8 x i16>* @llvm_mips_asub_u_h_ARG1
636   %1 = load <8 x i16>* @llvm_mips_asub_u_h_ARG2
637   %2 = tail call <8 x i16> @llvm.mips.asub.u.h(<8 x i16> %0, <8 x i16> %1)
638   store <8 x i16> %2, <8 x i16>* @llvm_mips_asub_u_h_RES
639   ret void
640 }
641
642 declare <8 x i16> @llvm.mips.asub.u.h(<8 x i16>, <8 x i16>) nounwind
643
644 ; CHECK: llvm_mips_asub_u_h_test:
645 ; CHECK: ld.h
646 ; CHECK: ld.h
647 ; CHECK: asub_u.h
648 ; CHECK: st.h
649 ; CHECK: .size llvm_mips_asub_u_h_test
650 ;
651 @llvm_mips_asub_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
652 @llvm_mips_asub_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
653 @llvm_mips_asub_u_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
654
655 define void @llvm_mips_asub_u_w_test() nounwind {
656 entry:
657   %0 = load <4 x i32>* @llvm_mips_asub_u_w_ARG1
658   %1 = load <4 x i32>* @llvm_mips_asub_u_w_ARG2
659   %2 = tail call <4 x i32> @llvm.mips.asub.u.w(<4 x i32> %0, <4 x i32> %1)
660   store <4 x i32> %2, <4 x i32>* @llvm_mips_asub_u_w_RES
661   ret void
662 }
663
664 declare <4 x i32> @llvm.mips.asub.u.w(<4 x i32>, <4 x i32>) nounwind
665
666 ; CHECK: llvm_mips_asub_u_w_test:
667 ; CHECK: ld.w
668 ; CHECK: ld.w
669 ; CHECK: asub_u.w
670 ; CHECK: st.w
671 ; CHECK: .size llvm_mips_asub_u_w_test
672 ;
673 @llvm_mips_asub_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
674 @llvm_mips_asub_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
675 @llvm_mips_asub_u_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
676
677 define void @llvm_mips_asub_u_d_test() nounwind {
678 entry:
679   %0 = load <2 x i64>* @llvm_mips_asub_u_d_ARG1
680   %1 = load <2 x i64>* @llvm_mips_asub_u_d_ARG2
681   %2 = tail call <2 x i64> @llvm.mips.asub.u.d(<2 x i64> %0, <2 x i64> %1)
682   store <2 x i64> %2, <2 x i64>* @llvm_mips_asub_u_d_RES
683   ret void
684 }
685
686 declare <2 x i64> @llvm.mips.asub.u.d(<2 x i64>, <2 x i64>) nounwind
687
688 ; CHECK: llvm_mips_asub_u_d_test:
689 ; CHECK: ld.d
690 ; CHECK: ld.d
691 ; CHECK: asub_u.d
692 ; CHECK: st.d
693 ; CHECK: .size llvm_mips_asub_u_d_test
694 ;
695 @llvm_mips_ave_s_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
696 @llvm_mips_ave_s_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
697 @llvm_mips_ave_s_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
698
699 define void @llvm_mips_ave_s_b_test() nounwind {
700 entry:
701   %0 = load <16 x i8>* @llvm_mips_ave_s_b_ARG1
702   %1 = load <16 x i8>* @llvm_mips_ave_s_b_ARG2
703   %2 = tail call <16 x i8> @llvm.mips.ave.s.b(<16 x i8> %0, <16 x i8> %1)
704   store <16 x i8> %2, <16 x i8>* @llvm_mips_ave_s_b_RES
705   ret void
706 }
707
708 declare <16 x i8> @llvm.mips.ave.s.b(<16 x i8>, <16 x i8>) nounwind
709
710 ; CHECK: llvm_mips_ave_s_b_test:
711 ; CHECK: ld.b
712 ; CHECK: ld.b
713 ; CHECK: ave_s.b
714 ; CHECK: st.b
715 ; CHECK: .size llvm_mips_ave_s_b_test
716 ;
717 @llvm_mips_ave_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
718 @llvm_mips_ave_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
719 @llvm_mips_ave_s_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
720
721 define void @llvm_mips_ave_s_h_test() nounwind {
722 entry:
723   %0 = load <8 x i16>* @llvm_mips_ave_s_h_ARG1
724   %1 = load <8 x i16>* @llvm_mips_ave_s_h_ARG2
725   %2 = tail call <8 x i16> @llvm.mips.ave.s.h(<8 x i16> %0, <8 x i16> %1)
726   store <8 x i16> %2, <8 x i16>* @llvm_mips_ave_s_h_RES
727   ret void
728 }
729
730 declare <8 x i16> @llvm.mips.ave.s.h(<8 x i16>, <8 x i16>) nounwind
731
732 ; CHECK: llvm_mips_ave_s_h_test:
733 ; CHECK: ld.h
734 ; CHECK: ld.h
735 ; CHECK: ave_s.h
736 ; CHECK: st.h
737 ; CHECK: .size llvm_mips_ave_s_h_test
738 ;
739 @llvm_mips_ave_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
740 @llvm_mips_ave_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
741 @llvm_mips_ave_s_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
742
743 define void @llvm_mips_ave_s_w_test() nounwind {
744 entry:
745   %0 = load <4 x i32>* @llvm_mips_ave_s_w_ARG1
746   %1 = load <4 x i32>* @llvm_mips_ave_s_w_ARG2
747   %2 = tail call <4 x i32> @llvm.mips.ave.s.w(<4 x i32> %0, <4 x i32> %1)
748   store <4 x i32> %2, <4 x i32>* @llvm_mips_ave_s_w_RES
749   ret void
750 }
751
752 declare <4 x i32> @llvm.mips.ave.s.w(<4 x i32>, <4 x i32>) nounwind
753
754 ; CHECK: llvm_mips_ave_s_w_test:
755 ; CHECK: ld.w
756 ; CHECK: ld.w
757 ; CHECK: ave_s.w
758 ; CHECK: st.w
759 ; CHECK: .size llvm_mips_ave_s_w_test
760 ;
761 @llvm_mips_ave_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
762 @llvm_mips_ave_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
763 @llvm_mips_ave_s_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
764
765 define void @llvm_mips_ave_s_d_test() nounwind {
766 entry:
767   %0 = load <2 x i64>* @llvm_mips_ave_s_d_ARG1
768   %1 = load <2 x i64>* @llvm_mips_ave_s_d_ARG2
769   %2 = tail call <2 x i64> @llvm.mips.ave.s.d(<2 x i64> %0, <2 x i64> %1)
770   store <2 x i64> %2, <2 x i64>* @llvm_mips_ave_s_d_RES
771   ret void
772 }
773
774 declare <2 x i64> @llvm.mips.ave.s.d(<2 x i64>, <2 x i64>) nounwind
775
776 ; CHECK: llvm_mips_ave_s_d_test:
777 ; CHECK: ld.d
778 ; CHECK: ld.d
779 ; CHECK: ave_s.d
780 ; CHECK: st.d
781 ; CHECK: .size llvm_mips_ave_s_d_test
782 ;
783 @llvm_mips_ave_u_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
784 @llvm_mips_ave_u_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
785 @llvm_mips_ave_u_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
786
787 define void @llvm_mips_ave_u_b_test() nounwind {
788 entry:
789   %0 = load <16 x i8>* @llvm_mips_ave_u_b_ARG1
790   %1 = load <16 x i8>* @llvm_mips_ave_u_b_ARG2
791   %2 = tail call <16 x i8> @llvm.mips.ave.u.b(<16 x i8> %0, <16 x i8> %1)
792   store <16 x i8> %2, <16 x i8>* @llvm_mips_ave_u_b_RES
793   ret void
794 }
795
796 declare <16 x i8> @llvm.mips.ave.u.b(<16 x i8>, <16 x i8>) nounwind
797
798 ; CHECK: llvm_mips_ave_u_b_test:
799 ; CHECK: ld.b
800 ; CHECK: ld.b
801 ; CHECK: ave_u.b
802 ; CHECK: st.b
803 ; CHECK: .size llvm_mips_ave_u_b_test
804 ;
805 @llvm_mips_ave_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
806 @llvm_mips_ave_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
807 @llvm_mips_ave_u_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
808
809 define void @llvm_mips_ave_u_h_test() nounwind {
810 entry:
811   %0 = load <8 x i16>* @llvm_mips_ave_u_h_ARG1
812   %1 = load <8 x i16>* @llvm_mips_ave_u_h_ARG2
813   %2 = tail call <8 x i16> @llvm.mips.ave.u.h(<8 x i16> %0, <8 x i16> %1)
814   store <8 x i16> %2, <8 x i16>* @llvm_mips_ave_u_h_RES
815   ret void
816 }
817
818 declare <8 x i16> @llvm.mips.ave.u.h(<8 x i16>, <8 x i16>) nounwind
819
820 ; CHECK: llvm_mips_ave_u_h_test:
821 ; CHECK: ld.h
822 ; CHECK: ld.h
823 ; CHECK: ave_u.h
824 ; CHECK: st.h
825 ; CHECK: .size llvm_mips_ave_u_h_test
826 ;
827 @llvm_mips_ave_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
828 @llvm_mips_ave_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
829 @llvm_mips_ave_u_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
830
831 define void @llvm_mips_ave_u_w_test() nounwind {
832 entry:
833   %0 = load <4 x i32>* @llvm_mips_ave_u_w_ARG1
834   %1 = load <4 x i32>* @llvm_mips_ave_u_w_ARG2
835   %2 = tail call <4 x i32> @llvm.mips.ave.u.w(<4 x i32> %0, <4 x i32> %1)
836   store <4 x i32> %2, <4 x i32>* @llvm_mips_ave_u_w_RES
837   ret void
838 }
839
840 declare <4 x i32> @llvm.mips.ave.u.w(<4 x i32>, <4 x i32>) nounwind
841
842 ; CHECK: llvm_mips_ave_u_w_test:
843 ; CHECK: ld.w
844 ; CHECK: ld.w
845 ; CHECK: ave_u.w
846 ; CHECK: st.w
847 ; CHECK: .size llvm_mips_ave_u_w_test
848 ;
849 @llvm_mips_ave_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
850 @llvm_mips_ave_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
851 @llvm_mips_ave_u_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
852
853 define void @llvm_mips_ave_u_d_test() nounwind {
854 entry:
855   %0 = load <2 x i64>* @llvm_mips_ave_u_d_ARG1
856   %1 = load <2 x i64>* @llvm_mips_ave_u_d_ARG2
857   %2 = tail call <2 x i64> @llvm.mips.ave.u.d(<2 x i64> %0, <2 x i64> %1)
858   store <2 x i64> %2, <2 x i64>* @llvm_mips_ave_u_d_RES
859   ret void
860 }
861
862 declare <2 x i64> @llvm.mips.ave.u.d(<2 x i64>, <2 x i64>) nounwind
863
864 ; CHECK: llvm_mips_ave_u_d_test:
865 ; CHECK: ld.d
866 ; CHECK: ld.d
867 ; CHECK: ave_u.d
868 ; CHECK: st.d
869 ; CHECK: .size llvm_mips_ave_u_d_test
870 ;
871 @llvm_mips_aver_s_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
872 @llvm_mips_aver_s_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
873 @llvm_mips_aver_s_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
874
875 define void @llvm_mips_aver_s_b_test() nounwind {
876 entry:
877   %0 = load <16 x i8>* @llvm_mips_aver_s_b_ARG1
878   %1 = load <16 x i8>* @llvm_mips_aver_s_b_ARG2
879   %2 = tail call <16 x i8> @llvm.mips.aver.s.b(<16 x i8> %0, <16 x i8> %1)
880   store <16 x i8> %2, <16 x i8>* @llvm_mips_aver_s_b_RES
881   ret void
882 }
883
884 declare <16 x i8> @llvm.mips.aver.s.b(<16 x i8>, <16 x i8>) nounwind
885
886 ; CHECK: llvm_mips_aver_s_b_test:
887 ; CHECK: ld.b
888 ; CHECK: ld.b
889 ; CHECK: aver_s.b
890 ; CHECK: st.b
891 ; CHECK: .size llvm_mips_aver_s_b_test
892 ;
893 @llvm_mips_aver_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
894 @llvm_mips_aver_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
895 @llvm_mips_aver_s_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
896
897 define void @llvm_mips_aver_s_h_test() nounwind {
898 entry:
899   %0 = load <8 x i16>* @llvm_mips_aver_s_h_ARG1
900   %1 = load <8 x i16>* @llvm_mips_aver_s_h_ARG2
901   %2 = tail call <8 x i16> @llvm.mips.aver.s.h(<8 x i16> %0, <8 x i16> %1)
902   store <8 x i16> %2, <8 x i16>* @llvm_mips_aver_s_h_RES
903   ret void
904 }
905
906 declare <8 x i16> @llvm.mips.aver.s.h(<8 x i16>, <8 x i16>) nounwind
907
908 ; CHECK: llvm_mips_aver_s_h_test:
909 ; CHECK: ld.h
910 ; CHECK: ld.h
911 ; CHECK: aver_s.h
912 ; CHECK: st.h
913 ; CHECK: .size llvm_mips_aver_s_h_test
914 ;
915 @llvm_mips_aver_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
916 @llvm_mips_aver_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
917 @llvm_mips_aver_s_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
918
919 define void @llvm_mips_aver_s_w_test() nounwind {
920 entry:
921   %0 = load <4 x i32>* @llvm_mips_aver_s_w_ARG1
922   %1 = load <4 x i32>* @llvm_mips_aver_s_w_ARG2
923   %2 = tail call <4 x i32> @llvm.mips.aver.s.w(<4 x i32> %0, <4 x i32> %1)
924   store <4 x i32> %2, <4 x i32>* @llvm_mips_aver_s_w_RES
925   ret void
926 }
927
928 declare <4 x i32> @llvm.mips.aver.s.w(<4 x i32>, <4 x i32>) nounwind
929
930 ; CHECK: llvm_mips_aver_s_w_test:
931 ; CHECK: ld.w
932 ; CHECK: ld.w
933 ; CHECK: aver_s.w
934 ; CHECK: st.w
935 ; CHECK: .size llvm_mips_aver_s_w_test
936 ;
937 @llvm_mips_aver_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
938 @llvm_mips_aver_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
939 @llvm_mips_aver_s_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
940
941 define void @llvm_mips_aver_s_d_test() nounwind {
942 entry:
943   %0 = load <2 x i64>* @llvm_mips_aver_s_d_ARG1
944   %1 = load <2 x i64>* @llvm_mips_aver_s_d_ARG2
945   %2 = tail call <2 x i64> @llvm.mips.aver.s.d(<2 x i64> %0, <2 x i64> %1)
946   store <2 x i64> %2, <2 x i64>* @llvm_mips_aver_s_d_RES
947   ret void
948 }
949
950 declare <2 x i64> @llvm.mips.aver.s.d(<2 x i64>, <2 x i64>) nounwind
951
952 ; CHECK: llvm_mips_aver_s_d_test:
953 ; CHECK: ld.d
954 ; CHECK: ld.d
955 ; CHECK: aver_s.d
956 ; CHECK: st.d
957 ; CHECK: .size llvm_mips_aver_s_d_test
958 ;
959 @llvm_mips_aver_u_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
960 @llvm_mips_aver_u_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
961 @llvm_mips_aver_u_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
962
963 define void @llvm_mips_aver_u_b_test() nounwind {
964 entry:
965   %0 = load <16 x i8>* @llvm_mips_aver_u_b_ARG1
966   %1 = load <16 x i8>* @llvm_mips_aver_u_b_ARG2
967   %2 = tail call <16 x i8> @llvm.mips.aver.u.b(<16 x i8> %0, <16 x i8> %1)
968   store <16 x i8> %2, <16 x i8>* @llvm_mips_aver_u_b_RES
969   ret void
970 }
971
972 declare <16 x i8> @llvm.mips.aver.u.b(<16 x i8>, <16 x i8>) nounwind
973
974 ; CHECK: llvm_mips_aver_u_b_test:
975 ; CHECK: ld.b
976 ; CHECK: ld.b
977 ; CHECK: aver_u.b
978 ; CHECK: st.b
979 ; CHECK: .size llvm_mips_aver_u_b_test
980 ;
981 @llvm_mips_aver_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
982 @llvm_mips_aver_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
983 @llvm_mips_aver_u_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
984
985 define void @llvm_mips_aver_u_h_test() nounwind {
986 entry:
987   %0 = load <8 x i16>* @llvm_mips_aver_u_h_ARG1
988   %1 = load <8 x i16>* @llvm_mips_aver_u_h_ARG2
989   %2 = tail call <8 x i16> @llvm.mips.aver.u.h(<8 x i16> %0, <8 x i16> %1)
990   store <8 x i16> %2, <8 x i16>* @llvm_mips_aver_u_h_RES
991   ret void
992 }
993
994 declare <8 x i16> @llvm.mips.aver.u.h(<8 x i16>, <8 x i16>) nounwind
995
996 ; CHECK: llvm_mips_aver_u_h_test:
997 ; CHECK: ld.h
998 ; CHECK: ld.h
999 ; CHECK: aver_u.h
1000 ; CHECK: st.h
1001 ; CHECK: .size llvm_mips_aver_u_h_test
1002 ;
1003 @llvm_mips_aver_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1004 @llvm_mips_aver_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1005 @llvm_mips_aver_u_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1006
1007 define void @llvm_mips_aver_u_w_test() nounwind {
1008 entry:
1009   %0 = load <4 x i32>* @llvm_mips_aver_u_w_ARG1
1010   %1 = load <4 x i32>* @llvm_mips_aver_u_w_ARG2
1011   %2 = tail call <4 x i32> @llvm.mips.aver.u.w(<4 x i32> %0, <4 x i32> %1)
1012   store <4 x i32> %2, <4 x i32>* @llvm_mips_aver_u_w_RES
1013   ret void
1014 }
1015
1016 declare <4 x i32> @llvm.mips.aver.u.w(<4 x i32>, <4 x i32>) nounwind
1017
1018 ; CHECK: llvm_mips_aver_u_w_test:
1019 ; CHECK: ld.w
1020 ; CHECK: ld.w
1021 ; CHECK: aver_u.w
1022 ; CHECK: st.w
1023 ; CHECK: .size llvm_mips_aver_u_w_test
1024 ;
1025 @llvm_mips_aver_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1026 @llvm_mips_aver_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1027 @llvm_mips_aver_u_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
1028
1029 define void @llvm_mips_aver_u_d_test() nounwind {
1030 entry:
1031   %0 = load <2 x i64>* @llvm_mips_aver_u_d_ARG1
1032   %1 = load <2 x i64>* @llvm_mips_aver_u_d_ARG2
1033   %2 = tail call <2 x i64> @llvm.mips.aver.u.d(<2 x i64> %0, <2 x i64> %1)
1034   store <2 x i64> %2, <2 x i64>* @llvm_mips_aver_u_d_RES
1035   ret void
1036 }
1037
1038 declare <2 x i64> @llvm.mips.aver.u.d(<2 x i64>, <2 x i64>) nounwind
1039
1040 ; CHECK: llvm_mips_aver_u_d_test:
1041 ; CHECK: ld.d
1042 ; CHECK: ld.d
1043 ; CHECK: aver_u.d
1044 ; CHECK: st.d
1045 ; CHECK: .size llvm_mips_aver_u_d_test
1046 ;