30cf265233e51390706e82d101343138bf0feb81
[oota-llvm.git] / test / CodeGen / Mips / msa / 3r-s.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 's'
3
4 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
5 ; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
6
7 @llvm_mips_sld_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
8 @llvm_mips_sld_b_ARG2 = global i32 10, align 16
9 @llvm_mips_sld_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
10
11 define void @llvm_mips_sld_b_test() nounwind {
12 entry:
13   %0 = load <16 x i8>* @llvm_mips_sld_b_ARG1
14   %1 = load i32* @llvm_mips_sld_b_ARG2
15   %2 = tail call <16 x i8> @llvm.mips.sld.b(<16 x i8> %0, i32 %1)
16   store <16 x i8> %2, <16 x i8>* @llvm_mips_sld_b_RES
17   ret void
18 }
19
20 declare <16 x i8> @llvm.mips.sld.b(<16 x i8>, i32) nounwind
21
22 ; CHECK: llvm_mips_sld_b_test:
23 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_b_ARG1)
24 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_b_ARG2)
25 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
26 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
27 ; CHECK-DAG: sld.b [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
28 ; CHECK-DAG: st.b [[WD]]
29 ; CHECK: .size llvm_mips_sld_b_test
30 ;
31 @llvm_mips_sld_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
32 @llvm_mips_sld_h_ARG2 = global i32 10, align 16
33 @llvm_mips_sld_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
34
35 define void @llvm_mips_sld_h_test() nounwind {
36 entry:
37   %0 = load <8 x i16>* @llvm_mips_sld_h_ARG1
38   %1 = load i32* @llvm_mips_sld_h_ARG2
39   %2 = tail call <8 x i16> @llvm.mips.sld.h(<8 x i16> %0, i32 %1)
40   store <8 x i16> %2, <8 x i16>* @llvm_mips_sld_h_RES
41   ret void
42 }
43
44 declare <8 x i16> @llvm.mips.sld.h(<8 x i16>, i32) nounwind
45
46 ; CHECK: llvm_mips_sld_h_test:
47 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_h_ARG1)
48 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_h_ARG2)
49 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
50 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
51 ; CHECK-DAG: sld.h [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
52 ; CHECK-DAG: st.h [[WD]]
53 ; CHECK: .size llvm_mips_sld_h_test
54 ;
55 @llvm_mips_sld_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
56 @llvm_mips_sld_w_ARG2 = global i32 10, align 16
57 @llvm_mips_sld_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
58
59 define void @llvm_mips_sld_w_test() nounwind {
60 entry:
61   %0 = load <4 x i32>* @llvm_mips_sld_w_ARG1
62   %1 = load i32* @llvm_mips_sld_w_ARG2
63   %2 = tail call <4 x i32> @llvm.mips.sld.w(<4 x i32> %0, i32 %1)
64   store <4 x i32> %2, <4 x i32>* @llvm_mips_sld_w_RES
65   ret void
66 }
67
68 declare <4 x i32> @llvm.mips.sld.w(<4 x i32>, i32) nounwind
69
70 ; CHECK: llvm_mips_sld_w_test:
71 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_w_ARG1)
72 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_w_ARG2)
73 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
74 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
75 ; CHECK-DAG: sld.w [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
76 ; CHECK-DAG: st.w [[WD]]
77 ; CHECK: .size llvm_mips_sld_w_test
78 ;
79 @llvm_mips_sld_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
80 @llvm_mips_sld_d_ARG2 = global i32 10, align 16
81 @llvm_mips_sld_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
82
83 define void @llvm_mips_sld_d_test() nounwind {
84 entry:
85   %0 = load <2 x i64>* @llvm_mips_sld_d_ARG1
86   %1 = load i32* @llvm_mips_sld_d_ARG2
87   %2 = tail call <2 x i64> @llvm.mips.sld.d(<2 x i64> %0, i32 %1)
88   store <2 x i64> %2, <2 x i64>* @llvm_mips_sld_d_RES
89   ret void
90 }
91
92 declare <2 x i64> @llvm.mips.sld.d(<2 x i64>, i32) nounwind
93
94 ; CHECK: llvm_mips_sld_d_test:
95 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_d_ARG1)
96 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_d_ARG2)
97 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
98 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
99 ; CHECK-DAG: sld.d [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
100 ; CHECK-DAG: st.d [[WD]]
101 ; CHECK: .size llvm_mips_sld_d_test
102 ;
103 @llvm_mips_sll_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
104 @llvm_mips_sll_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
105 @llvm_mips_sll_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
106
107 define void @llvm_mips_sll_b_test() nounwind {
108 entry:
109   %0 = load <16 x i8>* @llvm_mips_sll_b_ARG1
110   %1 = load <16 x i8>* @llvm_mips_sll_b_ARG2
111   %2 = tail call <16 x i8> @llvm.mips.sll.b(<16 x i8> %0, <16 x i8> %1)
112   store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES
113   ret void
114 }
115
116 declare <16 x i8> @llvm.mips.sll.b(<16 x i8>, <16 x i8>) nounwind
117
118 ; CHECK: llvm_mips_sll_b_test:
119 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1)
120 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2)
121 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
122 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
123 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
124 ; CHECK-DAG: st.b [[WD]]
125 ; CHECK: .size llvm_mips_sll_b_test
126 ;
127 @llvm_mips_sll_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
128 @llvm_mips_sll_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
129 @llvm_mips_sll_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
130
131 define void @llvm_mips_sll_h_test() nounwind {
132 entry:
133   %0 = load <8 x i16>* @llvm_mips_sll_h_ARG1
134   %1 = load <8 x i16>* @llvm_mips_sll_h_ARG2
135   %2 = tail call <8 x i16> @llvm.mips.sll.h(<8 x i16> %0, <8 x i16> %1)
136   store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES
137   ret void
138 }
139
140 declare <8 x i16> @llvm.mips.sll.h(<8 x i16>, <8 x i16>) nounwind
141
142 ; CHECK: llvm_mips_sll_h_test:
143 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1)
144 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2)
145 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
146 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
147 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
148 ; CHECK-DAG: st.h [[WD]]
149 ; CHECK: .size llvm_mips_sll_h_test
150 ;
151 @llvm_mips_sll_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
152 @llvm_mips_sll_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
153 @llvm_mips_sll_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
154
155 define void @llvm_mips_sll_w_test() nounwind {
156 entry:
157   %0 = load <4 x i32>* @llvm_mips_sll_w_ARG1
158   %1 = load <4 x i32>* @llvm_mips_sll_w_ARG2
159   %2 = tail call <4 x i32> @llvm.mips.sll.w(<4 x i32> %0, <4 x i32> %1)
160   store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES
161   ret void
162 }
163
164 declare <4 x i32> @llvm.mips.sll.w(<4 x i32>, <4 x i32>) nounwind
165
166 ; CHECK: llvm_mips_sll_w_test:
167 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1)
168 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2)
169 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
170 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
171 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
172 ; CHECK-DAG: st.w [[WD]]
173 ; CHECK: .size llvm_mips_sll_w_test
174 ;
175 @llvm_mips_sll_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
176 @llvm_mips_sll_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
177 @llvm_mips_sll_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
178
179 define void @llvm_mips_sll_d_test() nounwind {
180 entry:
181   %0 = load <2 x i64>* @llvm_mips_sll_d_ARG1
182   %1 = load <2 x i64>* @llvm_mips_sll_d_ARG2
183   %2 = tail call <2 x i64> @llvm.mips.sll.d(<2 x i64> %0, <2 x i64> %1)
184   store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES
185   ret void
186 }
187
188 declare <2 x i64> @llvm.mips.sll.d(<2 x i64>, <2 x i64>) nounwind
189
190 ; CHECK: llvm_mips_sll_d_test:
191 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1)
192 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2)
193 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
194 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
195 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
196 ; CHECK-DAG: st.d [[WD]]
197 ; CHECK: .size llvm_mips_sll_d_test
198
199 define void @sll_b_test() nounwind {
200 entry:
201   %0 = load <16 x i8>* @llvm_mips_sll_b_ARG1
202   %1 = load <16 x i8>* @llvm_mips_sll_b_ARG2
203   %2 = shl <16 x i8> %0, %1
204   store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES
205   ret void
206 }
207
208 ; CHECK: sll_b_test:
209 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1)
210 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2)
211 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
212 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
213 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
214 ; CHECK-DAG: st.b [[WD]]
215 ; CHECK: .size sll_b_test
216
217 define void @sll_h_test() nounwind {
218 entry:
219   %0 = load <8 x i16>* @llvm_mips_sll_h_ARG1
220   %1 = load <8 x i16>* @llvm_mips_sll_h_ARG2
221   %2 = shl <8 x i16> %0, %1
222   store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES
223   ret void
224 }
225
226 ; CHECK: sll_h_test:
227 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1)
228 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2)
229 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
230 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
231 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
232 ; CHECK-DAG: st.h [[WD]]
233 ; CHECK: .size sll_h_test
234
235 define void @sll_w_test() nounwind {
236 entry:
237   %0 = load <4 x i32>* @llvm_mips_sll_w_ARG1
238   %1 = load <4 x i32>* @llvm_mips_sll_w_ARG2
239   %2 = shl <4 x i32> %0, %1
240   store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES
241   ret void
242 }
243
244 ; CHECK: sll_w_test:
245 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1)
246 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2)
247 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
248 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
249 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
250 ; CHECK-DAG: st.w [[WD]]
251 ; CHECK: .size sll_w_test
252
253 define void @sll_d_test() nounwind {
254 entry:
255   %0 = load <2 x i64>* @llvm_mips_sll_d_ARG1
256   %1 = load <2 x i64>* @llvm_mips_sll_d_ARG2
257   %2 = shl <2 x i64> %0, %1
258   store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES
259   ret void
260 }
261
262 ; CHECK: sll_d_test:
263 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1)
264 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2)
265 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
266 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
267 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
268 ; CHECK-DAG: st.d [[WD]]
269 ; CHECK: .size sll_d_test
270 ;
271 @llvm_mips_sra_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
272 @llvm_mips_sra_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
273 @llvm_mips_sra_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
274
275 define void @llvm_mips_sra_b_test() nounwind {
276 entry:
277   %0 = load <16 x i8>* @llvm_mips_sra_b_ARG1
278   %1 = load <16 x i8>* @llvm_mips_sra_b_ARG2
279   %2 = tail call <16 x i8> @llvm.mips.sra.b(<16 x i8> %0, <16 x i8> %1)
280   store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES
281   ret void
282 }
283
284 declare <16 x i8> @llvm.mips.sra.b(<16 x i8>, <16 x i8>) nounwind
285
286 ; CHECK: llvm_mips_sra_b_test:
287 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1)
288 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2)
289 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
290 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
291 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
292 ; CHECK-DAG: st.b [[WD]]
293 ; CHECK: .size llvm_mips_sra_b_test
294 ;
295 @llvm_mips_sra_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
296 @llvm_mips_sra_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
297 @llvm_mips_sra_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
298
299 define void @llvm_mips_sra_h_test() nounwind {
300 entry:
301   %0 = load <8 x i16>* @llvm_mips_sra_h_ARG1
302   %1 = load <8 x i16>* @llvm_mips_sra_h_ARG2
303   %2 = tail call <8 x i16> @llvm.mips.sra.h(<8 x i16> %0, <8 x i16> %1)
304   store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES
305   ret void
306 }
307
308 declare <8 x i16> @llvm.mips.sra.h(<8 x i16>, <8 x i16>) nounwind
309
310 ; CHECK: llvm_mips_sra_h_test:
311 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1)
312 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2)
313 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
314 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
315 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
316 ; CHECK-DAG: st.h [[WD]]
317 ; CHECK: .size llvm_mips_sra_h_test
318 ;
319 @llvm_mips_sra_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
320 @llvm_mips_sra_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
321 @llvm_mips_sra_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
322
323 define void @llvm_mips_sra_w_test() nounwind {
324 entry:
325   %0 = load <4 x i32>* @llvm_mips_sra_w_ARG1
326   %1 = load <4 x i32>* @llvm_mips_sra_w_ARG2
327   %2 = tail call <4 x i32> @llvm.mips.sra.w(<4 x i32> %0, <4 x i32> %1)
328   store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES
329   ret void
330 }
331
332 declare <4 x i32> @llvm.mips.sra.w(<4 x i32>, <4 x i32>) nounwind
333
334 ; CHECK: llvm_mips_sra_w_test:
335 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1)
336 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2)
337 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
338 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
339 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
340 ; CHECK-DAG: st.w [[WD]]
341 ; CHECK: .size llvm_mips_sra_w_test
342 ;
343 @llvm_mips_sra_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
344 @llvm_mips_sra_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
345 @llvm_mips_sra_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
346
347 define void @llvm_mips_sra_d_test() nounwind {
348 entry:
349   %0 = load <2 x i64>* @llvm_mips_sra_d_ARG1
350   %1 = load <2 x i64>* @llvm_mips_sra_d_ARG2
351   %2 = tail call <2 x i64> @llvm.mips.sra.d(<2 x i64> %0, <2 x i64> %1)
352   store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES
353   ret void
354 }
355
356 declare <2 x i64> @llvm.mips.sra.d(<2 x i64>, <2 x i64>) nounwind
357
358 ; CHECK: llvm_mips_sra_d_test:
359 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1)
360 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2)
361 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
362 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
363 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
364 ; CHECK-DAG: st.d [[WD]]
365 ; CHECK: .size llvm_mips_sra_d_test
366 ;
367
368 define void @sra_b_test() nounwind {
369 entry:
370   %0 = load <16 x i8>* @llvm_mips_sra_b_ARG1
371   %1 = load <16 x i8>* @llvm_mips_sra_b_ARG2
372   %2 = ashr <16 x i8> %0, %1
373   store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES
374   ret void
375 }
376
377 ; CHECK: sra_b_test:
378 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1)
379 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2)
380 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
381 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
382 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
383 ; CHECK-DAG: st.b [[WD]]
384 ; CHECK: .size sra_b_test
385
386 define void @sra_h_test() nounwind {
387 entry:
388   %0 = load <8 x i16>* @llvm_mips_sra_h_ARG1
389   %1 = load <8 x i16>* @llvm_mips_sra_h_ARG2
390   %2 = ashr <8 x i16> %0, %1
391   store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES
392   ret void
393 }
394
395 ; CHECK: sra_h_test:
396 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1)
397 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2)
398 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
399 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
400 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
401 ; CHECK-DAG: st.h [[WD]]
402 ; CHECK: .size sra_h_test
403
404 define void @sra_w_test() nounwind {
405 entry:
406   %0 = load <4 x i32>* @llvm_mips_sra_w_ARG1
407   %1 = load <4 x i32>* @llvm_mips_sra_w_ARG2
408   %2 = ashr <4 x i32> %0, %1
409   store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES
410   ret void
411 }
412
413 ; CHECK: sra_w_test:
414 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1)
415 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2)
416 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
417 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
418 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
419 ; CHECK-DAG: st.w [[WD]]
420 ; CHECK: .size sra_w_test
421
422 define void @sra_d_test() nounwind {
423 entry:
424   %0 = load <2 x i64>* @llvm_mips_sra_d_ARG1
425   %1 = load <2 x i64>* @llvm_mips_sra_d_ARG2
426   %2 = ashr <2 x i64> %0, %1
427   store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES
428   ret void
429 }
430
431 ; CHECK: sra_d_test:
432 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1)
433 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2)
434 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
435 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
436 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
437 ; CHECK-DAG: st.d [[WD]]
438 ; CHECK: .size sra_d_test
439
440 @llvm_mips_srar_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_srar_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_srar_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_srar_b_test() nounwind {
445 entry:
446   %0 = load <16 x i8>* @llvm_mips_srar_b_ARG1
447   %1 = load <16 x i8>* @llvm_mips_srar_b_ARG2
448   %2 = tail call <16 x i8> @llvm.mips.srar.b(<16 x i8> %0, <16 x i8> %1)
449   store <16 x i8> %2, <16 x i8>* @llvm_mips_srar_b_RES
450   ret void
451 }
452
453 declare <16 x i8> @llvm.mips.srar.b(<16 x i8>, <16 x i8>) nounwind
454
455 ; CHECK: llvm_mips_srar_b_test:
456 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_b_ARG1)
457 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_b_ARG2)
458 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
459 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
460 ; CHECK-DAG: srar.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
461 ; CHECK-DAG: st.b [[WD]]
462 ; CHECK: .size llvm_mips_srar_b_test
463 ;
464 @llvm_mips_srar_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
465 @llvm_mips_srar_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
466 @llvm_mips_srar_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
467
468 define void @llvm_mips_srar_h_test() nounwind {
469 entry:
470   %0 = load <8 x i16>* @llvm_mips_srar_h_ARG1
471   %1 = load <8 x i16>* @llvm_mips_srar_h_ARG2
472   %2 = tail call <8 x i16> @llvm.mips.srar.h(<8 x i16> %0, <8 x i16> %1)
473   store <8 x i16> %2, <8 x i16>* @llvm_mips_srar_h_RES
474   ret void
475 }
476
477 declare <8 x i16> @llvm.mips.srar.h(<8 x i16>, <8 x i16>) nounwind
478
479 ; CHECK: llvm_mips_srar_h_test:
480 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_h_ARG1)
481 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_h_ARG2)
482 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
483 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
484 ; CHECK-DAG: srar.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
485 ; CHECK-DAG: st.h [[WD]]
486 ; CHECK: .size llvm_mips_srar_h_test
487 ;
488 @llvm_mips_srar_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
489 @llvm_mips_srar_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
490 @llvm_mips_srar_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
491
492 define void @llvm_mips_srar_w_test() nounwind {
493 entry:
494   %0 = load <4 x i32>* @llvm_mips_srar_w_ARG1
495   %1 = load <4 x i32>* @llvm_mips_srar_w_ARG2
496   %2 = tail call <4 x i32> @llvm.mips.srar.w(<4 x i32> %0, <4 x i32> %1)
497   store <4 x i32> %2, <4 x i32>* @llvm_mips_srar_w_RES
498   ret void
499 }
500
501 declare <4 x i32> @llvm.mips.srar.w(<4 x i32>, <4 x i32>) nounwind
502
503 ; CHECK: llvm_mips_srar_w_test:
504 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_w_ARG1)
505 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_w_ARG2)
506 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
507 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
508 ; CHECK-DAG: srar.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
509 ; CHECK-DAG: st.w [[WD]]
510 ; CHECK: .size llvm_mips_srar_w_test
511 ;
512 @llvm_mips_srar_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
513 @llvm_mips_srar_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
514 @llvm_mips_srar_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
515
516 define void @llvm_mips_srar_d_test() nounwind {
517 entry:
518   %0 = load <2 x i64>* @llvm_mips_srar_d_ARG1
519   %1 = load <2 x i64>* @llvm_mips_srar_d_ARG2
520   %2 = tail call <2 x i64> @llvm.mips.srar.d(<2 x i64> %0, <2 x i64> %1)
521   store <2 x i64> %2, <2 x i64>* @llvm_mips_srar_d_RES
522   ret void
523 }
524
525 declare <2 x i64> @llvm.mips.srar.d(<2 x i64>, <2 x i64>) nounwind
526
527 ; CHECK: llvm_mips_srar_d_test:
528 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_d_ARG1)
529 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_d_ARG2)
530 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
531 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
532 ; CHECK-DAG: srar.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
533 ; CHECK-DAG: st.d [[WD]]
534 ; CHECK: .size llvm_mips_srar_d_test
535 ;
536 @llvm_mips_srl_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
537 @llvm_mips_srl_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
538 @llvm_mips_srl_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
539
540 define void @llvm_mips_srl_b_test() nounwind {
541 entry:
542   %0 = load <16 x i8>* @llvm_mips_srl_b_ARG1
543   %1 = load <16 x i8>* @llvm_mips_srl_b_ARG2
544   %2 = tail call <16 x i8> @llvm.mips.srl.b(<16 x i8> %0, <16 x i8> %1)
545   store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES
546   ret void
547 }
548
549 declare <16 x i8> @llvm.mips.srl.b(<16 x i8>, <16 x i8>) nounwind
550
551 ; CHECK: llvm_mips_srl_b_test:
552 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1)
553 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2)
554 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
555 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
556 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
557 ; CHECK-DAG: st.b [[WD]]
558 ; CHECK: .size llvm_mips_srl_b_test
559 ;
560 @llvm_mips_srl_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
561 @llvm_mips_srl_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
562 @llvm_mips_srl_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
563
564 define void @llvm_mips_srl_h_test() nounwind {
565 entry:
566   %0 = load <8 x i16>* @llvm_mips_srl_h_ARG1
567   %1 = load <8 x i16>* @llvm_mips_srl_h_ARG2
568   %2 = tail call <8 x i16> @llvm.mips.srl.h(<8 x i16> %0, <8 x i16> %1)
569   store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES
570   ret void
571 }
572
573 declare <8 x i16> @llvm.mips.srl.h(<8 x i16>, <8 x i16>) nounwind
574
575 ; CHECK: llvm_mips_srl_h_test:
576 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1)
577 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2)
578 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
579 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
580 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
581 ; CHECK-DAG: st.h [[WD]]
582 ; CHECK: .size llvm_mips_srl_h_test
583 ;
584 @llvm_mips_srl_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
585 @llvm_mips_srl_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
586 @llvm_mips_srl_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
587
588 define void @llvm_mips_srl_w_test() nounwind {
589 entry:
590   %0 = load <4 x i32>* @llvm_mips_srl_w_ARG1
591   %1 = load <4 x i32>* @llvm_mips_srl_w_ARG2
592   %2 = tail call <4 x i32> @llvm.mips.srl.w(<4 x i32> %0, <4 x i32> %1)
593   store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES
594   ret void
595 }
596
597 declare <4 x i32> @llvm.mips.srl.w(<4 x i32>, <4 x i32>) nounwind
598
599 ; CHECK: llvm_mips_srl_w_test:
600 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1)
601 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2)
602 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
603 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
604 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
605 ; CHECK-DAG: st.w [[WD]]
606 ; CHECK: .size llvm_mips_srl_w_test
607 ;
608 @llvm_mips_srl_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
609 @llvm_mips_srl_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
610 @llvm_mips_srl_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
611
612 define void @llvm_mips_srl_d_test() nounwind {
613 entry:
614   %0 = load <2 x i64>* @llvm_mips_srl_d_ARG1
615   %1 = load <2 x i64>* @llvm_mips_srl_d_ARG2
616   %2 = tail call <2 x i64> @llvm.mips.srl.d(<2 x i64> %0, <2 x i64> %1)
617   store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES
618   ret void
619 }
620
621 declare <2 x i64> @llvm.mips.srl.d(<2 x i64>, <2 x i64>) nounwind
622
623 ; CHECK: llvm_mips_srl_d_test:
624 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1)
625 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2)
626 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
627 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
628 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
629 ; CHECK-DAG: st.d [[WD]]
630 ; CHECK: .size llvm_mips_srl_d_test
631 ;
632 @llvm_mips_srlr_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
633 @llvm_mips_srlr_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
634 @llvm_mips_srlr_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
635
636 define void @llvm_mips_srlr_b_test() nounwind {
637 entry:
638   %0 = load <16 x i8>* @llvm_mips_srlr_b_ARG1
639   %1 = load <16 x i8>* @llvm_mips_srlr_b_ARG2
640   %2 = tail call <16 x i8> @llvm.mips.srlr.b(<16 x i8> %0, <16 x i8> %1)
641   store <16 x i8> %2, <16 x i8>* @llvm_mips_srlr_b_RES
642   ret void
643 }
644
645 declare <16 x i8> @llvm.mips.srlr.b(<16 x i8>, <16 x i8>) nounwind
646
647 ; CHECK: llvm_mips_srlr_b_test:
648 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG1)
649 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG2)
650 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
651 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
652 ; CHECK-DAG: srlr.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
653 ; CHECK-DAG: st.b [[WD]]
654 ; CHECK: .size llvm_mips_srlr_b_test
655 ;
656 @llvm_mips_srlr_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
657 @llvm_mips_srlr_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
658 @llvm_mips_srlr_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
659
660 define void @llvm_mips_srlr_h_test() nounwind {
661 entry:
662   %0 = load <8 x i16>* @llvm_mips_srlr_h_ARG1
663   %1 = load <8 x i16>* @llvm_mips_srlr_h_ARG2
664   %2 = tail call <8 x i16> @llvm.mips.srlr.h(<8 x i16> %0, <8 x i16> %1)
665   store <8 x i16> %2, <8 x i16>* @llvm_mips_srlr_h_RES
666   ret void
667 }
668
669 declare <8 x i16> @llvm.mips.srlr.h(<8 x i16>, <8 x i16>) nounwind
670
671 ; CHECK: llvm_mips_srlr_h_test:
672 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG1)
673 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG2)
674 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
675 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
676 ; CHECK-DAG: srlr.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
677 ; CHECK-DAG: st.h [[WD]]
678 ; CHECK: .size llvm_mips_srlr_h_test
679 ;
680 @llvm_mips_srlr_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
681 @llvm_mips_srlr_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
682 @llvm_mips_srlr_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
683
684 define void @llvm_mips_srlr_w_test() nounwind {
685 entry:
686   %0 = load <4 x i32>* @llvm_mips_srlr_w_ARG1
687   %1 = load <4 x i32>* @llvm_mips_srlr_w_ARG2
688   %2 = tail call <4 x i32> @llvm.mips.srlr.w(<4 x i32> %0, <4 x i32> %1)
689   store <4 x i32> %2, <4 x i32>* @llvm_mips_srlr_w_RES
690   ret void
691 }
692
693 declare <4 x i32> @llvm.mips.srlr.w(<4 x i32>, <4 x i32>) nounwind
694
695 ; CHECK: llvm_mips_srlr_w_test:
696 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG1)
697 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG2)
698 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
699 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
700 ; CHECK-DAG: srlr.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
701 ; CHECK-DAG: st.w [[WD]]
702 ; CHECK: .size llvm_mips_srlr_w_test
703 ;
704 @llvm_mips_srlr_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
705 @llvm_mips_srlr_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
706 @llvm_mips_srlr_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
707
708 define void @llvm_mips_srlr_d_test() nounwind {
709 entry:
710   %0 = load <2 x i64>* @llvm_mips_srlr_d_ARG1
711   %1 = load <2 x i64>* @llvm_mips_srlr_d_ARG2
712   %2 = tail call <2 x i64> @llvm.mips.srlr.d(<2 x i64> %0, <2 x i64> %1)
713   store <2 x i64> %2, <2 x i64>* @llvm_mips_srlr_d_RES
714   ret void
715 }
716
717 declare <2 x i64> @llvm.mips.srlr.d(<2 x i64>, <2 x i64>) nounwind
718
719 ; CHECK: llvm_mips_srlr_d_test:
720 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG1)
721 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG2)
722 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
723 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
724 ; CHECK-DAG: srlr.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
725 ; CHECK-DAG: st.d [[WD]]
726 ; CHECK: .size llvm_mips_srlr_d_test
727 ;
728
729 define void @srl_b_test() nounwind {
730 entry:
731   %0 = load <16 x i8>* @llvm_mips_srl_b_ARG1
732   %1 = load <16 x i8>* @llvm_mips_srl_b_ARG2
733   %2 = lshr <16 x i8> %0, %1
734   store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES
735   ret void
736 }
737
738 ; CHECK: srl_b_test:
739 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1)
740 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2)
741 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
742 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
743 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
744 ; CHECK-DAG: st.b [[WD]]
745 ; CHECK: .size srl_b_test
746
747 define void @srl_h_test() nounwind {
748 entry:
749   %0 = load <8 x i16>* @llvm_mips_srl_h_ARG1
750   %1 = load <8 x i16>* @llvm_mips_srl_h_ARG2
751   %2 = lshr <8 x i16> %0, %1
752   store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES
753   ret void
754 }
755
756 ; CHECK: srl_h_test:
757 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1)
758 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2)
759 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
760 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
761 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
762 ; CHECK-DAG: st.h [[WD]]
763 ; CHECK: .size srl_h_test
764
765 define void @srl_w_test() nounwind {
766 entry:
767   %0 = load <4 x i32>* @llvm_mips_srl_w_ARG1
768   %1 = load <4 x i32>* @llvm_mips_srl_w_ARG2
769   %2 = lshr <4 x i32> %0, %1
770   store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES
771   ret void
772 }
773
774 ; CHECK: srl_w_test:
775 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1)
776 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2)
777 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
778 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
779 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
780 ; CHECK-DAG: st.w [[WD]]
781 ; CHECK: .size srl_w_test
782
783 define void @srl_d_test() nounwind {
784 entry:
785   %0 = load <2 x i64>* @llvm_mips_srl_d_ARG1
786   %1 = load <2 x i64>* @llvm_mips_srl_d_ARG2
787   %2 = lshr <2 x i64> %0, %1
788   store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES
789   ret void
790 }
791
792 ; CHECK: srl_d_test:
793 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1)
794 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2)
795 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
796 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
797 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
798 ; CHECK-DAG: st.d [[WD]]
799 ; CHECK: .size srl_d_test
800
801 @llvm_mips_subs_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
802 @llvm_mips_subs_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
803 @llvm_mips_subs_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
804
805 define void @llvm_mips_subs_s_b_test() nounwind {
806 entry:
807   %0 = load <16 x i8>* @llvm_mips_subs_s_b_ARG1
808   %1 = load <16 x i8>* @llvm_mips_subs_s_b_ARG2
809   %2 = tail call <16 x i8> @llvm.mips.subs.s.b(<16 x i8> %0, <16 x i8> %1)
810   store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_s_b_RES
811   ret void
812 }
813
814 declare <16 x i8> @llvm.mips.subs.s.b(<16 x i8>, <16 x i8>) nounwind
815
816 ; CHECK: llvm_mips_subs_s_b_test:
817 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG1)
818 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG2)
819 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
820 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
821 ; CHECK-DAG: subs_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
822 ; CHECK-DAG: st.b [[WD]]
823 ; CHECK: .size llvm_mips_subs_s_b_test
824 ;
825 @llvm_mips_subs_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
826 @llvm_mips_subs_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
827 @llvm_mips_subs_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
828
829 define void @llvm_mips_subs_s_h_test() nounwind {
830 entry:
831   %0 = load <8 x i16>* @llvm_mips_subs_s_h_ARG1
832   %1 = load <8 x i16>* @llvm_mips_subs_s_h_ARG2
833   %2 = tail call <8 x i16> @llvm.mips.subs.s.h(<8 x i16> %0, <8 x i16> %1)
834   store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_s_h_RES
835   ret void
836 }
837
838 declare <8 x i16> @llvm.mips.subs.s.h(<8 x i16>, <8 x i16>) nounwind
839
840 ; CHECK: llvm_mips_subs_s_h_test:
841 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG1)
842 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG2)
843 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
844 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
845 ; CHECK-DAG: subs_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
846 ; CHECK-DAG: st.h [[WD]]
847 ; CHECK: .size llvm_mips_subs_s_h_test
848 ;
849 @llvm_mips_subs_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
850 @llvm_mips_subs_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
851 @llvm_mips_subs_s_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
852
853 define void @llvm_mips_subs_s_w_test() nounwind {
854 entry:
855   %0 = load <4 x i32>* @llvm_mips_subs_s_w_ARG1
856   %1 = load <4 x i32>* @llvm_mips_subs_s_w_ARG2
857   %2 = tail call <4 x i32> @llvm.mips.subs.s.w(<4 x i32> %0, <4 x i32> %1)
858   store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_s_w_RES
859   ret void
860 }
861
862 declare <4 x i32> @llvm.mips.subs.s.w(<4 x i32>, <4 x i32>) nounwind
863
864 ; CHECK: llvm_mips_subs_s_w_test:
865 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG1)
866 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG2)
867 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
868 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
869 ; CHECK-DAG: subs_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
870 ; CHECK-DAG: st.w [[WD]]
871 ; CHECK: .size llvm_mips_subs_s_w_test
872 ;
873 @llvm_mips_subs_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
874 @llvm_mips_subs_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
875 @llvm_mips_subs_s_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
876
877 define void @llvm_mips_subs_s_d_test() nounwind {
878 entry:
879   %0 = load <2 x i64>* @llvm_mips_subs_s_d_ARG1
880   %1 = load <2 x i64>* @llvm_mips_subs_s_d_ARG2
881   %2 = tail call <2 x i64> @llvm.mips.subs.s.d(<2 x i64> %0, <2 x i64> %1)
882   store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_s_d_RES
883   ret void
884 }
885
886 declare <2 x i64> @llvm.mips.subs.s.d(<2 x i64>, <2 x i64>) nounwind
887
888 ; CHECK: llvm_mips_subs_s_d_test:
889 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG1)
890 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG2)
891 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
892 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
893 ; CHECK-DAG: subs_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
894 ; CHECK-DAG: st.d [[WD]]
895 ; CHECK: .size llvm_mips_subs_s_d_test
896 ;
897 @llvm_mips_subs_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
898 @llvm_mips_subs_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
899 @llvm_mips_subs_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
900
901 define void @llvm_mips_subs_u_b_test() nounwind {
902 entry:
903   %0 = load <16 x i8>* @llvm_mips_subs_u_b_ARG1
904   %1 = load <16 x i8>* @llvm_mips_subs_u_b_ARG2
905   %2 = tail call <16 x i8> @llvm.mips.subs.u.b(<16 x i8> %0, <16 x i8> %1)
906   store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_u_b_RES
907   ret void
908 }
909
910 declare <16 x i8> @llvm.mips.subs.u.b(<16 x i8>, <16 x i8>) nounwind
911
912 ; CHECK: llvm_mips_subs_u_b_test:
913 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG1)
914 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG2)
915 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
916 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
917 ; CHECK-DAG: subs_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
918 ; CHECK-DAG: st.b [[WD]]
919 ; CHECK: .size llvm_mips_subs_u_b_test
920 ;
921 @llvm_mips_subs_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
922 @llvm_mips_subs_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
923 @llvm_mips_subs_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
924
925 define void @llvm_mips_subs_u_h_test() nounwind {
926 entry:
927   %0 = load <8 x i16>* @llvm_mips_subs_u_h_ARG1
928   %1 = load <8 x i16>* @llvm_mips_subs_u_h_ARG2
929   %2 = tail call <8 x i16> @llvm.mips.subs.u.h(<8 x i16> %0, <8 x i16> %1)
930   store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_u_h_RES
931   ret void
932 }
933
934 declare <8 x i16> @llvm.mips.subs.u.h(<8 x i16>, <8 x i16>) nounwind
935
936 ; CHECK: llvm_mips_subs_u_h_test:
937 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG1)
938 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG2)
939 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
940 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
941 ; CHECK-DAG: subs_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
942 ; CHECK-DAG: st.h [[WD]]
943 ; CHECK: .size llvm_mips_subs_u_h_test
944 ;
945 @llvm_mips_subs_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
946 @llvm_mips_subs_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
947 @llvm_mips_subs_u_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
948
949 define void @llvm_mips_subs_u_w_test() nounwind {
950 entry:
951   %0 = load <4 x i32>* @llvm_mips_subs_u_w_ARG1
952   %1 = load <4 x i32>* @llvm_mips_subs_u_w_ARG2
953   %2 = tail call <4 x i32> @llvm.mips.subs.u.w(<4 x i32> %0, <4 x i32> %1)
954   store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_u_w_RES
955   ret void
956 }
957
958 declare <4 x i32> @llvm.mips.subs.u.w(<4 x i32>, <4 x i32>) nounwind
959
960 ; CHECK: llvm_mips_subs_u_w_test:
961 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG1)
962 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG2)
963 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
964 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
965 ; CHECK-DAG: subs_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
966 ; CHECK-DAG: st.w [[WD]]
967 ; CHECK: .size llvm_mips_subs_u_w_test
968 ;
969 @llvm_mips_subs_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
970 @llvm_mips_subs_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
971 @llvm_mips_subs_u_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
972
973 define void @llvm_mips_subs_u_d_test() nounwind {
974 entry:
975   %0 = load <2 x i64>* @llvm_mips_subs_u_d_ARG1
976   %1 = load <2 x i64>* @llvm_mips_subs_u_d_ARG2
977   %2 = tail call <2 x i64> @llvm.mips.subs.u.d(<2 x i64> %0, <2 x i64> %1)
978   store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_u_d_RES
979   ret void
980 }
981
982 declare <2 x i64> @llvm.mips.subs.u.d(<2 x i64>, <2 x i64>) nounwind
983
984 ; CHECK: llvm_mips_subs_u_d_test:
985 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG1)
986 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG2)
987 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
988 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
989 ; CHECK-DAG: subs_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
990 ; CHECK-DAG: st.d [[WD]]
991 ; CHECK: .size llvm_mips_subs_u_d_test
992 ;
993 @llvm_mips_subsus_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
994 @llvm_mips_subsus_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
995 @llvm_mips_subsus_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
996
997 define void @llvm_mips_subsus_u_b_test() nounwind {
998 entry:
999   %0 = load <16 x i8>* @llvm_mips_subsus_u_b_ARG1
1000   %1 = load <16 x i8>* @llvm_mips_subsus_u_b_ARG2
1001   %2 = tail call <16 x i8> @llvm.mips.subsus.u.b(<16 x i8> %0, <16 x i8> %1)
1002   store <16 x i8> %2, <16 x i8>* @llvm_mips_subsus_u_b_RES
1003   ret void
1004 }
1005
1006 declare <16 x i8> @llvm.mips.subsus.u.b(<16 x i8>, <16 x i8>) nounwind
1007
1008 ; CHECK: llvm_mips_subsus_u_b_test:
1009 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG1)
1010 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG2)
1011 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1012 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1013 ; CHECK-DAG: subsus_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1014 ; CHECK-DAG: st.b [[WD]]
1015 ; CHECK: .size llvm_mips_subsus_u_b_test
1016 ;
1017 @llvm_mips_subsus_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
1018 @llvm_mips_subsus_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
1019 @llvm_mips_subsus_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
1020
1021 define void @llvm_mips_subsus_u_h_test() nounwind {
1022 entry:
1023   %0 = load <8 x i16>* @llvm_mips_subsus_u_h_ARG1
1024   %1 = load <8 x i16>* @llvm_mips_subsus_u_h_ARG2
1025   %2 = tail call <8 x i16> @llvm.mips.subsus.u.h(<8 x i16> %0, <8 x i16> %1)
1026   store <8 x i16> %2, <8 x i16>* @llvm_mips_subsus_u_h_RES
1027   ret void
1028 }
1029
1030 declare <8 x i16> @llvm.mips.subsus.u.h(<8 x i16>, <8 x i16>) nounwind
1031
1032 ; CHECK: llvm_mips_subsus_u_h_test:
1033 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG1)
1034 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG2)
1035 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1036 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1037 ; CHECK-DAG: subsus_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1038 ; CHECK-DAG: st.h [[WD]]
1039 ; CHECK: .size llvm_mips_subsus_u_h_test
1040 ;
1041 @llvm_mips_subsus_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1042 @llvm_mips_subsus_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1043 @llvm_mips_subsus_u_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1044
1045 define void @llvm_mips_subsus_u_w_test() nounwind {
1046 entry:
1047   %0 = load <4 x i32>* @llvm_mips_subsus_u_w_ARG1
1048   %1 = load <4 x i32>* @llvm_mips_subsus_u_w_ARG2
1049   %2 = tail call <4 x i32> @llvm.mips.subsus.u.w(<4 x i32> %0, <4 x i32> %1)
1050   store <4 x i32> %2, <4 x i32>* @llvm_mips_subsus_u_w_RES
1051   ret void
1052 }
1053
1054 declare <4 x i32> @llvm.mips.subsus.u.w(<4 x i32>, <4 x i32>) nounwind
1055
1056 ; CHECK: llvm_mips_subsus_u_w_test:
1057 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG1)
1058 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG2)
1059 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1060 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1061 ; CHECK-DAG: subsus_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1062 ; CHECK-DAG: st.w [[WD]]
1063 ; CHECK: .size llvm_mips_subsus_u_w_test
1064 ;
1065 @llvm_mips_subsus_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1066 @llvm_mips_subsus_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1067 @llvm_mips_subsus_u_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
1068
1069 define void @llvm_mips_subsus_u_d_test() nounwind {
1070 entry:
1071   %0 = load <2 x i64>* @llvm_mips_subsus_u_d_ARG1
1072   %1 = load <2 x i64>* @llvm_mips_subsus_u_d_ARG2
1073   %2 = tail call <2 x i64> @llvm.mips.subsus.u.d(<2 x i64> %0, <2 x i64> %1)
1074   store <2 x i64> %2, <2 x i64>* @llvm_mips_subsus_u_d_RES
1075   ret void
1076 }
1077
1078 declare <2 x i64> @llvm.mips.subsus.u.d(<2 x i64>, <2 x i64>) nounwind
1079
1080 ; CHECK: llvm_mips_subsus_u_d_test:
1081 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG1)
1082 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG2)
1083 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1084 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1085 ; CHECK-DAG: subsus_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1086 ; CHECK-DAG: st.d [[WD]]
1087 ; CHECK: .size llvm_mips_subsus_u_d_test
1088 ;
1089 @llvm_mips_subsuu_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
1090 @llvm_mips_subsuu_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
1091 @llvm_mips_subsuu_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
1092
1093 define void @llvm_mips_subsuu_s_b_test() nounwind {
1094 entry:
1095   %0 = load <16 x i8>* @llvm_mips_subsuu_s_b_ARG1
1096   %1 = load <16 x i8>* @llvm_mips_subsuu_s_b_ARG2
1097   %2 = tail call <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8> %0, <16 x i8> %1)
1098   store <16 x i8> %2, <16 x i8>* @llvm_mips_subsuu_s_b_RES
1099   ret void
1100 }
1101
1102 declare <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8>, <16 x i8>) nounwind
1103
1104 ; CHECK: llvm_mips_subsuu_s_b_test:
1105 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG1)
1106 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG2)
1107 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1108 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1109 ; CHECK-DAG: subsuu_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1110 ; CHECK-DAG: st.b [[WD]]
1111 ; CHECK: .size llvm_mips_subsuu_s_b_test
1112 ;
1113 @llvm_mips_subsuu_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
1114 @llvm_mips_subsuu_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
1115 @llvm_mips_subsuu_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
1116
1117 define void @llvm_mips_subsuu_s_h_test() nounwind {
1118 entry:
1119   %0 = load <8 x i16>* @llvm_mips_subsuu_s_h_ARG1
1120   %1 = load <8 x i16>* @llvm_mips_subsuu_s_h_ARG2
1121   %2 = tail call <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16> %0, <8 x i16> %1)
1122   store <8 x i16> %2, <8 x i16>* @llvm_mips_subsuu_s_h_RES
1123   ret void
1124 }
1125
1126 declare <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16>, <8 x i16>) nounwind
1127
1128 ; CHECK: llvm_mips_subsuu_s_h_test:
1129 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG1)
1130 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG2)
1131 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1132 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1133 ; CHECK-DAG: subsuu_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1134 ; CHECK-DAG: st.h [[WD]]
1135 ; CHECK: .size llvm_mips_subsuu_s_h_test
1136 ;
1137 @llvm_mips_subsuu_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1138 @llvm_mips_subsuu_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1139 @llvm_mips_subsuu_s_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1140
1141 define void @llvm_mips_subsuu_s_w_test() nounwind {
1142 entry:
1143   %0 = load <4 x i32>* @llvm_mips_subsuu_s_w_ARG1
1144   %1 = load <4 x i32>* @llvm_mips_subsuu_s_w_ARG2
1145   %2 = tail call <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32> %0, <4 x i32> %1)
1146   store <4 x i32> %2, <4 x i32>* @llvm_mips_subsuu_s_w_RES
1147   ret void
1148 }
1149
1150 declare <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32>, <4 x i32>) nounwind
1151
1152 ; CHECK: llvm_mips_subsuu_s_w_test:
1153 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG1)
1154 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG2)
1155 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1156 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1157 ; CHECK-DAG: subsuu_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1158 ; CHECK-DAG: st.w [[WD]]
1159 ; CHECK: .size llvm_mips_subsuu_s_w_test
1160 ;
1161 @llvm_mips_subsuu_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1162 @llvm_mips_subsuu_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1163 @llvm_mips_subsuu_s_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
1164
1165 define void @llvm_mips_subsuu_s_d_test() nounwind {
1166 entry:
1167   %0 = load <2 x i64>* @llvm_mips_subsuu_s_d_ARG1
1168   %1 = load <2 x i64>* @llvm_mips_subsuu_s_d_ARG2
1169   %2 = tail call <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64> %0, <2 x i64> %1)
1170   store <2 x i64> %2, <2 x i64>* @llvm_mips_subsuu_s_d_RES
1171   ret void
1172 }
1173
1174 declare <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64>, <2 x i64>) nounwind
1175
1176 ; CHECK: llvm_mips_subsuu_s_d_test:
1177 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG1)
1178 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG2)
1179 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1180 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1181 ; CHECK-DAG: subsuu_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1182 ; CHECK-DAG: st.d [[WD]]
1183 ; CHECK: .size llvm_mips_subsuu_s_d_test
1184 ;
1185 @llvm_mips_subv_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
1186 @llvm_mips_subv_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
1187 @llvm_mips_subv_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
1188
1189 define void @llvm_mips_subv_b_test() nounwind {
1190 entry:
1191   %0 = load <16 x i8>* @llvm_mips_subv_b_ARG1
1192   %1 = load <16 x i8>* @llvm_mips_subv_b_ARG2
1193   %2 = tail call <16 x i8> @llvm.mips.subv.b(<16 x i8> %0, <16 x i8> %1)
1194   store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES
1195   ret void
1196 }
1197
1198 declare <16 x i8> @llvm.mips.subv.b(<16 x i8>, <16 x i8>) nounwind
1199
1200 ; CHECK: llvm_mips_subv_b_test:
1201 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1)
1202 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2)
1203 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1204 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1205 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1206 ; CHECK-DAG: st.b [[WD]]
1207 ; CHECK: .size llvm_mips_subv_b_test
1208 ;
1209 @llvm_mips_subv_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1210 @llvm_mips_subv_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1211 @llvm_mips_subv_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1212
1213 define void @llvm_mips_subv_h_test() nounwind {
1214 entry:
1215   %0 = load <8 x i16>* @llvm_mips_subv_h_ARG1
1216   %1 = load <8 x i16>* @llvm_mips_subv_h_ARG2
1217   %2 = tail call <8 x i16> @llvm.mips.subv.h(<8 x i16> %0, <8 x i16> %1)
1218   store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES
1219   ret void
1220 }
1221
1222 declare <8 x i16> @llvm.mips.subv.h(<8 x i16>, <8 x i16>) nounwind
1223
1224 ; CHECK: llvm_mips_subv_h_test:
1225 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1)
1226 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2)
1227 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1228 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1229 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1230 ; CHECK-DAG: st.h [[WD]]
1231 ; CHECK: .size llvm_mips_subv_h_test
1232 ;
1233 @llvm_mips_subv_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1234 @llvm_mips_subv_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1235 @llvm_mips_subv_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1236
1237 define void @llvm_mips_subv_w_test() nounwind {
1238 entry:
1239   %0 = load <4 x i32>* @llvm_mips_subv_w_ARG1
1240   %1 = load <4 x i32>* @llvm_mips_subv_w_ARG2
1241   %2 = tail call <4 x i32> @llvm.mips.subv.w(<4 x i32> %0, <4 x i32> %1)
1242   store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES
1243   ret void
1244 }
1245
1246 declare <4 x i32> @llvm.mips.subv.w(<4 x i32>, <4 x i32>) nounwind
1247
1248 ; CHECK: llvm_mips_subv_w_test:
1249 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1)
1250 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2)
1251 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1252 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1253 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1254 ; CHECK-DAG: st.w [[WD]]
1255 ; CHECK: .size llvm_mips_subv_w_test
1256 ;
1257 @llvm_mips_subv_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1258 @llvm_mips_subv_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1259 @llvm_mips_subv_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
1260
1261 define void @llvm_mips_subv_d_test() nounwind {
1262 entry:
1263   %0 = load <2 x i64>* @llvm_mips_subv_d_ARG1
1264   %1 = load <2 x i64>* @llvm_mips_subv_d_ARG2
1265   %2 = tail call <2 x i64> @llvm.mips.subv.d(<2 x i64> %0, <2 x i64> %1)
1266   store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES
1267   ret void
1268 }
1269
1270 declare <2 x i64> @llvm.mips.subv.d(<2 x i64>, <2 x i64>) nounwind
1271
1272 ; CHECK: llvm_mips_subv_d_test:
1273 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1)
1274 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2)
1275 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1276 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1277 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1278 ; CHECK-DAG: st.d [[WD]]
1279 ; CHECK: .size llvm_mips_subv_d_test
1280 ;
1281
1282 define void @subv_b_test() nounwind {
1283 entry:
1284   %0 = load <16 x i8>* @llvm_mips_subv_b_ARG1
1285   %1 = load <16 x i8>* @llvm_mips_subv_b_ARG2
1286   %2 = sub <16 x i8> %0, %1
1287   store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES
1288   ret void
1289 }
1290
1291 ; CHECK: subv_b_test:
1292 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1)
1293 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2)
1294 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1295 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1296 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1297 ; CHECK-DAG: st.b [[WD]]
1298 ; CHECK: .size subv_b_test
1299
1300 define void @subv_h_test() nounwind {
1301 entry:
1302   %0 = load <8 x i16>* @llvm_mips_subv_h_ARG1
1303   %1 = load <8 x i16>* @llvm_mips_subv_h_ARG2
1304   %2 = sub <8 x i16> %0, %1
1305   store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES
1306   ret void
1307 }
1308
1309 ; CHECK: subv_h_test:
1310 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1)
1311 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2)
1312 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1313 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1314 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1315 ; CHECK-DAG: st.h [[WD]]
1316 ; CHECK: .size subv_h_test
1317
1318 define void @subv_w_test() nounwind {
1319 entry:
1320   %0 = load <4 x i32>* @llvm_mips_subv_w_ARG1
1321   %1 = load <4 x i32>* @llvm_mips_subv_w_ARG2
1322   %2 = sub <4 x i32> %0, %1
1323   store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES
1324   ret void
1325 }
1326
1327 ; CHECK: subv_w_test:
1328 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1)
1329 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2)
1330 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1331 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1332 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1333 ; CHECK-DAG: st.w [[WD]]
1334 ; CHECK: .size subv_w_test
1335
1336 define void @subv_d_test() nounwind {
1337 entry:
1338   %0 = load <2 x i64>* @llvm_mips_subv_d_ARG1
1339   %1 = load <2 x i64>* @llvm_mips_subv_d_ARG2
1340   %2 = sub <2 x i64> %0, %1
1341   store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES
1342   ret void
1343 }
1344
1345 ; CHECK: subv_d_test:
1346 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1)
1347 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2)
1348 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1349 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1350 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1351 ; CHECK-DAG: st.d [[WD]]
1352 ; CHECK: .size subv_d_test
1353 ;