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