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