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 < %s | FileCheck %s
5 ; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %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 i32 10, align 16
9 @llvm_mips_sld_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
11 define void @llvm_mips_sld_b_test() nounwind {
13 %0 = load <16 x i8>* @llvm_mips_sld_b_ARG1
14 %1 = load i32* @llvm_mips_sld_b_ARG2
15 %2 = tail call <16 x i8> @llvm.mips.sld.b(<16 x i8> %0, i32 %1)
16 store <16 x i8> %2, <16 x i8>* @llvm_mips_sld_b_RES
20 declare <16 x i8> @llvm.mips.sld.b(<16 x i8>, i32) nounwind
22 ; CHECK: llvm_mips_sld_b_test:
23 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_b_ARG1)
24 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_b_ARG2)
25 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
26 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
27 ; CHECK-DAG: sld.b [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
28 ; CHECK-DAG: st.b [[WD]]
29 ; CHECK: .size llvm_mips_sld_b_test
31 @llvm_mips_sld_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
32 @llvm_mips_sld_h_ARG2 = global i32 10, align 16
33 @llvm_mips_sld_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
35 define void @llvm_mips_sld_h_test() nounwind {
37 %0 = load <8 x i16>* @llvm_mips_sld_h_ARG1
38 %1 = load i32* @llvm_mips_sld_h_ARG2
39 %2 = tail call <8 x i16> @llvm.mips.sld.h(<8 x i16> %0, i32 %1)
40 store <8 x i16> %2, <8 x i16>* @llvm_mips_sld_h_RES
44 declare <8 x i16> @llvm.mips.sld.h(<8 x i16>, i32) nounwind
46 ; CHECK: llvm_mips_sld_h_test:
47 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_h_ARG1)
48 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_h_ARG2)
49 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
50 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
51 ; CHECK-DAG: sld.h [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
52 ; CHECK-DAG: st.h [[WD]]
53 ; CHECK: .size llvm_mips_sld_h_test
55 @llvm_mips_sld_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
56 @llvm_mips_sld_w_ARG2 = global i32 10, align 16
57 @llvm_mips_sld_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
59 define void @llvm_mips_sld_w_test() nounwind {
61 %0 = load <4 x i32>* @llvm_mips_sld_w_ARG1
62 %1 = load i32* @llvm_mips_sld_w_ARG2
63 %2 = tail call <4 x i32> @llvm.mips.sld.w(<4 x i32> %0, i32 %1)
64 store <4 x i32> %2, <4 x i32>* @llvm_mips_sld_w_RES
68 declare <4 x i32> @llvm.mips.sld.w(<4 x i32>, i32) nounwind
70 ; CHECK: llvm_mips_sld_w_test:
71 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_w_ARG1)
72 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_w_ARG2)
73 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
74 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
75 ; CHECK-DAG: sld.w [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
76 ; CHECK-DAG: st.w [[WD]]
77 ; CHECK: .size llvm_mips_sld_w_test
79 @llvm_mips_sld_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
80 @llvm_mips_sld_d_ARG2 = global i32 10, align 16
81 @llvm_mips_sld_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
83 define void @llvm_mips_sld_d_test() nounwind {
85 %0 = load <2 x i64>* @llvm_mips_sld_d_ARG1
86 %1 = load i32* @llvm_mips_sld_d_ARG2
87 %2 = tail call <2 x i64> @llvm.mips.sld.d(<2 x i64> %0, i32 %1)
88 store <2 x i64> %2, <2 x i64>* @llvm_mips_sld_d_RES
92 declare <2 x i64> @llvm.mips.sld.d(<2 x i64>, i32) nounwind
94 ; CHECK: llvm_mips_sld_d_test:
95 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_d_ARG1)
96 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_d_ARG2)
97 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
98 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
99 ; CHECK-DAG: sld.d [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
100 ; CHECK-DAG: st.d [[WD]]
101 ; CHECK: .size llvm_mips_sld_d_test
103 @llvm_mips_sll_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
104 @llvm_mips_sll_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
105 @llvm_mips_sll_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
107 define void @llvm_mips_sll_b_test() nounwind {
109 %0 = load <16 x i8>* @llvm_mips_sll_b_ARG1
110 %1 = load <16 x i8>* @llvm_mips_sll_b_ARG2
111 %2 = tail call <16 x i8> @llvm.mips.sll.b(<16 x i8> %0, <16 x i8> %1)
112 store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES
116 declare <16 x i8> @llvm.mips.sll.b(<16 x i8>, <16 x i8>) nounwind
118 ; CHECK: llvm_mips_sll_b_test:
119 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1)
120 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2)
121 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
122 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
123 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
124 ; CHECK-DAG: st.b [[WD]]
125 ; CHECK: .size llvm_mips_sll_b_test
127 @llvm_mips_sll_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
128 @llvm_mips_sll_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
129 @llvm_mips_sll_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
131 define void @llvm_mips_sll_h_test() nounwind {
133 %0 = load <8 x i16>* @llvm_mips_sll_h_ARG1
134 %1 = load <8 x i16>* @llvm_mips_sll_h_ARG2
135 %2 = tail call <8 x i16> @llvm.mips.sll.h(<8 x i16> %0, <8 x i16> %1)
136 store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES
140 declare <8 x i16> @llvm.mips.sll.h(<8 x i16>, <8 x i16>) nounwind
142 ; CHECK: llvm_mips_sll_h_test:
143 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1)
144 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2)
145 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
146 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
147 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
148 ; CHECK-DAG: st.h [[WD]]
149 ; CHECK: .size llvm_mips_sll_h_test
151 @llvm_mips_sll_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
152 @llvm_mips_sll_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
153 @llvm_mips_sll_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
155 define void @llvm_mips_sll_w_test() nounwind {
157 %0 = load <4 x i32>* @llvm_mips_sll_w_ARG1
158 %1 = load <4 x i32>* @llvm_mips_sll_w_ARG2
159 %2 = tail call <4 x i32> @llvm.mips.sll.w(<4 x i32> %0, <4 x i32> %1)
160 store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES
164 declare <4 x i32> @llvm.mips.sll.w(<4 x i32>, <4 x i32>) nounwind
166 ; CHECK: llvm_mips_sll_w_test:
167 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1)
168 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2)
169 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
170 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
171 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
172 ; CHECK-DAG: st.w [[WD]]
173 ; CHECK: .size llvm_mips_sll_w_test
175 @llvm_mips_sll_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
176 @llvm_mips_sll_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
177 @llvm_mips_sll_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
179 define void @llvm_mips_sll_d_test() nounwind {
181 %0 = load <2 x i64>* @llvm_mips_sll_d_ARG1
182 %1 = load <2 x i64>* @llvm_mips_sll_d_ARG2
183 %2 = tail call <2 x i64> @llvm.mips.sll.d(<2 x i64> %0, <2 x i64> %1)
184 store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES
188 declare <2 x i64> @llvm.mips.sll.d(<2 x i64>, <2 x i64>) nounwind
190 ; CHECK: llvm_mips_sll_d_test:
191 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1)
192 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2)
193 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
194 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
195 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
196 ; CHECK-DAG: st.d [[WD]]
197 ; CHECK: .size llvm_mips_sll_d_test
199 define void @sll_b_test() nounwind {
201 %0 = load <16 x i8>* @llvm_mips_sll_b_ARG1
202 %1 = load <16 x i8>* @llvm_mips_sll_b_ARG2
203 %2 = shl <16 x i8> %0, %1
204 store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES
209 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1)
210 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2)
211 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
212 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
213 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
214 ; CHECK-DAG: st.b [[WD]]
215 ; CHECK: .size sll_b_test
217 define void @sll_h_test() nounwind {
219 %0 = load <8 x i16>* @llvm_mips_sll_h_ARG1
220 %1 = load <8 x i16>* @llvm_mips_sll_h_ARG2
221 %2 = shl <8 x i16> %0, %1
222 store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES
227 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1)
228 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2)
229 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
230 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
231 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
232 ; CHECK-DAG: st.h [[WD]]
233 ; CHECK: .size sll_h_test
235 define void @sll_w_test() nounwind {
237 %0 = load <4 x i32>* @llvm_mips_sll_w_ARG1
238 %1 = load <4 x i32>* @llvm_mips_sll_w_ARG2
239 %2 = shl <4 x i32> %0, %1
240 store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES
245 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1)
246 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2)
247 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
248 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
249 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
250 ; CHECK-DAG: st.w [[WD]]
251 ; CHECK: .size sll_w_test
253 define void @sll_d_test() nounwind {
255 %0 = load <2 x i64>* @llvm_mips_sll_d_ARG1
256 %1 = load <2 x i64>* @llvm_mips_sll_d_ARG2
257 %2 = shl <2 x i64> %0, %1
258 store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES
263 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1)
264 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2)
265 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
266 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
267 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
268 ; CHECK-DAG: st.d [[WD]]
269 ; CHECK: .size sll_d_test
271 @llvm_mips_sra_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
272 @llvm_mips_sra_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
273 @llvm_mips_sra_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
275 define void @llvm_mips_sra_b_test() nounwind {
277 %0 = load <16 x i8>* @llvm_mips_sra_b_ARG1
278 %1 = load <16 x i8>* @llvm_mips_sra_b_ARG2
279 %2 = tail call <16 x i8> @llvm.mips.sra.b(<16 x i8> %0, <16 x i8> %1)
280 store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES
284 declare <16 x i8> @llvm.mips.sra.b(<16 x i8>, <16 x i8>) nounwind
286 ; CHECK: llvm_mips_sra_b_test:
287 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1)
288 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2)
289 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
290 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
291 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
292 ; CHECK-DAG: st.b [[WD]]
293 ; CHECK: .size llvm_mips_sra_b_test
295 @llvm_mips_sra_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
296 @llvm_mips_sra_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
297 @llvm_mips_sra_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
299 define void @llvm_mips_sra_h_test() nounwind {
301 %0 = load <8 x i16>* @llvm_mips_sra_h_ARG1
302 %1 = load <8 x i16>* @llvm_mips_sra_h_ARG2
303 %2 = tail call <8 x i16> @llvm.mips.sra.h(<8 x i16> %0, <8 x i16> %1)
304 store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES
308 declare <8 x i16> @llvm.mips.sra.h(<8 x i16>, <8 x i16>) nounwind
310 ; CHECK: llvm_mips_sra_h_test:
311 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1)
312 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2)
313 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
314 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
315 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
316 ; CHECK-DAG: st.h [[WD]]
317 ; CHECK: .size llvm_mips_sra_h_test
319 @llvm_mips_sra_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
320 @llvm_mips_sra_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
321 @llvm_mips_sra_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
323 define void @llvm_mips_sra_w_test() nounwind {
325 %0 = load <4 x i32>* @llvm_mips_sra_w_ARG1
326 %1 = load <4 x i32>* @llvm_mips_sra_w_ARG2
327 %2 = tail call <4 x i32> @llvm.mips.sra.w(<4 x i32> %0, <4 x i32> %1)
328 store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES
332 declare <4 x i32> @llvm.mips.sra.w(<4 x i32>, <4 x i32>) nounwind
334 ; CHECK: llvm_mips_sra_w_test:
335 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1)
336 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2)
337 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
338 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
339 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
340 ; CHECK-DAG: st.w [[WD]]
341 ; CHECK: .size llvm_mips_sra_w_test
343 @llvm_mips_sra_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
344 @llvm_mips_sra_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
345 @llvm_mips_sra_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
347 define void @llvm_mips_sra_d_test() nounwind {
349 %0 = load <2 x i64>* @llvm_mips_sra_d_ARG1
350 %1 = load <2 x i64>* @llvm_mips_sra_d_ARG2
351 %2 = tail call <2 x i64> @llvm.mips.sra.d(<2 x i64> %0, <2 x i64> %1)
352 store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES
356 declare <2 x i64> @llvm.mips.sra.d(<2 x i64>, <2 x i64>) nounwind
358 ; CHECK: llvm_mips_sra_d_test:
359 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1)
360 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2)
361 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
362 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
363 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
364 ; CHECK-DAG: st.d [[WD]]
365 ; CHECK: .size llvm_mips_sra_d_test
368 define void @sra_b_test() nounwind {
370 %0 = load <16 x i8>* @llvm_mips_sra_b_ARG1
371 %1 = load <16 x i8>* @llvm_mips_sra_b_ARG2
372 %2 = ashr <16 x i8> %0, %1
373 store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES
378 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1)
379 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2)
380 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
381 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
382 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
383 ; CHECK-DAG: st.b [[WD]]
384 ; CHECK: .size sra_b_test
386 define void @sra_h_test() nounwind {
388 %0 = load <8 x i16>* @llvm_mips_sra_h_ARG1
389 %1 = load <8 x i16>* @llvm_mips_sra_h_ARG2
390 %2 = ashr <8 x i16> %0, %1
391 store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES
396 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1)
397 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2)
398 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
399 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
400 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
401 ; CHECK-DAG: st.h [[WD]]
402 ; CHECK: .size sra_h_test
404 define void @sra_w_test() nounwind {
406 %0 = load <4 x i32>* @llvm_mips_sra_w_ARG1
407 %1 = load <4 x i32>* @llvm_mips_sra_w_ARG2
408 %2 = ashr <4 x i32> %0, %1
409 store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES
414 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1)
415 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2)
416 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
417 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
418 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
419 ; CHECK-DAG: st.w [[WD]]
420 ; CHECK: .size sra_w_test
422 define void @sra_d_test() nounwind {
424 %0 = load <2 x i64>* @llvm_mips_sra_d_ARG1
425 %1 = load <2 x i64>* @llvm_mips_sra_d_ARG2
426 %2 = ashr <2 x i64> %0, %1
427 store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES
432 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1)
433 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2)
434 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
435 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
436 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
437 ; CHECK-DAG: st.d [[WD]]
438 ; CHECK: .size sra_d_test
440 @llvm_mips_srar_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
441 @llvm_mips_srar_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
442 @llvm_mips_srar_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
444 define void @llvm_mips_srar_b_test() nounwind {
446 %0 = load <16 x i8>* @llvm_mips_srar_b_ARG1
447 %1 = load <16 x i8>* @llvm_mips_srar_b_ARG2
448 %2 = tail call <16 x i8> @llvm.mips.srar.b(<16 x i8> %0, <16 x i8> %1)
449 store <16 x i8> %2, <16 x i8>* @llvm_mips_srar_b_RES
453 declare <16 x i8> @llvm.mips.srar.b(<16 x i8>, <16 x i8>) nounwind
455 ; CHECK: llvm_mips_srar_b_test:
456 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_b_ARG1)
457 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_b_ARG2)
458 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
459 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
460 ; CHECK-DAG: srar.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
461 ; CHECK-DAG: st.b [[WD]]
462 ; CHECK: .size llvm_mips_srar_b_test
464 @llvm_mips_srar_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
465 @llvm_mips_srar_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
466 @llvm_mips_srar_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
468 define void @llvm_mips_srar_h_test() nounwind {
470 %0 = load <8 x i16>* @llvm_mips_srar_h_ARG1
471 %1 = load <8 x i16>* @llvm_mips_srar_h_ARG2
472 %2 = tail call <8 x i16> @llvm.mips.srar.h(<8 x i16> %0, <8 x i16> %1)
473 store <8 x i16> %2, <8 x i16>* @llvm_mips_srar_h_RES
477 declare <8 x i16> @llvm.mips.srar.h(<8 x i16>, <8 x i16>) nounwind
479 ; CHECK: llvm_mips_srar_h_test:
480 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_h_ARG1)
481 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_h_ARG2)
482 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
483 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
484 ; CHECK-DAG: srar.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
485 ; CHECK-DAG: st.h [[WD]]
486 ; CHECK: .size llvm_mips_srar_h_test
488 @llvm_mips_srar_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
489 @llvm_mips_srar_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
490 @llvm_mips_srar_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
492 define void @llvm_mips_srar_w_test() nounwind {
494 %0 = load <4 x i32>* @llvm_mips_srar_w_ARG1
495 %1 = load <4 x i32>* @llvm_mips_srar_w_ARG2
496 %2 = tail call <4 x i32> @llvm.mips.srar.w(<4 x i32> %0, <4 x i32> %1)
497 store <4 x i32> %2, <4 x i32>* @llvm_mips_srar_w_RES
501 declare <4 x i32> @llvm.mips.srar.w(<4 x i32>, <4 x i32>) nounwind
503 ; CHECK: llvm_mips_srar_w_test:
504 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_w_ARG1)
505 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_w_ARG2)
506 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
507 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
508 ; CHECK-DAG: srar.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
509 ; CHECK-DAG: st.w [[WD]]
510 ; CHECK: .size llvm_mips_srar_w_test
512 @llvm_mips_srar_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
513 @llvm_mips_srar_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
514 @llvm_mips_srar_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
516 define void @llvm_mips_srar_d_test() nounwind {
518 %0 = load <2 x i64>* @llvm_mips_srar_d_ARG1
519 %1 = load <2 x i64>* @llvm_mips_srar_d_ARG2
520 %2 = tail call <2 x i64> @llvm.mips.srar.d(<2 x i64> %0, <2 x i64> %1)
521 store <2 x i64> %2, <2 x i64>* @llvm_mips_srar_d_RES
525 declare <2 x i64> @llvm.mips.srar.d(<2 x i64>, <2 x i64>) nounwind
527 ; CHECK: llvm_mips_srar_d_test:
528 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_d_ARG1)
529 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_d_ARG2)
530 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
531 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
532 ; CHECK-DAG: srar.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
533 ; CHECK-DAG: st.d [[WD]]
534 ; CHECK: .size llvm_mips_srar_d_test
536 @llvm_mips_srl_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
537 @llvm_mips_srl_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
538 @llvm_mips_srl_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
540 define void @llvm_mips_srl_b_test() nounwind {
542 %0 = load <16 x i8>* @llvm_mips_srl_b_ARG1
543 %1 = load <16 x i8>* @llvm_mips_srl_b_ARG2
544 %2 = tail call <16 x i8> @llvm.mips.srl.b(<16 x i8> %0, <16 x i8> %1)
545 store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES
549 declare <16 x i8> @llvm.mips.srl.b(<16 x i8>, <16 x i8>) nounwind
551 ; CHECK: llvm_mips_srl_b_test:
552 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1)
553 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2)
554 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
555 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
556 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
557 ; CHECK-DAG: st.b [[WD]]
558 ; CHECK: .size llvm_mips_srl_b_test
560 @llvm_mips_srl_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
561 @llvm_mips_srl_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
562 @llvm_mips_srl_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
564 define void @llvm_mips_srl_h_test() nounwind {
566 %0 = load <8 x i16>* @llvm_mips_srl_h_ARG1
567 %1 = load <8 x i16>* @llvm_mips_srl_h_ARG2
568 %2 = tail call <8 x i16> @llvm.mips.srl.h(<8 x i16> %0, <8 x i16> %1)
569 store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES
573 declare <8 x i16> @llvm.mips.srl.h(<8 x i16>, <8 x i16>) nounwind
575 ; CHECK: llvm_mips_srl_h_test:
576 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1)
577 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2)
578 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
579 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
580 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
581 ; CHECK-DAG: st.h [[WD]]
582 ; CHECK: .size llvm_mips_srl_h_test
584 @llvm_mips_srl_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
585 @llvm_mips_srl_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
586 @llvm_mips_srl_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
588 define void @llvm_mips_srl_w_test() nounwind {
590 %0 = load <4 x i32>* @llvm_mips_srl_w_ARG1
591 %1 = load <4 x i32>* @llvm_mips_srl_w_ARG2
592 %2 = tail call <4 x i32> @llvm.mips.srl.w(<4 x i32> %0, <4 x i32> %1)
593 store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES
597 declare <4 x i32> @llvm.mips.srl.w(<4 x i32>, <4 x i32>) nounwind
599 ; CHECK: llvm_mips_srl_w_test:
600 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1)
601 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2)
602 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
603 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
604 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
605 ; CHECK-DAG: st.w [[WD]]
606 ; CHECK: .size llvm_mips_srl_w_test
608 @llvm_mips_srl_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
609 @llvm_mips_srl_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
610 @llvm_mips_srl_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
612 define void @llvm_mips_srl_d_test() nounwind {
614 %0 = load <2 x i64>* @llvm_mips_srl_d_ARG1
615 %1 = load <2 x i64>* @llvm_mips_srl_d_ARG2
616 %2 = tail call <2 x i64> @llvm.mips.srl.d(<2 x i64> %0, <2 x i64> %1)
617 store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES
621 declare <2 x i64> @llvm.mips.srl.d(<2 x i64>, <2 x i64>) nounwind
623 ; CHECK: llvm_mips_srl_d_test:
624 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1)
625 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2)
626 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
627 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
628 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
629 ; CHECK-DAG: st.d [[WD]]
630 ; CHECK: .size llvm_mips_srl_d_test
632 @llvm_mips_srlr_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
633 @llvm_mips_srlr_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
634 @llvm_mips_srlr_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
636 define void @llvm_mips_srlr_b_test() nounwind {
638 %0 = load <16 x i8>* @llvm_mips_srlr_b_ARG1
639 %1 = load <16 x i8>* @llvm_mips_srlr_b_ARG2
640 %2 = tail call <16 x i8> @llvm.mips.srlr.b(<16 x i8> %0, <16 x i8> %1)
641 store <16 x i8> %2, <16 x i8>* @llvm_mips_srlr_b_RES
645 declare <16 x i8> @llvm.mips.srlr.b(<16 x i8>, <16 x i8>) nounwind
647 ; CHECK: llvm_mips_srlr_b_test:
648 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG1)
649 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG2)
650 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
651 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
652 ; CHECK-DAG: srlr.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
653 ; CHECK-DAG: st.b [[WD]]
654 ; CHECK: .size llvm_mips_srlr_b_test
656 @llvm_mips_srlr_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
657 @llvm_mips_srlr_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
658 @llvm_mips_srlr_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
660 define void @llvm_mips_srlr_h_test() nounwind {
662 %0 = load <8 x i16>* @llvm_mips_srlr_h_ARG1
663 %1 = load <8 x i16>* @llvm_mips_srlr_h_ARG2
664 %2 = tail call <8 x i16> @llvm.mips.srlr.h(<8 x i16> %0, <8 x i16> %1)
665 store <8 x i16> %2, <8 x i16>* @llvm_mips_srlr_h_RES
669 declare <8 x i16> @llvm.mips.srlr.h(<8 x i16>, <8 x i16>) nounwind
671 ; CHECK: llvm_mips_srlr_h_test:
672 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG1)
673 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG2)
674 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
675 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
676 ; CHECK-DAG: srlr.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
677 ; CHECK-DAG: st.h [[WD]]
678 ; CHECK: .size llvm_mips_srlr_h_test
680 @llvm_mips_srlr_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
681 @llvm_mips_srlr_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
682 @llvm_mips_srlr_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
684 define void @llvm_mips_srlr_w_test() nounwind {
686 %0 = load <4 x i32>* @llvm_mips_srlr_w_ARG1
687 %1 = load <4 x i32>* @llvm_mips_srlr_w_ARG2
688 %2 = tail call <4 x i32> @llvm.mips.srlr.w(<4 x i32> %0, <4 x i32> %1)
689 store <4 x i32> %2, <4 x i32>* @llvm_mips_srlr_w_RES
693 declare <4 x i32> @llvm.mips.srlr.w(<4 x i32>, <4 x i32>) nounwind
695 ; CHECK: llvm_mips_srlr_w_test:
696 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG1)
697 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG2)
698 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
699 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
700 ; CHECK-DAG: srlr.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
701 ; CHECK-DAG: st.w [[WD]]
702 ; CHECK: .size llvm_mips_srlr_w_test
704 @llvm_mips_srlr_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
705 @llvm_mips_srlr_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
706 @llvm_mips_srlr_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
708 define void @llvm_mips_srlr_d_test() nounwind {
710 %0 = load <2 x i64>* @llvm_mips_srlr_d_ARG1
711 %1 = load <2 x i64>* @llvm_mips_srlr_d_ARG2
712 %2 = tail call <2 x i64> @llvm.mips.srlr.d(<2 x i64> %0, <2 x i64> %1)
713 store <2 x i64> %2, <2 x i64>* @llvm_mips_srlr_d_RES
717 declare <2 x i64> @llvm.mips.srlr.d(<2 x i64>, <2 x i64>) nounwind
719 ; CHECK: llvm_mips_srlr_d_test:
720 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG1)
721 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG2)
722 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
723 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
724 ; CHECK-DAG: srlr.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
725 ; CHECK-DAG: st.d [[WD]]
726 ; CHECK: .size llvm_mips_srlr_d_test
729 define void @srl_b_test() nounwind {
731 %0 = load <16 x i8>* @llvm_mips_srl_b_ARG1
732 %1 = load <16 x i8>* @llvm_mips_srl_b_ARG2
733 %2 = lshr <16 x i8> %0, %1
734 store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES
739 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1)
740 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2)
741 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
742 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
743 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
744 ; CHECK-DAG: st.b [[WD]]
745 ; CHECK: .size srl_b_test
747 define void @srl_h_test() nounwind {
749 %0 = load <8 x i16>* @llvm_mips_srl_h_ARG1
750 %1 = load <8 x i16>* @llvm_mips_srl_h_ARG2
751 %2 = lshr <8 x i16> %0, %1
752 store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES
757 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1)
758 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2)
759 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
760 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
761 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
762 ; CHECK-DAG: st.h [[WD]]
763 ; CHECK: .size srl_h_test
765 define void @srl_w_test() nounwind {
767 %0 = load <4 x i32>* @llvm_mips_srl_w_ARG1
768 %1 = load <4 x i32>* @llvm_mips_srl_w_ARG2
769 %2 = lshr <4 x i32> %0, %1
770 store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES
775 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1)
776 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2)
777 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
778 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
779 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
780 ; CHECK-DAG: st.w [[WD]]
781 ; CHECK: .size srl_w_test
783 define void @srl_d_test() nounwind {
785 %0 = load <2 x i64>* @llvm_mips_srl_d_ARG1
786 %1 = load <2 x i64>* @llvm_mips_srl_d_ARG2
787 %2 = lshr <2 x i64> %0, %1
788 store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES
793 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1)
794 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2)
795 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
796 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
797 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
798 ; CHECK-DAG: st.d [[WD]]
799 ; CHECK: .size srl_d_test
801 @llvm_mips_subs_s_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
802 @llvm_mips_subs_s_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
803 @llvm_mips_subs_s_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
805 define void @llvm_mips_subs_s_b_test() nounwind {
807 %0 = load <16 x i8>* @llvm_mips_subs_s_b_ARG1
808 %1 = load <16 x i8>* @llvm_mips_subs_s_b_ARG2
809 %2 = tail call <16 x i8> @llvm.mips.subs.s.b(<16 x i8> %0, <16 x i8> %1)
810 store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_s_b_RES
814 declare <16 x i8> @llvm.mips.subs.s.b(<16 x i8>, <16 x i8>) nounwind
816 ; CHECK: llvm_mips_subs_s_b_test:
817 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG1)
818 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG2)
819 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
820 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
821 ; CHECK-DAG: subs_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
822 ; CHECK-DAG: st.b [[WD]]
823 ; CHECK: .size llvm_mips_subs_s_b_test
825 @llvm_mips_subs_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
826 @llvm_mips_subs_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
827 @llvm_mips_subs_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
829 define void @llvm_mips_subs_s_h_test() nounwind {
831 %0 = load <8 x i16>* @llvm_mips_subs_s_h_ARG1
832 %1 = load <8 x i16>* @llvm_mips_subs_s_h_ARG2
833 %2 = tail call <8 x i16> @llvm.mips.subs.s.h(<8 x i16> %0, <8 x i16> %1)
834 store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_s_h_RES
838 declare <8 x i16> @llvm.mips.subs.s.h(<8 x i16>, <8 x i16>) nounwind
840 ; CHECK: llvm_mips_subs_s_h_test:
841 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG1)
842 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG2)
843 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
844 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
845 ; CHECK-DAG: subs_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
846 ; CHECK-DAG: st.h [[WD]]
847 ; CHECK: .size llvm_mips_subs_s_h_test
849 @llvm_mips_subs_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
850 @llvm_mips_subs_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
851 @llvm_mips_subs_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
853 define void @llvm_mips_subs_s_w_test() nounwind {
855 %0 = load <4 x i32>* @llvm_mips_subs_s_w_ARG1
856 %1 = load <4 x i32>* @llvm_mips_subs_s_w_ARG2
857 %2 = tail call <4 x i32> @llvm.mips.subs.s.w(<4 x i32> %0, <4 x i32> %1)
858 store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_s_w_RES
862 declare <4 x i32> @llvm.mips.subs.s.w(<4 x i32>, <4 x i32>) nounwind
864 ; CHECK: llvm_mips_subs_s_w_test:
865 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG1)
866 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG2)
867 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
868 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
869 ; CHECK-DAG: subs_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
870 ; CHECK-DAG: st.w [[WD]]
871 ; CHECK: .size llvm_mips_subs_s_w_test
873 @llvm_mips_subs_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
874 @llvm_mips_subs_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
875 @llvm_mips_subs_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
877 define void @llvm_mips_subs_s_d_test() nounwind {
879 %0 = load <2 x i64>* @llvm_mips_subs_s_d_ARG1
880 %1 = load <2 x i64>* @llvm_mips_subs_s_d_ARG2
881 %2 = tail call <2 x i64> @llvm.mips.subs.s.d(<2 x i64> %0, <2 x i64> %1)
882 store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_s_d_RES
886 declare <2 x i64> @llvm.mips.subs.s.d(<2 x i64>, <2 x i64>) nounwind
888 ; CHECK: llvm_mips_subs_s_d_test:
889 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG1)
890 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG2)
891 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
892 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
893 ; CHECK-DAG: subs_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
894 ; CHECK-DAG: st.d [[WD]]
895 ; CHECK: .size llvm_mips_subs_s_d_test
897 @llvm_mips_subs_u_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
898 @llvm_mips_subs_u_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
899 @llvm_mips_subs_u_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
901 define void @llvm_mips_subs_u_b_test() nounwind {
903 %0 = load <16 x i8>* @llvm_mips_subs_u_b_ARG1
904 %1 = load <16 x i8>* @llvm_mips_subs_u_b_ARG2
905 %2 = tail call <16 x i8> @llvm.mips.subs.u.b(<16 x i8> %0, <16 x i8> %1)
906 store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_u_b_RES
910 declare <16 x i8> @llvm.mips.subs.u.b(<16 x i8>, <16 x i8>) nounwind
912 ; CHECK: llvm_mips_subs_u_b_test:
913 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG1)
914 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG2)
915 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
916 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
917 ; CHECK-DAG: subs_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
918 ; CHECK-DAG: st.b [[WD]]
919 ; CHECK: .size llvm_mips_subs_u_b_test
921 @llvm_mips_subs_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
922 @llvm_mips_subs_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
923 @llvm_mips_subs_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
925 define void @llvm_mips_subs_u_h_test() nounwind {
927 %0 = load <8 x i16>* @llvm_mips_subs_u_h_ARG1
928 %1 = load <8 x i16>* @llvm_mips_subs_u_h_ARG2
929 %2 = tail call <8 x i16> @llvm.mips.subs.u.h(<8 x i16> %0, <8 x i16> %1)
930 store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_u_h_RES
934 declare <8 x i16> @llvm.mips.subs.u.h(<8 x i16>, <8 x i16>) nounwind
936 ; CHECK: llvm_mips_subs_u_h_test:
937 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG1)
938 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG2)
939 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
940 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
941 ; CHECK-DAG: subs_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
942 ; CHECK-DAG: st.h [[WD]]
943 ; CHECK: .size llvm_mips_subs_u_h_test
945 @llvm_mips_subs_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
946 @llvm_mips_subs_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
947 @llvm_mips_subs_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
949 define void @llvm_mips_subs_u_w_test() nounwind {
951 %0 = load <4 x i32>* @llvm_mips_subs_u_w_ARG1
952 %1 = load <4 x i32>* @llvm_mips_subs_u_w_ARG2
953 %2 = tail call <4 x i32> @llvm.mips.subs.u.w(<4 x i32> %0, <4 x i32> %1)
954 store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_u_w_RES
958 declare <4 x i32> @llvm.mips.subs.u.w(<4 x i32>, <4 x i32>) nounwind
960 ; CHECK: llvm_mips_subs_u_w_test:
961 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG1)
962 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG2)
963 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
964 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
965 ; CHECK-DAG: subs_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
966 ; CHECK-DAG: st.w [[WD]]
967 ; CHECK: .size llvm_mips_subs_u_w_test
969 @llvm_mips_subs_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
970 @llvm_mips_subs_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
971 @llvm_mips_subs_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
973 define void @llvm_mips_subs_u_d_test() nounwind {
975 %0 = load <2 x i64>* @llvm_mips_subs_u_d_ARG1
976 %1 = load <2 x i64>* @llvm_mips_subs_u_d_ARG2
977 %2 = tail call <2 x i64> @llvm.mips.subs.u.d(<2 x i64> %0, <2 x i64> %1)
978 store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_u_d_RES
982 declare <2 x i64> @llvm.mips.subs.u.d(<2 x i64>, <2 x i64>) nounwind
984 ; CHECK: llvm_mips_subs_u_d_test:
985 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG1)
986 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG2)
987 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
988 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
989 ; CHECK-DAG: subs_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
990 ; CHECK-DAG: st.d [[WD]]
991 ; CHECK: .size llvm_mips_subs_u_d_test
993 @llvm_mips_subsus_u_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
994 @llvm_mips_subsus_u_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
995 @llvm_mips_subsus_u_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
997 define void @llvm_mips_subsus_u_b_test() nounwind {
999 %0 = load <16 x i8>* @llvm_mips_subsus_u_b_ARG1
1000 %1 = load <16 x i8>* @llvm_mips_subsus_u_b_ARG2
1001 %2 = tail call <16 x i8> @llvm.mips.subsus.u.b(<16 x i8> %0, <16 x i8> %1)
1002 store <16 x i8> %2, <16 x i8>* @llvm_mips_subsus_u_b_RES
1006 declare <16 x i8> @llvm.mips.subsus.u.b(<16 x i8>, <16 x i8>) nounwind
1008 ; CHECK: llvm_mips_subsus_u_b_test:
1009 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG1)
1010 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG2)
1011 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1012 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1013 ; CHECK-DAG: subsus_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1014 ; CHECK-DAG: st.b [[WD]]
1015 ; CHECK: .size llvm_mips_subsus_u_b_test
1017 @llvm_mips_subsus_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1018 @llvm_mips_subsus_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1019 @llvm_mips_subsus_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1021 define void @llvm_mips_subsus_u_h_test() nounwind {
1023 %0 = load <8 x i16>* @llvm_mips_subsus_u_h_ARG1
1024 %1 = load <8 x i16>* @llvm_mips_subsus_u_h_ARG2
1025 %2 = tail call <8 x i16> @llvm.mips.subsus.u.h(<8 x i16> %0, <8 x i16> %1)
1026 store <8 x i16> %2, <8 x i16>* @llvm_mips_subsus_u_h_RES
1030 declare <8 x i16> @llvm.mips.subsus.u.h(<8 x i16>, <8 x i16>) nounwind
1032 ; CHECK: llvm_mips_subsus_u_h_test:
1033 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG1)
1034 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG2)
1035 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1036 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1037 ; CHECK-DAG: subsus_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1038 ; CHECK-DAG: st.h [[WD]]
1039 ; CHECK: .size llvm_mips_subsus_u_h_test
1041 @llvm_mips_subsus_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1042 @llvm_mips_subsus_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1043 @llvm_mips_subsus_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1045 define void @llvm_mips_subsus_u_w_test() nounwind {
1047 %0 = load <4 x i32>* @llvm_mips_subsus_u_w_ARG1
1048 %1 = load <4 x i32>* @llvm_mips_subsus_u_w_ARG2
1049 %2 = tail call <4 x i32> @llvm.mips.subsus.u.w(<4 x i32> %0, <4 x i32> %1)
1050 store <4 x i32> %2, <4 x i32>* @llvm_mips_subsus_u_w_RES
1054 declare <4 x i32> @llvm.mips.subsus.u.w(<4 x i32>, <4 x i32>) nounwind
1056 ; CHECK: llvm_mips_subsus_u_w_test:
1057 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG1)
1058 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG2)
1059 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1060 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1061 ; CHECK-DAG: subsus_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1062 ; CHECK-DAG: st.w [[WD]]
1063 ; CHECK: .size llvm_mips_subsus_u_w_test
1065 @llvm_mips_subsus_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1066 @llvm_mips_subsus_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1067 @llvm_mips_subsus_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
1069 define void @llvm_mips_subsus_u_d_test() nounwind {
1071 %0 = load <2 x i64>* @llvm_mips_subsus_u_d_ARG1
1072 %1 = load <2 x i64>* @llvm_mips_subsus_u_d_ARG2
1073 %2 = tail call <2 x i64> @llvm.mips.subsus.u.d(<2 x i64> %0, <2 x i64> %1)
1074 store <2 x i64> %2, <2 x i64>* @llvm_mips_subsus_u_d_RES
1078 declare <2 x i64> @llvm.mips.subsus.u.d(<2 x i64>, <2 x i64>) nounwind
1080 ; CHECK: llvm_mips_subsus_u_d_test:
1081 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG1)
1082 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG2)
1083 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1084 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1085 ; CHECK-DAG: subsus_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1086 ; CHECK-DAG: st.d [[WD]]
1087 ; CHECK: .size llvm_mips_subsus_u_d_test
1089 @llvm_mips_subsuu_s_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
1090 @llvm_mips_subsuu_s_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
1091 @llvm_mips_subsuu_s_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
1093 define void @llvm_mips_subsuu_s_b_test() nounwind {
1095 %0 = load <16 x i8>* @llvm_mips_subsuu_s_b_ARG1
1096 %1 = load <16 x i8>* @llvm_mips_subsuu_s_b_ARG2
1097 %2 = tail call <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8> %0, <16 x i8> %1)
1098 store <16 x i8> %2, <16 x i8>* @llvm_mips_subsuu_s_b_RES
1102 declare <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8>, <16 x i8>) nounwind
1104 ; CHECK: llvm_mips_subsuu_s_b_test:
1105 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG1)
1106 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG2)
1107 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1108 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1109 ; CHECK-DAG: subsuu_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1110 ; CHECK-DAG: st.b [[WD]]
1111 ; CHECK: .size llvm_mips_subsuu_s_b_test
1113 @llvm_mips_subsuu_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1114 @llvm_mips_subsuu_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1115 @llvm_mips_subsuu_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1117 define void @llvm_mips_subsuu_s_h_test() nounwind {
1119 %0 = load <8 x i16>* @llvm_mips_subsuu_s_h_ARG1
1120 %1 = load <8 x i16>* @llvm_mips_subsuu_s_h_ARG2
1121 %2 = tail call <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16> %0, <8 x i16> %1)
1122 store <8 x i16> %2, <8 x i16>* @llvm_mips_subsuu_s_h_RES
1126 declare <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16>, <8 x i16>) nounwind
1128 ; CHECK: llvm_mips_subsuu_s_h_test:
1129 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG1)
1130 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG2)
1131 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1132 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1133 ; CHECK-DAG: subsuu_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1134 ; CHECK-DAG: st.h [[WD]]
1135 ; CHECK: .size llvm_mips_subsuu_s_h_test
1137 @llvm_mips_subsuu_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1138 @llvm_mips_subsuu_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1139 @llvm_mips_subsuu_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1141 define void @llvm_mips_subsuu_s_w_test() nounwind {
1143 %0 = load <4 x i32>* @llvm_mips_subsuu_s_w_ARG1
1144 %1 = load <4 x i32>* @llvm_mips_subsuu_s_w_ARG2
1145 %2 = tail call <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32> %0, <4 x i32> %1)
1146 store <4 x i32> %2, <4 x i32>* @llvm_mips_subsuu_s_w_RES
1150 declare <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32>, <4 x i32>) nounwind
1152 ; CHECK: llvm_mips_subsuu_s_w_test:
1153 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG1)
1154 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG2)
1155 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1156 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1157 ; CHECK-DAG: subsuu_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1158 ; CHECK-DAG: st.w [[WD]]
1159 ; CHECK: .size llvm_mips_subsuu_s_w_test
1161 @llvm_mips_subsuu_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1162 @llvm_mips_subsuu_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1163 @llvm_mips_subsuu_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
1165 define void @llvm_mips_subsuu_s_d_test() nounwind {
1167 %0 = load <2 x i64>* @llvm_mips_subsuu_s_d_ARG1
1168 %1 = load <2 x i64>* @llvm_mips_subsuu_s_d_ARG2
1169 %2 = tail call <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64> %0, <2 x i64> %1)
1170 store <2 x i64> %2, <2 x i64>* @llvm_mips_subsuu_s_d_RES
1174 declare <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64>, <2 x i64>) nounwind
1176 ; CHECK: llvm_mips_subsuu_s_d_test:
1177 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG1)
1178 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG2)
1179 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1180 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1181 ; CHECK-DAG: subsuu_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1182 ; CHECK-DAG: st.d [[WD]]
1183 ; CHECK: .size llvm_mips_subsuu_s_d_test
1185 @llvm_mips_subv_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
1186 @llvm_mips_subv_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
1187 @llvm_mips_subv_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
1189 define void @llvm_mips_subv_b_test() nounwind {
1191 %0 = load <16 x i8>* @llvm_mips_subv_b_ARG1
1192 %1 = load <16 x i8>* @llvm_mips_subv_b_ARG2
1193 %2 = tail call <16 x i8> @llvm.mips.subv.b(<16 x i8> %0, <16 x i8> %1)
1194 store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES
1198 declare <16 x i8> @llvm.mips.subv.b(<16 x i8>, <16 x i8>) nounwind
1200 ; CHECK: llvm_mips_subv_b_test:
1201 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1)
1202 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2)
1203 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1204 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1205 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1206 ; CHECK-DAG: st.b [[WD]]
1207 ; CHECK: .size llvm_mips_subv_b_test
1209 @llvm_mips_subv_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1210 @llvm_mips_subv_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1211 @llvm_mips_subv_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1213 define void @llvm_mips_subv_h_test() nounwind {
1215 %0 = load <8 x i16>* @llvm_mips_subv_h_ARG1
1216 %1 = load <8 x i16>* @llvm_mips_subv_h_ARG2
1217 %2 = tail call <8 x i16> @llvm.mips.subv.h(<8 x i16> %0, <8 x i16> %1)
1218 store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES
1222 declare <8 x i16> @llvm.mips.subv.h(<8 x i16>, <8 x i16>) nounwind
1224 ; CHECK: llvm_mips_subv_h_test:
1225 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1)
1226 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2)
1227 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1228 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1229 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1230 ; CHECK-DAG: st.h [[WD]]
1231 ; CHECK: .size llvm_mips_subv_h_test
1233 @llvm_mips_subv_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1234 @llvm_mips_subv_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1235 @llvm_mips_subv_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1237 define void @llvm_mips_subv_w_test() nounwind {
1239 %0 = load <4 x i32>* @llvm_mips_subv_w_ARG1
1240 %1 = load <4 x i32>* @llvm_mips_subv_w_ARG2
1241 %2 = tail call <4 x i32> @llvm.mips.subv.w(<4 x i32> %0, <4 x i32> %1)
1242 store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES
1246 declare <4 x i32> @llvm.mips.subv.w(<4 x i32>, <4 x i32>) nounwind
1248 ; CHECK: llvm_mips_subv_w_test:
1249 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1)
1250 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2)
1251 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1252 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1253 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1254 ; CHECK-DAG: st.w [[WD]]
1255 ; CHECK: .size llvm_mips_subv_w_test
1257 @llvm_mips_subv_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1258 @llvm_mips_subv_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1259 @llvm_mips_subv_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
1261 define void @llvm_mips_subv_d_test() nounwind {
1263 %0 = load <2 x i64>* @llvm_mips_subv_d_ARG1
1264 %1 = load <2 x i64>* @llvm_mips_subv_d_ARG2
1265 %2 = tail call <2 x i64> @llvm.mips.subv.d(<2 x i64> %0, <2 x i64> %1)
1266 store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES
1270 declare <2 x i64> @llvm.mips.subv.d(<2 x i64>, <2 x i64>) nounwind
1272 ; CHECK: llvm_mips_subv_d_test:
1273 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1)
1274 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2)
1275 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1276 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1277 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1278 ; CHECK-DAG: st.d [[WD]]
1279 ; CHECK: .size llvm_mips_subv_d_test
1282 define void @subv_b_test() nounwind {
1284 %0 = load <16 x i8>* @llvm_mips_subv_b_ARG1
1285 %1 = load <16 x i8>* @llvm_mips_subv_b_ARG2
1286 %2 = sub <16 x i8> %0, %1
1287 store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES
1291 ; CHECK: subv_b_test:
1292 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1)
1293 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2)
1294 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1295 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1296 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1297 ; CHECK-DAG: st.b [[WD]]
1298 ; CHECK: .size subv_b_test
1300 define void @subv_h_test() nounwind {
1302 %0 = load <8 x i16>* @llvm_mips_subv_h_ARG1
1303 %1 = load <8 x i16>* @llvm_mips_subv_h_ARG2
1304 %2 = sub <8 x i16> %0, %1
1305 store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES
1309 ; CHECK: subv_h_test:
1310 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1)
1311 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2)
1312 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1313 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1314 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1315 ; CHECK-DAG: st.h [[WD]]
1316 ; CHECK: .size subv_h_test
1318 define void @subv_w_test() nounwind {
1320 %0 = load <4 x i32>* @llvm_mips_subv_w_ARG1
1321 %1 = load <4 x i32>* @llvm_mips_subv_w_ARG2
1322 %2 = sub <4 x i32> %0, %1
1323 store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES
1327 ; CHECK: subv_w_test:
1328 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1)
1329 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2)
1330 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1331 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1332 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1333 ; CHECK-DAG: st.w [[WD]]
1334 ; CHECK: .size subv_w_test
1336 define void @subv_d_test() nounwind {
1338 %0 = load <2 x i64>* @llvm_mips_subv_d_ARG1
1339 %1 = load <2 x i64>* @llvm_mips_subv_d_ARG2
1340 %2 = sub <2 x i64> %0, %1
1341 store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES
1345 ; CHECK: subv_d_test:
1346 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1)
1347 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2)
1348 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1349 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1350 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1351 ; CHECK-DAG: st.d [[WD]]
1352 ; CHECK: .size subv_d_test