blob: e9ebee40adcf32d2a01fc8f80d2f308e3c4a6955 [file] [log] [blame]
Daniel Sanders2d999eb2013-08-28 10:02:29 +00001; Test the MSA intrinsics that are encoded with the I5 instruction format.
2; There are lots of these so this covers those beginning with 'c'
3
Jack Carterbabdcc82013-08-15 12:24:57 +00004; RUN: llc -march=mips -mattr=+msa < %s | FileCheck %s
5
6@llvm_mips_ceqi_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_ceqi_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
8
9define void @llvm_mips_ceqi_b_test() nounwind {
10entry:
11 %0 = load <16 x i8>* @llvm_mips_ceqi_b_ARG1
12 %1 = tail call <16 x i8> @llvm.mips.ceqi.b(<16 x i8> %0, i32 14)
13 store <16 x i8> %1, <16 x i8>* @llvm_mips_ceqi_b_RES
14 ret void
15}
16
17declare <16 x i8> @llvm.mips.ceqi.b(<16 x i8>, i32) nounwind
18
19; CHECK: llvm_mips_ceqi_b_test:
20; CHECK: ld.b
21; CHECK: ceqi.b
22; CHECK: st.b
23; CHECK: .size llvm_mips_ceqi_b_test
24;
25@llvm_mips_ceqi_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
26@llvm_mips_ceqi_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
27
28define void @llvm_mips_ceqi_h_test() nounwind {
29entry:
30 %0 = load <8 x i16>* @llvm_mips_ceqi_h_ARG1
31 %1 = tail call <8 x i16> @llvm.mips.ceqi.h(<8 x i16> %0, i32 14)
32 store <8 x i16> %1, <8 x i16>* @llvm_mips_ceqi_h_RES
33 ret void
34}
35
36declare <8 x i16> @llvm.mips.ceqi.h(<8 x i16>, i32) nounwind
37
38; CHECK: llvm_mips_ceqi_h_test:
39; CHECK: ld.h
40; CHECK: ceqi.h
41; CHECK: st.h
42; CHECK: .size llvm_mips_ceqi_h_test
43;
44@llvm_mips_ceqi_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
45@llvm_mips_ceqi_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
46
47define void @llvm_mips_ceqi_w_test() nounwind {
48entry:
49 %0 = load <4 x i32>* @llvm_mips_ceqi_w_ARG1
50 %1 = tail call <4 x i32> @llvm.mips.ceqi.w(<4 x i32> %0, i32 14)
51 store <4 x i32> %1, <4 x i32>* @llvm_mips_ceqi_w_RES
52 ret void
53}
54
55declare <4 x i32> @llvm.mips.ceqi.w(<4 x i32>, i32) nounwind
56
57; CHECK: llvm_mips_ceqi_w_test:
58; CHECK: ld.w
59; CHECK: ceqi.w
60; CHECK: st.w
61; CHECK: .size llvm_mips_ceqi_w_test
62;
63@llvm_mips_ceqi_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
64@llvm_mips_ceqi_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
65
66define void @llvm_mips_ceqi_d_test() nounwind {
67entry:
68 %0 = load <2 x i64>* @llvm_mips_ceqi_d_ARG1
69 %1 = tail call <2 x i64> @llvm.mips.ceqi.d(<2 x i64> %0, i32 14)
70 store <2 x i64> %1, <2 x i64>* @llvm_mips_ceqi_d_RES
71 ret void
72}
73
74declare <2 x i64> @llvm.mips.ceqi.d(<2 x i64>, i32) nounwind
75
76; CHECK: llvm_mips_ceqi_d_test:
77; CHECK: ld.d
78; CHECK: ceqi.d
79; CHECK: st.d
80; CHECK: .size llvm_mips_ceqi_d_test
81;
82@llvm_mips_clei_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
83@llvm_mips_clei_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
84
85define void @llvm_mips_clei_s_b_test() nounwind {
86entry:
87 %0 = load <16 x i8>* @llvm_mips_clei_s_b_ARG1
88 %1 = tail call <16 x i8> @llvm.mips.clei.s.b(<16 x i8> %0, i32 14)
89 store <16 x i8> %1, <16 x i8>* @llvm_mips_clei_s_b_RES
90 ret void
91}
92
93declare <16 x i8> @llvm.mips.clei.s.b(<16 x i8>, i32) nounwind
94
95; CHECK: llvm_mips_clei_s_b_test:
96; CHECK: ld.b
97; CHECK: clei_s.b
98; CHECK: st.b
99; CHECK: .size llvm_mips_clei_s_b_test
100;
101@llvm_mips_clei_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
102@llvm_mips_clei_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
103
104define void @llvm_mips_clei_s_h_test() nounwind {
105entry:
106 %0 = load <8 x i16>* @llvm_mips_clei_s_h_ARG1
107 %1 = tail call <8 x i16> @llvm.mips.clei.s.h(<8 x i16> %0, i32 14)
108 store <8 x i16> %1, <8 x i16>* @llvm_mips_clei_s_h_RES
109 ret void
110}
111
112declare <8 x i16> @llvm.mips.clei.s.h(<8 x i16>, i32) nounwind
113
114; CHECK: llvm_mips_clei_s_h_test:
115; CHECK: ld.h
116; CHECK: clei_s.h
117; CHECK: st.h
118; CHECK: .size llvm_mips_clei_s_h_test
119;
120@llvm_mips_clei_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
121@llvm_mips_clei_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
122
123define void @llvm_mips_clei_s_w_test() nounwind {
124entry:
125 %0 = load <4 x i32>* @llvm_mips_clei_s_w_ARG1
126 %1 = tail call <4 x i32> @llvm.mips.clei.s.w(<4 x i32> %0, i32 14)
127 store <4 x i32> %1, <4 x i32>* @llvm_mips_clei_s_w_RES
128 ret void
129}
130
131declare <4 x i32> @llvm.mips.clei.s.w(<4 x i32>, i32) nounwind
132
133; CHECK: llvm_mips_clei_s_w_test:
134; CHECK: ld.w
135; CHECK: clei_s.w
136; CHECK: st.w
137; CHECK: .size llvm_mips_clei_s_w_test
138;
139@llvm_mips_clei_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
140@llvm_mips_clei_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
141
142define void @llvm_mips_clei_s_d_test() nounwind {
143entry:
144 %0 = load <2 x i64>* @llvm_mips_clei_s_d_ARG1
145 %1 = tail call <2 x i64> @llvm.mips.clei.s.d(<2 x i64> %0, i32 14)
146 store <2 x i64> %1, <2 x i64>* @llvm_mips_clei_s_d_RES
147 ret void
148}
149
150declare <2 x i64> @llvm.mips.clei.s.d(<2 x i64>, i32) nounwind
151
152; CHECK: llvm_mips_clei_s_d_test:
153; CHECK: ld.d
154; CHECK: clei_s.d
155; CHECK: st.d
156; CHECK: .size llvm_mips_clei_s_d_test
157;
158@llvm_mips_clei_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
159@llvm_mips_clei_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
160
161define void @llvm_mips_clei_u_b_test() nounwind {
162entry:
163 %0 = load <16 x i8>* @llvm_mips_clei_u_b_ARG1
164 %1 = tail call <16 x i8> @llvm.mips.clei.u.b(<16 x i8> %0, i32 14)
165 store <16 x i8> %1, <16 x i8>* @llvm_mips_clei_u_b_RES
166 ret void
167}
168
169declare <16 x i8> @llvm.mips.clei.u.b(<16 x i8>, i32) nounwind
170
171; CHECK: llvm_mips_clei_u_b_test:
172; CHECK: ld.b
173; CHECK: clei_u.b
174; CHECK: st.b
175; CHECK: .size llvm_mips_clei_u_b_test
176;
177@llvm_mips_clei_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
178@llvm_mips_clei_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
179
180define void @llvm_mips_clei_u_h_test() nounwind {
181entry:
182 %0 = load <8 x i16>* @llvm_mips_clei_u_h_ARG1
183 %1 = tail call <8 x i16> @llvm.mips.clei.u.h(<8 x i16> %0, i32 14)
184 store <8 x i16> %1, <8 x i16>* @llvm_mips_clei_u_h_RES
185 ret void
186}
187
188declare <8 x i16> @llvm.mips.clei.u.h(<8 x i16>, i32) nounwind
189
190; CHECK: llvm_mips_clei_u_h_test:
191; CHECK: ld.h
192; CHECK: clei_u.h
193; CHECK: st.h
194; CHECK: .size llvm_mips_clei_u_h_test
195;
196@llvm_mips_clei_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
197@llvm_mips_clei_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
198
199define void @llvm_mips_clei_u_w_test() nounwind {
200entry:
201 %0 = load <4 x i32>* @llvm_mips_clei_u_w_ARG1
202 %1 = tail call <4 x i32> @llvm.mips.clei.u.w(<4 x i32> %0, i32 14)
203 store <4 x i32> %1, <4 x i32>* @llvm_mips_clei_u_w_RES
204 ret void
205}
206
207declare <4 x i32> @llvm.mips.clei.u.w(<4 x i32>, i32) nounwind
208
209; CHECK: llvm_mips_clei_u_w_test:
210; CHECK: ld.w
211; CHECK: clei_u.w
212; CHECK: st.w
213; CHECK: .size llvm_mips_clei_u_w_test
214;
215@llvm_mips_clei_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
216@llvm_mips_clei_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
217
218define void @llvm_mips_clei_u_d_test() nounwind {
219entry:
220 %0 = load <2 x i64>* @llvm_mips_clei_u_d_ARG1
221 %1 = tail call <2 x i64> @llvm.mips.clei.u.d(<2 x i64> %0, i32 14)
222 store <2 x i64> %1, <2 x i64>* @llvm_mips_clei_u_d_RES
223 ret void
224}
225
226declare <2 x i64> @llvm.mips.clei.u.d(<2 x i64>, i32) nounwind
227
228; CHECK: llvm_mips_clei_u_d_test:
229; CHECK: ld.d
230; CHECK: clei_u.d
231; CHECK: st.d
232; CHECK: .size llvm_mips_clei_u_d_test
233;
234@llvm_mips_clti_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
235@llvm_mips_clti_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
236
237define void @llvm_mips_clti_s_b_test() nounwind {
238entry:
239 %0 = load <16 x i8>* @llvm_mips_clti_s_b_ARG1
240 %1 = tail call <16 x i8> @llvm.mips.clti.s.b(<16 x i8> %0, i32 14)
241 store <16 x i8> %1, <16 x i8>* @llvm_mips_clti_s_b_RES
242 ret void
243}
244
245declare <16 x i8> @llvm.mips.clti.s.b(<16 x i8>, i32) nounwind
246
247; CHECK: llvm_mips_clti_s_b_test:
248; CHECK: ld.b
249; CHECK: clti_s.b
250; CHECK: st.b
251; CHECK: .size llvm_mips_clti_s_b_test
252;
253@llvm_mips_clti_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
254@llvm_mips_clti_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
255
256define void @llvm_mips_clti_s_h_test() nounwind {
257entry:
258 %0 = load <8 x i16>* @llvm_mips_clti_s_h_ARG1
259 %1 = tail call <8 x i16> @llvm.mips.clti.s.h(<8 x i16> %0, i32 14)
260 store <8 x i16> %1, <8 x i16>* @llvm_mips_clti_s_h_RES
261 ret void
262}
263
264declare <8 x i16> @llvm.mips.clti.s.h(<8 x i16>, i32) nounwind
265
266; CHECK: llvm_mips_clti_s_h_test:
267; CHECK: ld.h
268; CHECK: clti_s.h
269; CHECK: st.h
270; CHECK: .size llvm_mips_clti_s_h_test
271;
272@llvm_mips_clti_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
273@llvm_mips_clti_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
274
275define void @llvm_mips_clti_s_w_test() nounwind {
276entry:
277 %0 = load <4 x i32>* @llvm_mips_clti_s_w_ARG1
278 %1 = tail call <4 x i32> @llvm.mips.clti.s.w(<4 x i32> %0, i32 14)
279 store <4 x i32> %1, <4 x i32>* @llvm_mips_clti_s_w_RES
280 ret void
281}
282
283declare <4 x i32> @llvm.mips.clti.s.w(<4 x i32>, i32) nounwind
284
285; CHECK: llvm_mips_clti_s_w_test:
286; CHECK: ld.w
287; CHECK: clti_s.w
288; CHECK: st.w
289; CHECK: .size llvm_mips_clti_s_w_test
290;
291@llvm_mips_clti_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
292@llvm_mips_clti_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
293
294define void @llvm_mips_clti_s_d_test() nounwind {
295entry:
296 %0 = load <2 x i64>* @llvm_mips_clti_s_d_ARG1
297 %1 = tail call <2 x i64> @llvm.mips.clti.s.d(<2 x i64> %0, i32 14)
298 store <2 x i64> %1, <2 x i64>* @llvm_mips_clti_s_d_RES
299 ret void
300}
301
302declare <2 x i64> @llvm.mips.clti.s.d(<2 x i64>, i32) nounwind
303
304; CHECK: llvm_mips_clti_s_d_test:
305; CHECK: ld.d
306; CHECK: clti_s.d
307; CHECK: st.d
308; CHECK: .size llvm_mips_clti_s_d_test
309;
310@llvm_mips_clti_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
311@llvm_mips_clti_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
312
313define void @llvm_mips_clti_u_b_test() nounwind {
314entry:
315 %0 = load <16 x i8>* @llvm_mips_clti_u_b_ARG1
316 %1 = tail call <16 x i8> @llvm.mips.clti.u.b(<16 x i8> %0, i32 14)
317 store <16 x i8> %1, <16 x i8>* @llvm_mips_clti_u_b_RES
318 ret void
319}
320
321declare <16 x i8> @llvm.mips.clti.u.b(<16 x i8>, i32) nounwind
322
323; CHECK: llvm_mips_clti_u_b_test:
324; CHECK: ld.b
325; CHECK: clti_u.b
326; CHECK: st.b
327; CHECK: .size llvm_mips_clti_u_b_test
328;
329@llvm_mips_clti_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
330@llvm_mips_clti_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
331
332define void @llvm_mips_clti_u_h_test() nounwind {
333entry:
334 %0 = load <8 x i16>* @llvm_mips_clti_u_h_ARG1
335 %1 = tail call <8 x i16> @llvm.mips.clti.u.h(<8 x i16> %0, i32 14)
336 store <8 x i16> %1, <8 x i16>* @llvm_mips_clti_u_h_RES
337 ret void
338}
339
340declare <8 x i16> @llvm.mips.clti.u.h(<8 x i16>, i32) nounwind
341
342; CHECK: llvm_mips_clti_u_h_test:
343; CHECK: ld.h
344; CHECK: clti_u.h
345; CHECK: st.h
346; CHECK: .size llvm_mips_clti_u_h_test
347;
348@llvm_mips_clti_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
349@llvm_mips_clti_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
350
351define void @llvm_mips_clti_u_w_test() nounwind {
352entry:
353 %0 = load <4 x i32>* @llvm_mips_clti_u_w_ARG1
354 %1 = tail call <4 x i32> @llvm.mips.clti.u.w(<4 x i32> %0, i32 14)
355 store <4 x i32> %1, <4 x i32>* @llvm_mips_clti_u_w_RES
356 ret void
357}
358
359declare <4 x i32> @llvm.mips.clti.u.w(<4 x i32>, i32) nounwind
360
361; CHECK: llvm_mips_clti_u_w_test:
362; CHECK: ld.w
363; CHECK: clti_u.w
364; CHECK: st.w
365; CHECK: .size llvm_mips_clti_u_w_test
366;
367@llvm_mips_clti_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
368@llvm_mips_clti_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16
369
370define void @llvm_mips_clti_u_d_test() nounwind {
371entry:
372 %0 = load <2 x i64>* @llvm_mips_clti_u_d_ARG1
373 %1 = tail call <2 x i64> @llvm.mips.clti.u.d(<2 x i64> %0, i32 14)
374 store <2 x i64> %1, <2 x i64>* @llvm_mips_clti_u_d_RES
375 ret void
376}
377
378declare <2 x i64> @llvm.mips.clti.u.d(<2 x i64>, i32) nounwind
379
380; CHECK: llvm_mips_clti_u_d_test:
381; CHECK: ld.d
382; CHECK: clti_u.d
383; CHECK: st.d
384; CHECK: .size llvm_mips_clti_u_d_test
385;