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
6 @llvm_mips_sld_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
7 @llvm_mips_sld_b_ARG2 = global i32 10, align 16
8 @llvm_mips_sld_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
10 define void @llvm_mips_sld_b_test() nounwind {
12 %0 = load <16 x i8>* @llvm_mips_sld_b_ARG1
13 %1 = load i32* @llvm_mips_sld_b_ARG2
14 %2 = tail call <16 x i8> @llvm.mips.sld.b(<16 x i8> %0, i32 %1)
15 store <16 x i8> %2, <16 x i8>* @llvm_mips_sld_b_RES
19 declare <16 x i8> @llvm.mips.sld.b(<16 x i8>, i32) nounwind
21 ; CHECK: llvm_mips_sld_b_test:
22 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_b_ARG1)
23 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_b_ARG2)
24 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
25 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
26 ; CHECK-DAG: sld.b [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
27 ; CHECK-DAG: st.b [[WD]]
28 ; CHECK: .size llvm_mips_sld_b_test
30 @llvm_mips_sld_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
31 @llvm_mips_sld_h_ARG2 = global i32 10, align 16
32 @llvm_mips_sld_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
34 define void @llvm_mips_sld_h_test() nounwind {
36 %0 = load <8 x i16>* @llvm_mips_sld_h_ARG1
37 %1 = load i32* @llvm_mips_sld_h_ARG2
38 %2 = tail call <8 x i16> @llvm.mips.sld.h(<8 x i16> %0, i32 %1)
39 store <8 x i16> %2, <8 x i16>* @llvm_mips_sld_h_RES
43 declare <8 x i16> @llvm.mips.sld.h(<8 x i16>, i32) nounwind
45 ; CHECK: llvm_mips_sld_h_test:
46 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_h_ARG1)
47 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_h_ARG2)
48 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
49 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
50 ; CHECK-DAG: sld.h [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
51 ; CHECK-DAG: st.h [[WD]]
52 ; CHECK: .size llvm_mips_sld_h_test
54 @llvm_mips_sld_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
55 @llvm_mips_sld_w_ARG2 = global i32 10, align 16
56 @llvm_mips_sld_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
58 define void @llvm_mips_sld_w_test() nounwind {
60 %0 = load <4 x i32>* @llvm_mips_sld_w_ARG1
61 %1 = load i32* @llvm_mips_sld_w_ARG2
62 %2 = tail call <4 x i32> @llvm.mips.sld.w(<4 x i32> %0, i32 %1)
63 store <4 x i32> %2, <4 x i32>* @llvm_mips_sld_w_RES
67 declare <4 x i32> @llvm.mips.sld.w(<4 x i32>, i32) nounwind
69 ; CHECK: llvm_mips_sld_w_test:
70 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_w_ARG1)
71 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_w_ARG2)
72 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
73 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
74 ; CHECK-DAG: sld.w [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
75 ; CHECK-DAG: st.w [[WD]]
76 ; CHECK: .size llvm_mips_sld_w_test
78 @llvm_mips_sld_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
79 @llvm_mips_sld_d_ARG2 = global i32 10, align 16
80 @llvm_mips_sld_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
82 define void @llvm_mips_sld_d_test() nounwind {
84 %0 = load <2 x i64>* @llvm_mips_sld_d_ARG1
85 %1 = load i32* @llvm_mips_sld_d_ARG2
86 %2 = tail call <2 x i64> @llvm.mips.sld.d(<2 x i64> %0, i32 %1)
87 store <2 x i64> %2, <2 x i64>* @llvm_mips_sld_d_RES
91 declare <2 x i64> @llvm.mips.sld.d(<2 x i64>, i32) nounwind
93 ; CHECK: llvm_mips_sld_d_test:
94 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_d_ARG1)
95 ; CHECK-DAG: lw [[RT:\$[0-9]+]], %got(llvm_mips_sld_d_ARG2)
96 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
97 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R2]])
98 ; CHECK-DAG: sld.d [[WD:\$w[0-9]+]], [[WS]]{{\[}}[[RT]]{{\]}}
99 ; CHECK-DAG: st.d [[WD]]
100 ; CHECK: .size llvm_mips_sld_d_test
102 @llvm_mips_sll_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
103 @llvm_mips_sll_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
104 @llvm_mips_sll_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
106 define void @llvm_mips_sll_b_test() nounwind {
108 %0 = load <16 x i8>* @llvm_mips_sll_b_ARG1
109 %1 = load <16 x i8>* @llvm_mips_sll_b_ARG2
110 %2 = tail call <16 x i8> @llvm.mips.sll.b(<16 x i8> %0, <16 x i8> %1)
111 store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES
115 declare <16 x i8> @llvm.mips.sll.b(<16 x i8>, <16 x i8>) nounwind
117 ; CHECK: llvm_mips_sll_b_test:
118 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1)
119 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2)
120 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
121 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
122 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
123 ; CHECK-DAG: st.b [[WD]]
124 ; CHECK: .size llvm_mips_sll_b_test
126 @llvm_mips_sll_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
127 @llvm_mips_sll_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
128 @llvm_mips_sll_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
130 define void @llvm_mips_sll_h_test() nounwind {
132 %0 = load <8 x i16>* @llvm_mips_sll_h_ARG1
133 %1 = load <8 x i16>* @llvm_mips_sll_h_ARG2
134 %2 = tail call <8 x i16> @llvm.mips.sll.h(<8 x i16> %0, <8 x i16> %1)
135 store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES
139 declare <8 x i16> @llvm.mips.sll.h(<8 x i16>, <8 x i16>) nounwind
141 ; CHECK: llvm_mips_sll_h_test:
142 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1)
143 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2)
144 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
145 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
146 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
147 ; CHECK-DAG: st.h [[WD]]
148 ; CHECK: .size llvm_mips_sll_h_test
150 @llvm_mips_sll_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
151 @llvm_mips_sll_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
152 @llvm_mips_sll_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
154 define void @llvm_mips_sll_w_test() nounwind {
156 %0 = load <4 x i32>* @llvm_mips_sll_w_ARG1
157 %1 = load <4 x i32>* @llvm_mips_sll_w_ARG2
158 %2 = tail call <4 x i32> @llvm.mips.sll.w(<4 x i32> %0, <4 x i32> %1)
159 store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES
163 declare <4 x i32> @llvm.mips.sll.w(<4 x i32>, <4 x i32>) nounwind
165 ; CHECK: llvm_mips_sll_w_test:
166 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1)
167 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2)
168 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
169 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
170 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
171 ; CHECK-DAG: st.w [[WD]]
172 ; CHECK: .size llvm_mips_sll_w_test
174 @llvm_mips_sll_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
175 @llvm_mips_sll_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
176 @llvm_mips_sll_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
178 define void @llvm_mips_sll_d_test() nounwind {
180 %0 = load <2 x i64>* @llvm_mips_sll_d_ARG1
181 %1 = load <2 x i64>* @llvm_mips_sll_d_ARG2
182 %2 = tail call <2 x i64> @llvm.mips.sll.d(<2 x i64> %0, <2 x i64> %1)
183 store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES
187 declare <2 x i64> @llvm.mips.sll.d(<2 x i64>, <2 x i64>) nounwind
189 ; CHECK: llvm_mips_sll_d_test:
190 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1)
191 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2)
192 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
193 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
194 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
195 ; CHECK-DAG: st.d [[WD]]
196 ; CHECK: .size llvm_mips_sll_d_test
198 define void @sll_b_test() nounwind {
200 %0 = load <16 x i8>* @llvm_mips_sll_b_ARG1
201 %1 = load <16 x i8>* @llvm_mips_sll_b_ARG2
202 %2 = shl <16 x i8> %0, %1
203 store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES
208 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1)
209 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2)
210 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
211 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
212 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
213 ; CHECK-DAG: st.b [[WD]]
214 ; CHECK: .size sll_b_test
216 define void @sll_h_test() nounwind {
218 %0 = load <8 x i16>* @llvm_mips_sll_h_ARG1
219 %1 = load <8 x i16>* @llvm_mips_sll_h_ARG2
220 %2 = shl <8 x i16> %0, %1
221 store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES
226 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1)
227 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2)
228 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
229 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
230 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
231 ; CHECK-DAG: st.h [[WD]]
232 ; CHECK: .size sll_h_test
234 define void @sll_w_test() nounwind {
236 %0 = load <4 x i32>* @llvm_mips_sll_w_ARG1
237 %1 = load <4 x i32>* @llvm_mips_sll_w_ARG2
238 %2 = shl <4 x i32> %0, %1
239 store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES
244 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1)
245 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2)
246 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
247 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
248 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
249 ; CHECK-DAG: st.w [[WD]]
250 ; CHECK: .size sll_w_test
252 define void @sll_d_test() nounwind {
254 %0 = load <2 x i64>* @llvm_mips_sll_d_ARG1
255 %1 = load <2 x i64>* @llvm_mips_sll_d_ARG2
256 %2 = shl <2 x i64> %0, %1
257 store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES
262 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1)
263 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2)
264 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
265 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
266 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
267 ; CHECK-DAG: st.d [[WD]]
268 ; CHECK: .size sll_d_test
270 @llvm_mips_sra_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
271 @llvm_mips_sra_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
272 @llvm_mips_sra_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
274 define void @llvm_mips_sra_b_test() nounwind {
276 %0 = load <16 x i8>* @llvm_mips_sra_b_ARG1
277 %1 = load <16 x i8>* @llvm_mips_sra_b_ARG2
278 %2 = tail call <16 x i8> @llvm.mips.sra.b(<16 x i8> %0, <16 x i8> %1)
279 store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES
283 declare <16 x i8> @llvm.mips.sra.b(<16 x i8>, <16 x i8>) nounwind
285 ; CHECK: llvm_mips_sra_b_test:
286 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1)
287 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2)
288 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
289 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
290 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
291 ; CHECK-DAG: st.b [[WD]]
292 ; CHECK: .size llvm_mips_sra_b_test
294 @llvm_mips_sra_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
295 @llvm_mips_sra_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
296 @llvm_mips_sra_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
298 define void @llvm_mips_sra_h_test() nounwind {
300 %0 = load <8 x i16>* @llvm_mips_sra_h_ARG1
301 %1 = load <8 x i16>* @llvm_mips_sra_h_ARG2
302 %2 = tail call <8 x i16> @llvm.mips.sra.h(<8 x i16> %0, <8 x i16> %1)
303 store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES
307 declare <8 x i16> @llvm.mips.sra.h(<8 x i16>, <8 x i16>) nounwind
309 ; CHECK: llvm_mips_sra_h_test:
310 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1)
311 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2)
312 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
313 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
314 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
315 ; CHECK-DAG: st.h [[WD]]
316 ; CHECK: .size llvm_mips_sra_h_test
318 @llvm_mips_sra_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
319 @llvm_mips_sra_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
320 @llvm_mips_sra_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
322 define void @llvm_mips_sra_w_test() nounwind {
324 %0 = load <4 x i32>* @llvm_mips_sra_w_ARG1
325 %1 = load <4 x i32>* @llvm_mips_sra_w_ARG2
326 %2 = tail call <4 x i32> @llvm.mips.sra.w(<4 x i32> %0, <4 x i32> %1)
327 store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES
331 declare <4 x i32> @llvm.mips.sra.w(<4 x i32>, <4 x i32>) nounwind
333 ; CHECK: llvm_mips_sra_w_test:
334 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1)
335 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2)
336 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
337 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
338 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
339 ; CHECK-DAG: st.w [[WD]]
340 ; CHECK: .size llvm_mips_sra_w_test
342 @llvm_mips_sra_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
343 @llvm_mips_sra_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
344 @llvm_mips_sra_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
346 define void @llvm_mips_sra_d_test() nounwind {
348 %0 = load <2 x i64>* @llvm_mips_sra_d_ARG1
349 %1 = load <2 x i64>* @llvm_mips_sra_d_ARG2
350 %2 = tail call <2 x i64> @llvm.mips.sra.d(<2 x i64> %0, <2 x i64> %1)
351 store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES
355 declare <2 x i64> @llvm.mips.sra.d(<2 x i64>, <2 x i64>) nounwind
357 ; CHECK: llvm_mips_sra_d_test:
358 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1)
359 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2)
360 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
361 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
362 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
363 ; CHECK-DAG: st.d [[WD]]
364 ; CHECK: .size llvm_mips_sra_d_test
367 define void @sra_b_test() nounwind {
369 %0 = load <16 x i8>* @llvm_mips_sra_b_ARG1
370 %1 = load <16 x i8>* @llvm_mips_sra_b_ARG2
371 %2 = ashr <16 x i8> %0, %1
372 store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES
377 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1)
378 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2)
379 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
380 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
381 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
382 ; CHECK-DAG: st.b [[WD]]
383 ; CHECK: .size sra_b_test
385 define void @sra_h_test() nounwind {
387 %0 = load <8 x i16>* @llvm_mips_sra_h_ARG1
388 %1 = load <8 x i16>* @llvm_mips_sra_h_ARG2
389 %2 = ashr <8 x i16> %0, %1
390 store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES
395 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1)
396 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2)
397 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
398 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
399 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
400 ; CHECK-DAG: st.h [[WD]]
401 ; CHECK: .size sra_h_test
403 define void @sra_w_test() nounwind {
405 %0 = load <4 x i32>* @llvm_mips_sra_w_ARG1
406 %1 = load <4 x i32>* @llvm_mips_sra_w_ARG2
407 %2 = ashr <4 x i32> %0, %1
408 store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES
413 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1)
414 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2)
415 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
416 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
417 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
418 ; CHECK-DAG: st.w [[WD]]
419 ; CHECK: .size sra_w_test
421 define void @sra_d_test() nounwind {
423 %0 = load <2 x i64>* @llvm_mips_sra_d_ARG1
424 %1 = load <2 x i64>* @llvm_mips_sra_d_ARG2
425 %2 = ashr <2 x i64> %0, %1
426 store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES
431 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1)
432 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2)
433 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
434 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
435 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
436 ; CHECK-DAG: st.d [[WD]]
437 ; CHECK: .size sra_d_test
439 @llvm_mips_srar_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
440 @llvm_mips_srar_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
441 @llvm_mips_srar_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
443 define void @llvm_mips_srar_b_test() nounwind {
445 %0 = load <16 x i8>* @llvm_mips_srar_b_ARG1
446 %1 = load <16 x i8>* @llvm_mips_srar_b_ARG2
447 %2 = tail call <16 x i8> @llvm.mips.srar.b(<16 x i8> %0, <16 x i8> %1)
448 store <16 x i8> %2, <16 x i8>* @llvm_mips_srar_b_RES
452 declare <16 x i8> @llvm.mips.srar.b(<16 x i8>, <16 x i8>) nounwind
454 ; CHECK: llvm_mips_srar_b_test:
455 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_b_ARG1)
456 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_b_ARG2)
457 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
458 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
459 ; CHECK-DAG: srar.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
460 ; CHECK-DAG: st.b [[WD]]
461 ; CHECK: .size llvm_mips_srar_b_test
463 @llvm_mips_srar_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
464 @llvm_mips_srar_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
465 @llvm_mips_srar_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
467 define void @llvm_mips_srar_h_test() nounwind {
469 %0 = load <8 x i16>* @llvm_mips_srar_h_ARG1
470 %1 = load <8 x i16>* @llvm_mips_srar_h_ARG2
471 %2 = tail call <8 x i16> @llvm.mips.srar.h(<8 x i16> %0, <8 x i16> %1)
472 store <8 x i16> %2, <8 x i16>* @llvm_mips_srar_h_RES
476 declare <8 x i16> @llvm.mips.srar.h(<8 x i16>, <8 x i16>) nounwind
478 ; CHECK: llvm_mips_srar_h_test:
479 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_h_ARG1)
480 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_h_ARG2)
481 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
482 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
483 ; CHECK-DAG: srar.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
484 ; CHECK-DAG: st.h [[WD]]
485 ; CHECK: .size llvm_mips_srar_h_test
487 @llvm_mips_srar_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
488 @llvm_mips_srar_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
489 @llvm_mips_srar_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
491 define void @llvm_mips_srar_w_test() nounwind {
493 %0 = load <4 x i32>* @llvm_mips_srar_w_ARG1
494 %1 = load <4 x i32>* @llvm_mips_srar_w_ARG2
495 %2 = tail call <4 x i32> @llvm.mips.srar.w(<4 x i32> %0, <4 x i32> %1)
496 store <4 x i32> %2, <4 x i32>* @llvm_mips_srar_w_RES
500 declare <4 x i32> @llvm.mips.srar.w(<4 x i32>, <4 x i32>) nounwind
502 ; CHECK: llvm_mips_srar_w_test:
503 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_w_ARG1)
504 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_w_ARG2)
505 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
506 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
507 ; CHECK-DAG: srar.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
508 ; CHECK-DAG: st.w [[WD]]
509 ; CHECK: .size llvm_mips_srar_w_test
511 @llvm_mips_srar_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
512 @llvm_mips_srar_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
513 @llvm_mips_srar_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
515 define void @llvm_mips_srar_d_test() nounwind {
517 %0 = load <2 x i64>* @llvm_mips_srar_d_ARG1
518 %1 = load <2 x i64>* @llvm_mips_srar_d_ARG2
519 %2 = tail call <2 x i64> @llvm.mips.srar.d(<2 x i64> %0, <2 x i64> %1)
520 store <2 x i64> %2, <2 x i64>* @llvm_mips_srar_d_RES
524 declare <2 x i64> @llvm.mips.srar.d(<2 x i64>, <2 x i64>) nounwind
526 ; CHECK: llvm_mips_srar_d_test:
527 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_d_ARG1)
528 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_d_ARG2)
529 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
530 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
531 ; CHECK-DAG: srar.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
532 ; CHECK-DAG: st.d [[WD]]
533 ; CHECK: .size llvm_mips_srar_d_test
535 @llvm_mips_srl_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
536 @llvm_mips_srl_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
537 @llvm_mips_srl_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
539 define void @llvm_mips_srl_b_test() nounwind {
541 %0 = load <16 x i8>* @llvm_mips_srl_b_ARG1
542 %1 = load <16 x i8>* @llvm_mips_srl_b_ARG2
543 %2 = tail call <16 x i8> @llvm.mips.srl.b(<16 x i8> %0, <16 x i8> %1)
544 store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES
548 declare <16 x i8> @llvm.mips.srl.b(<16 x i8>, <16 x i8>) nounwind
550 ; CHECK: llvm_mips_srl_b_test:
551 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1)
552 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2)
553 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
554 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
555 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
556 ; CHECK-DAG: st.b [[WD]]
557 ; CHECK: .size llvm_mips_srl_b_test
559 @llvm_mips_srl_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
560 @llvm_mips_srl_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
561 @llvm_mips_srl_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
563 define void @llvm_mips_srl_h_test() nounwind {
565 %0 = load <8 x i16>* @llvm_mips_srl_h_ARG1
566 %1 = load <8 x i16>* @llvm_mips_srl_h_ARG2
567 %2 = tail call <8 x i16> @llvm.mips.srl.h(<8 x i16> %0, <8 x i16> %1)
568 store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES
572 declare <8 x i16> @llvm.mips.srl.h(<8 x i16>, <8 x i16>) nounwind
574 ; CHECK: llvm_mips_srl_h_test:
575 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1)
576 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2)
577 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
578 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
579 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
580 ; CHECK-DAG: st.h [[WD]]
581 ; CHECK: .size llvm_mips_srl_h_test
583 @llvm_mips_srl_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
584 @llvm_mips_srl_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
585 @llvm_mips_srl_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
587 define void @llvm_mips_srl_w_test() nounwind {
589 %0 = load <4 x i32>* @llvm_mips_srl_w_ARG1
590 %1 = load <4 x i32>* @llvm_mips_srl_w_ARG2
591 %2 = tail call <4 x i32> @llvm.mips.srl.w(<4 x i32> %0, <4 x i32> %1)
592 store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES
596 declare <4 x i32> @llvm.mips.srl.w(<4 x i32>, <4 x i32>) nounwind
598 ; CHECK: llvm_mips_srl_w_test:
599 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1)
600 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2)
601 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
602 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
603 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
604 ; CHECK-DAG: st.w [[WD]]
605 ; CHECK: .size llvm_mips_srl_w_test
607 @llvm_mips_srl_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
608 @llvm_mips_srl_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
609 @llvm_mips_srl_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
611 define void @llvm_mips_srl_d_test() nounwind {
613 %0 = load <2 x i64>* @llvm_mips_srl_d_ARG1
614 %1 = load <2 x i64>* @llvm_mips_srl_d_ARG2
615 %2 = tail call <2 x i64> @llvm.mips.srl.d(<2 x i64> %0, <2 x i64> %1)
616 store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES
620 declare <2 x i64> @llvm.mips.srl.d(<2 x i64>, <2 x i64>) nounwind
622 ; CHECK: llvm_mips_srl_d_test:
623 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1)
624 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2)
625 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
626 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
627 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
628 ; CHECK-DAG: st.d [[WD]]
629 ; CHECK: .size llvm_mips_srl_d_test
631 @llvm_mips_srlr_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
632 @llvm_mips_srlr_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
633 @llvm_mips_srlr_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
635 define void @llvm_mips_srlr_b_test() nounwind {
637 %0 = load <16 x i8>* @llvm_mips_srlr_b_ARG1
638 %1 = load <16 x i8>* @llvm_mips_srlr_b_ARG2
639 %2 = tail call <16 x i8> @llvm.mips.srlr.b(<16 x i8> %0, <16 x i8> %1)
640 store <16 x i8> %2, <16 x i8>* @llvm_mips_srlr_b_RES
644 declare <16 x i8> @llvm.mips.srlr.b(<16 x i8>, <16 x i8>) nounwind
646 ; CHECK: llvm_mips_srlr_b_test:
647 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG1)
648 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG2)
649 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
650 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
651 ; CHECK-DAG: srlr.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
652 ; CHECK-DAG: st.b [[WD]]
653 ; CHECK: .size llvm_mips_srlr_b_test
655 @llvm_mips_srlr_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
656 @llvm_mips_srlr_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
657 @llvm_mips_srlr_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
659 define void @llvm_mips_srlr_h_test() nounwind {
661 %0 = load <8 x i16>* @llvm_mips_srlr_h_ARG1
662 %1 = load <8 x i16>* @llvm_mips_srlr_h_ARG2
663 %2 = tail call <8 x i16> @llvm.mips.srlr.h(<8 x i16> %0, <8 x i16> %1)
664 store <8 x i16> %2, <8 x i16>* @llvm_mips_srlr_h_RES
668 declare <8 x i16> @llvm.mips.srlr.h(<8 x i16>, <8 x i16>) nounwind
670 ; CHECK: llvm_mips_srlr_h_test:
671 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG1)
672 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG2)
673 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
674 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
675 ; CHECK-DAG: srlr.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
676 ; CHECK-DAG: st.h [[WD]]
677 ; CHECK: .size llvm_mips_srlr_h_test
679 @llvm_mips_srlr_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
680 @llvm_mips_srlr_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
681 @llvm_mips_srlr_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
683 define void @llvm_mips_srlr_w_test() nounwind {
685 %0 = load <4 x i32>* @llvm_mips_srlr_w_ARG1
686 %1 = load <4 x i32>* @llvm_mips_srlr_w_ARG2
687 %2 = tail call <4 x i32> @llvm.mips.srlr.w(<4 x i32> %0, <4 x i32> %1)
688 store <4 x i32> %2, <4 x i32>* @llvm_mips_srlr_w_RES
692 declare <4 x i32> @llvm.mips.srlr.w(<4 x i32>, <4 x i32>) nounwind
694 ; CHECK: llvm_mips_srlr_w_test:
695 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG1)
696 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG2)
697 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
698 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
699 ; CHECK-DAG: srlr.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
700 ; CHECK-DAG: st.w [[WD]]
701 ; CHECK: .size llvm_mips_srlr_w_test
703 @llvm_mips_srlr_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
704 @llvm_mips_srlr_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
705 @llvm_mips_srlr_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
707 define void @llvm_mips_srlr_d_test() nounwind {
709 %0 = load <2 x i64>* @llvm_mips_srlr_d_ARG1
710 %1 = load <2 x i64>* @llvm_mips_srlr_d_ARG2
711 %2 = tail call <2 x i64> @llvm.mips.srlr.d(<2 x i64> %0, <2 x i64> %1)
712 store <2 x i64> %2, <2 x i64>* @llvm_mips_srlr_d_RES
716 declare <2 x i64> @llvm.mips.srlr.d(<2 x i64>, <2 x i64>) nounwind
718 ; CHECK: llvm_mips_srlr_d_test:
719 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG1)
720 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG2)
721 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
722 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
723 ; CHECK-DAG: srlr.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
724 ; CHECK-DAG: st.d [[WD]]
725 ; CHECK: .size llvm_mips_srlr_d_test
728 define void @srl_b_test() nounwind {
730 %0 = load <16 x i8>* @llvm_mips_srl_b_ARG1
731 %1 = load <16 x i8>* @llvm_mips_srl_b_ARG2
732 %2 = lshr <16 x i8> %0, %1
733 store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES
738 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1)
739 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2)
740 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
741 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
742 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
743 ; CHECK-DAG: st.b [[WD]]
744 ; CHECK: .size srl_b_test
746 define void @srl_h_test() nounwind {
748 %0 = load <8 x i16>* @llvm_mips_srl_h_ARG1
749 %1 = load <8 x i16>* @llvm_mips_srl_h_ARG2
750 %2 = lshr <8 x i16> %0, %1
751 store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES
756 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1)
757 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2)
758 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
759 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
760 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
761 ; CHECK-DAG: st.h [[WD]]
762 ; CHECK: .size srl_h_test
764 define void @srl_w_test() nounwind {
766 %0 = load <4 x i32>* @llvm_mips_srl_w_ARG1
767 %1 = load <4 x i32>* @llvm_mips_srl_w_ARG2
768 %2 = lshr <4 x i32> %0, %1
769 store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES
774 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1)
775 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2)
776 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
777 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
778 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
779 ; CHECK-DAG: st.w [[WD]]
780 ; CHECK: .size srl_w_test
782 define void @srl_d_test() nounwind {
784 %0 = load <2 x i64>* @llvm_mips_srl_d_ARG1
785 %1 = load <2 x i64>* @llvm_mips_srl_d_ARG2
786 %2 = lshr <2 x i64> %0, %1
787 store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES
792 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1)
793 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2)
794 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
795 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
796 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
797 ; CHECK-DAG: st.d [[WD]]
798 ; CHECK: .size srl_d_test
800 @llvm_mips_subs_s_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
801 @llvm_mips_subs_s_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
802 @llvm_mips_subs_s_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
804 define void @llvm_mips_subs_s_b_test() nounwind {
806 %0 = load <16 x i8>* @llvm_mips_subs_s_b_ARG1
807 %1 = load <16 x i8>* @llvm_mips_subs_s_b_ARG2
808 %2 = tail call <16 x i8> @llvm.mips.subs.s.b(<16 x i8> %0, <16 x i8> %1)
809 store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_s_b_RES
813 declare <16 x i8> @llvm.mips.subs.s.b(<16 x i8>, <16 x i8>) nounwind
815 ; CHECK: llvm_mips_subs_s_b_test:
816 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG1)
817 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG2)
818 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
819 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
820 ; CHECK-DAG: subs_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
821 ; CHECK-DAG: st.b [[WD]]
822 ; CHECK: .size llvm_mips_subs_s_b_test
824 @llvm_mips_subs_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
825 @llvm_mips_subs_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
826 @llvm_mips_subs_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
828 define void @llvm_mips_subs_s_h_test() nounwind {
830 %0 = load <8 x i16>* @llvm_mips_subs_s_h_ARG1
831 %1 = load <8 x i16>* @llvm_mips_subs_s_h_ARG2
832 %2 = tail call <8 x i16> @llvm.mips.subs.s.h(<8 x i16> %0, <8 x i16> %1)
833 store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_s_h_RES
837 declare <8 x i16> @llvm.mips.subs.s.h(<8 x i16>, <8 x i16>) nounwind
839 ; CHECK: llvm_mips_subs_s_h_test:
840 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG1)
841 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG2)
842 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
843 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
844 ; CHECK-DAG: subs_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
845 ; CHECK-DAG: st.h [[WD]]
846 ; CHECK: .size llvm_mips_subs_s_h_test
848 @llvm_mips_subs_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
849 @llvm_mips_subs_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
850 @llvm_mips_subs_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
852 define void @llvm_mips_subs_s_w_test() nounwind {
854 %0 = load <4 x i32>* @llvm_mips_subs_s_w_ARG1
855 %1 = load <4 x i32>* @llvm_mips_subs_s_w_ARG2
856 %2 = tail call <4 x i32> @llvm.mips.subs.s.w(<4 x i32> %0, <4 x i32> %1)
857 store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_s_w_RES
861 declare <4 x i32> @llvm.mips.subs.s.w(<4 x i32>, <4 x i32>) nounwind
863 ; CHECK: llvm_mips_subs_s_w_test:
864 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG1)
865 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG2)
866 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
867 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
868 ; CHECK-DAG: subs_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
869 ; CHECK-DAG: st.w [[WD]]
870 ; CHECK: .size llvm_mips_subs_s_w_test
872 @llvm_mips_subs_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
873 @llvm_mips_subs_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
874 @llvm_mips_subs_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
876 define void @llvm_mips_subs_s_d_test() nounwind {
878 %0 = load <2 x i64>* @llvm_mips_subs_s_d_ARG1
879 %1 = load <2 x i64>* @llvm_mips_subs_s_d_ARG2
880 %2 = tail call <2 x i64> @llvm.mips.subs.s.d(<2 x i64> %0, <2 x i64> %1)
881 store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_s_d_RES
885 declare <2 x i64> @llvm.mips.subs.s.d(<2 x i64>, <2 x i64>) nounwind
887 ; CHECK: llvm_mips_subs_s_d_test:
888 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG1)
889 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG2)
890 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
891 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
892 ; CHECK-DAG: subs_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
893 ; CHECK-DAG: st.d [[WD]]
894 ; CHECK: .size llvm_mips_subs_s_d_test
896 @llvm_mips_subs_u_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
897 @llvm_mips_subs_u_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
898 @llvm_mips_subs_u_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
900 define void @llvm_mips_subs_u_b_test() nounwind {
902 %0 = load <16 x i8>* @llvm_mips_subs_u_b_ARG1
903 %1 = load <16 x i8>* @llvm_mips_subs_u_b_ARG2
904 %2 = tail call <16 x i8> @llvm.mips.subs.u.b(<16 x i8> %0, <16 x i8> %1)
905 store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_u_b_RES
909 declare <16 x i8> @llvm.mips.subs.u.b(<16 x i8>, <16 x i8>) nounwind
911 ; CHECK: llvm_mips_subs_u_b_test:
912 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG1)
913 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG2)
914 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
915 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
916 ; CHECK-DAG: subs_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
917 ; CHECK-DAG: st.b [[WD]]
918 ; CHECK: .size llvm_mips_subs_u_b_test
920 @llvm_mips_subs_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
921 @llvm_mips_subs_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
922 @llvm_mips_subs_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
924 define void @llvm_mips_subs_u_h_test() nounwind {
926 %0 = load <8 x i16>* @llvm_mips_subs_u_h_ARG1
927 %1 = load <8 x i16>* @llvm_mips_subs_u_h_ARG2
928 %2 = tail call <8 x i16> @llvm.mips.subs.u.h(<8 x i16> %0, <8 x i16> %1)
929 store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_u_h_RES
933 declare <8 x i16> @llvm.mips.subs.u.h(<8 x i16>, <8 x i16>) nounwind
935 ; CHECK: llvm_mips_subs_u_h_test:
936 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG1)
937 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG2)
938 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
939 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
940 ; CHECK-DAG: subs_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
941 ; CHECK-DAG: st.h [[WD]]
942 ; CHECK: .size llvm_mips_subs_u_h_test
944 @llvm_mips_subs_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
945 @llvm_mips_subs_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
946 @llvm_mips_subs_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
948 define void @llvm_mips_subs_u_w_test() nounwind {
950 %0 = load <4 x i32>* @llvm_mips_subs_u_w_ARG1
951 %1 = load <4 x i32>* @llvm_mips_subs_u_w_ARG2
952 %2 = tail call <4 x i32> @llvm.mips.subs.u.w(<4 x i32> %0, <4 x i32> %1)
953 store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_u_w_RES
957 declare <4 x i32> @llvm.mips.subs.u.w(<4 x i32>, <4 x i32>) nounwind
959 ; CHECK: llvm_mips_subs_u_w_test:
960 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG1)
961 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG2)
962 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
963 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
964 ; CHECK-DAG: subs_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
965 ; CHECK-DAG: st.w [[WD]]
966 ; CHECK: .size llvm_mips_subs_u_w_test
968 @llvm_mips_subs_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
969 @llvm_mips_subs_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
970 @llvm_mips_subs_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
972 define void @llvm_mips_subs_u_d_test() nounwind {
974 %0 = load <2 x i64>* @llvm_mips_subs_u_d_ARG1
975 %1 = load <2 x i64>* @llvm_mips_subs_u_d_ARG2
976 %2 = tail call <2 x i64> @llvm.mips.subs.u.d(<2 x i64> %0, <2 x i64> %1)
977 store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_u_d_RES
981 declare <2 x i64> @llvm.mips.subs.u.d(<2 x i64>, <2 x i64>) nounwind
983 ; CHECK: llvm_mips_subs_u_d_test:
984 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG1)
985 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG2)
986 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
987 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
988 ; CHECK-DAG: subs_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
989 ; CHECK-DAG: st.d [[WD]]
990 ; CHECK: .size llvm_mips_subs_u_d_test
992 @llvm_mips_subsus_u_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
993 @llvm_mips_subsus_u_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
994 @llvm_mips_subsus_u_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
996 define void @llvm_mips_subsus_u_b_test() nounwind {
998 %0 = load <16 x i8>* @llvm_mips_subsus_u_b_ARG1
999 %1 = load <16 x i8>* @llvm_mips_subsus_u_b_ARG2
1000 %2 = tail call <16 x i8> @llvm.mips.subsus.u.b(<16 x i8> %0, <16 x i8> %1)
1001 store <16 x i8> %2, <16 x i8>* @llvm_mips_subsus_u_b_RES
1005 declare <16 x i8> @llvm.mips.subsus.u.b(<16 x i8>, <16 x i8>) nounwind
1007 ; CHECK: llvm_mips_subsus_u_b_test:
1008 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG1)
1009 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG2)
1010 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1011 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1012 ; CHECK-DAG: subsus_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1013 ; CHECK-DAG: st.b [[WD]]
1014 ; CHECK: .size llvm_mips_subsus_u_b_test
1016 @llvm_mips_subsus_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1017 @llvm_mips_subsus_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1018 @llvm_mips_subsus_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1020 define void @llvm_mips_subsus_u_h_test() nounwind {
1022 %0 = load <8 x i16>* @llvm_mips_subsus_u_h_ARG1
1023 %1 = load <8 x i16>* @llvm_mips_subsus_u_h_ARG2
1024 %2 = tail call <8 x i16> @llvm.mips.subsus.u.h(<8 x i16> %0, <8 x i16> %1)
1025 store <8 x i16> %2, <8 x i16>* @llvm_mips_subsus_u_h_RES
1029 declare <8 x i16> @llvm.mips.subsus.u.h(<8 x i16>, <8 x i16>) nounwind
1031 ; CHECK: llvm_mips_subsus_u_h_test:
1032 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG1)
1033 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG2)
1034 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1035 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1036 ; CHECK-DAG: subsus_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1037 ; CHECK-DAG: st.h [[WD]]
1038 ; CHECK: .size llvm_mips_subsus_u_h_test
1040 @llvm_mips_subsus_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1041 @llvm_mips_subsus_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1042 @llvm_mips_subsus_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1044 define void @llvm_mips_subsus_u_w_test() nounwind {
1046 %0 = load <4 x i32>* @llvm_mips_subsus_u_w_ARG1
1047 %1 = load <4 x i32>* @llvm_mips_subsus_u_w_ARG2
1048 %2 = tail call <4 x i32> @llvm.mips.subsus.u.w(<4 x i32> %0, <4 x i32> %1)
1049 store <4 x i32> %2, <4 x i32>* @llvm_mips_subsus_u_w_RES
1053 declare <4 x i32> @llvm.mips.subsus.u.w(<4 x i32>, <4 x i32>) nounwind
1055 ; CHECK: llvm_mips_subsus_u_w_test:
1056 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG1)
1057 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG2)
1058 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1059 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1060 ; CHECK-DAG: subsus_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1061 ; CHECK-DAG: st.w [[WD]]
1062 ; CHECK: .size llvm_mips_subsus_u_w_test
1064 @llvm_mips_subsus_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1065 @llvm_mips_subsus_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1066 @llvm_mips_subsus_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
1068 define void @llvm_mips_subsus_u_d_test() nounwind {
1070 %0 = load <2 x i64>* @llvm_mips_subsus_u_d_ARG1
1071 %1 = load <2 x i64>* @llvm_mips_subsus_u_d_ARG2
1072 %2 = tail call <2 x i64> @llvm.mips.subsus.u.d(<2 x i64> %0, <2 x i64> %1)
1073 store <2 x i64> %2, <2 x i64>* @llvm_mips_subsus_u_d_RES
1077 declare <2 x i64> @llvm.mips.subsus.u.d(<2 x i64>, <2 x i64>) nounwind
1079 ; CHECK: llvm_mips_subsus_u_d_test:
1080 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG1)
1081 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG2)
1082 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1083 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1084 ; CHECK-DAG: subsus_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1085 ; CHECK-DAG: st.d [[WD]]
1086 ; CHECK: .size llvm_mips_subsus_u_d_test
1088 @llvm_mips_subsuu_s_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
1089 @llvm_mips_subsuu_s_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
1090 @llvm_mips_subsuu_s_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
1092 define void @llvm_mips_subsuu_s_b_test() nounwind {
1094 %0 = load <16 x i8>* @llvm_mips_subsuu_s_b_ARG1
1095 %1 = load <16 x i8>* @llvm_mips_subsuu_s_b_ARG2
1096 %2 = tail call <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8> %0, <16 x i8> %1)
1097 store <16 x i8> %2, <16 x i8>* @llvm_mips_subsuu_s_b_RES
1101 declare <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8>, <16 x i8>) nounwind
1103 ; CHECK: llvm_mips_subsuu_s_b_test:
1104 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG1)
1105 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG2)
1106 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1107 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1108 ; CHECK-DAG: subsuu_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1109 ; CHECK-DAG: st.b [[WD]]
1110 ; CHECK: .size llvm_mips_subsuu_s_b_test
1112 @llvm_mips_subsuu_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1113 @llvm_mips_subsuu_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1114 @llvm_mips_subsuu_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1116 define void @llvm_mips_subsuu_s_h_test() nounwind {
1118 %0 = load <8 x i16>* @llvm_mips_subsuu_s_h_ARG1
1119 %1 = load <8 x i16>* @llvm_mips_subsuu_s_h_ARG2
1120 %2 = tail call <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16> %0, <8 x i16> %1)
1121 store <8 x i16> %2, <8 x i16>* @llvm_mips_subsuu_s_h_RES
1125 declare <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16>, <8 x i16>) nounwind
1127 ; CHECK: llvm_mips_subsuu_s_h_test:
1128 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG1)
1129 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG2)
1130 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1131 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1132 ; CHECK-DAG: subsuu_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1133 ; CHECK-DAG: st.h [[WD]]
1134 ; CHECK: .size llvm_mips_subsuu_s_h_test
1136 @llvm_mips_subsuu_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1137 @llvm_mips_subsuu_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1138 @llvm_mips_subsuu_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1140 define void @llvm_mips_subsuu_s_w_test() nounwind {
1142 %0 = load <4 x i32>* @llvm_mips_subsuu_s_w_ARG1
1143 %1 = load <4 x i32>* @llvm_mips_subsuu_s_w_ARG2
1144 %2 = tail call <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32> %0, <4 x i32> %1)
1145 store <4 x i32> %2, <4 x i32>* @llvm_mips_subsuu_s_w_RES
1149 declare <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32>, <4 x i32>) nounwind
1151 ; CHECK: llvm_mips_subsuu_s_w_test:
1152 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG1)
1153 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG2)
1154 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1155 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1156 ; CHECK-DAG: subsuu_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1157 ; CHECK-DAG: st.w [[WD]]
1158 ; CHECK: .size llvm_mips_subsuu_s_w_test
1160 @llvm_mips_subsuu_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1161 @llvm_mips_subsuu_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1162 @llvm_mips_subsuu_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
1164 define void @llvm_mips_subsuu_s_d_test() nounwind {
1166 %0 = load <2 x i64>* @llvm_mips_subsuu_s_d_ARG1
1167 %1 = load <2 x i64>* @llvm_mips_subsuu_s_d_ARG2
1168 %2 = tail call <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64> %0, <2 x i64> %1)
1169 store <2 x i64> %2, <2 x i64>* @llvm_mips_subsuu_s_d_RES
1173 declare <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64>, <2 x i64>) nounwind
1175 ; CHECK: llvm_mips_subsuu_s_d_test:
1176 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG1)
1177 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG2)
1178 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1179 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1180 ; CHECK-DAG: subsuu_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1181 ; CHECK-DAG: st.d [[WD]]
1182 ; CHECK: .size llvm_mips_subsuu_s_d_test
1184 @llvm_mips_subv_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
1185 @llvm_mips_subv_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16
1186 @llvm_mips_subv_b_RES = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
1188 define void @llvm_mips_subv_b_test() nounwind {
1190 %0 = load <16 x i8>* @llvm_mips_subv_b_ARG1
1191 %1 = load <16 x i8>* @llvm_mips_subv_b_ARG2
1192 %2 = tail call <16 x i8> @llvm.mips.subv.b(<16 x i8> %0, <16 x i8> %1)
1193 store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES
1197 declare <16 x i8> @llvm.mips.subv.b(<16 x i8>, <16 x i8>) nounwind
1199 ; CHECK: llvm_mips_subv_b_test:
1200 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1)
1201 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2)
1202 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1203 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1204 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1205 ; CHECK-DAG: st.b [[WD]]
1206 ; CHECK: .size llvm_mips_subv_b_test
1208 @llvm_mips_subv_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
1209 @llvm_mips_subv_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16
1210 @llvm_mips_subv_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
1212 define void @llvm_mips_subv_h_test() nounwind {
1214 %0 = load <8 x i16>* @llvm_mips_subv_h_ARG1
1215 %1 = load <8 x i16>* @llvm_mips_subv_h_ARG2
1216 %2 = tail call <8 x i16> @llvm.mips.subv.h(<8 x i16> %0, <8 x i16> %1)
1217 store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES
1221 declare <8 x i16> @llvm.mips.subv.h(<8 x i16>, <8 x i16>) nounwind
1223 ; CHECK: llvm_mips_subv_h_test:
1224 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1)
1225 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2)
1226 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1227 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1228 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1229 ; CHECK-DAG: st.h [[WD]]
1230 ; CHECK: .size llvm_mips_subv_h_test
1232 @llvm_mips_subv_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
1233 @llvm_mips_subv_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16
1234 @llvm_mips_subv_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
1236 define void @llvm_mips_subv_w_test() nounwind {
1238 %0 = load <4 x i32>* @llvm_mips_subv_w_ARG1
1239 %1 = load <4 x i32>* @llvm_mips_subv_w_ARG2
1240 %2 = tail call <4 x i32> @llvm.mips.subv.w(<4 x i32> %0, <4 x i32> %1)
1241 store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES
1245 declare <4 x i32> @llvm.mips.subv.w(<4 x i32>, <4 x i32>) nounwind
1247 ; CHECK: llvm_mips_subv_w_test:
1248 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1)
1249 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2)
1250 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1251 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1252 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1253 ; CHECK-DAG: st.w [[WD]]
1254 ; CHECK: .size llvm_mips_subv_w_test
1256 @llvm_mips_subv_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
1257 @llvm_mips_subv_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16
1258 @llvm_mips_subv_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
1260 define void @llvm_mips_subv_d_test() nounwind {
1262 %0 = load <2 x i64>* @llvm_mips_subv_d_ARG1
1263 %1 = load <2 x i64>* @llvm_mips_subv_d_ARG2
1264 %2 = tail call <2 x i64> @llvm.mips.subv.d(<2 x i64> %0, <2 x i64> %1)
1265 store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES
1269 declare <2 x i64> @llvm.mips.subv.d(<2 x i64>, <2 x i64>) nounwind
1271 ; CHECK: llvm_mips_subv_d_test:
1272 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1)
1273 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2)
1274 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1275 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1276 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1277 ; CHECK-DAG: st.d [[WD]]
1278 ; CHECK: .size llvm_mips_subv_d_test
1281 define void @subv_b_test() nounwind {
1283 %0 = load <16 x i8>* @llvm_mips_subv_b_ARG1
1284 %1 = load <16 x i8>* @llvm_mips_subv_b_ARG2
1285 %2 = sub <16 x i8> %0, %1
1286 store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES
1290 ; CHECK: subv_b_test:
1291 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1)
1292 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2)
1293 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]])
1294 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]])
1295 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1296 ; CHECK-DAG: st.b [[WD]]
1297 ; CHECK: .size subv_b_test
1299 define void @subv_h_test() nounwind {
1301 %0 = load <8 x i16>* @llvm_mips_subv_h_ARG1
1302 %1 = load <8 x i16>* @llvm_mips_subv_h_ARG2
1303 %2 = sub <8 x i16> %0, %1
1304 store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES
1308 ; CHECK: subv_h_test:
1309 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1)
1310 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2)
1311 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]])
1312 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]])
1313 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1314 ; CHECK-DAG: st.h [[WD]]
1315 ; CHECK: .size subv_h_test
1317 define void @subv_w_test() nounwind {
1319 %0 = load <4 x i32>* @llvm_mips_subv_w_ARG1
1320 %1 = load <4 x i32>* @llvm_mips_subv_w_ARG2
1321 %2 = sub <4 x i32> %0, %1
1322 store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES
1326 ; CHECK: subv_w_test:
1327 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1)
1328 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2)
1329 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]])
1330 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]])
1331 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1332 ; CHECK-DAG: st.w [[WD]]
1333 ; CHECK: .size subv_w_test
1335 define void @subv_d_test() nounwind {
1337 %0 = load <2 x i64>* @llvm_mips_subv_d_ARG1
1338 %1 = load <2 x i64>* @llvm_mips_subv_d_ARG2
1339 %2 = sub <2 x i64> %0, %1
1340 store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES
1344 ; CHECK: subv_d_test:
1345 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1)
1346 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2)
1347 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]])
1348 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]])
1349 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]]
1350 ; CHECK-DAG: st.d [[WD]]
1351 ; CHECK: .size subv_d_test