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