blob: 3566ad040ebb89ae5703d160e7711e8155cf06b5 [file] [log] [blame]
Akira Hatanaka2df483e2012-09-27 02:11:20 +00001; RUN: llc -march=mipsel -mattr=+dspr2 < %s | FileCheck %s
2
3define i64 @test__builtin_mips_dpa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
4entry:
5; CHECK: dpa.w.ph
6
7 %1 = bitcast i32 %a1.coerce to <2 x i16>
8 %2 = bitcast i32 %a2.coerce to <2 x i16>
9 %3 = tail call i64 @llvm.mips.dpa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
10 ret i64 %3
11}
12
13declare i64 @llvm.mips.dpa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
14
15define i64 @test__builtin_mips_dps_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
16entry:
17; CHECK: dps.w.ph
18
19 %1 = bitcast i32 %a1.coerce to <2 x i16>
20 %2 = bitcast i32 %a2.coerce to <2 x i16>
21 %3 = tail call i64 @llvm.mips.dps.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
22 ret i64 %3
23}
24
25declare i64 @llvm.mips.dps.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
26
27define i64 @test__builtin_mips_mulsa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
28entry:
29; CHECK: mulsa.w.ph
30
31 %1 = bitcast i32 %a1.coerce to <2 x i16>
32 %2 = bitcast i32 %a2.coerce to <2 x i16>
33 %3 = tail call i64 @llvm.mips.mulsa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
34 ret i64 %3
35}
36
37declare i64 @llvm.mips.mulsa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
38
39define i64 @test__builtin_mips_dpax_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
40entry:
41; CHECK: dpax.w.ph
42
43 %1 = bitcast i32 %a1.coerce to <2 x i16>
44 %2 = bitcast i32 %a2.coerce to <2 x i16>
45 %3 = tail call i64 @llvm.mips.dpax.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
46 ret i64 %3
47}
48
49declare i64 @llvm.mips.dpax.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
50
51define i64 @test__builtin_mips_dpsx_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
52entry:
53; CHECK: dpsx.w.ph
54
55 %1 = bitcast i32 %a1.coerce to <2 x i16>
56 %2 = bitcast i32 %a2.coerce to <2 x i16>
57 %3 = tail call i64 @llvm.mips.dpsx.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
58 ret i64 %3
59}
60
61declare i64 @llvm.mips.dpsx.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
62
63define i64 @test__builtin_mips_dpaqx_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
64entry:
65; CHECK: dpaqx_s.w.ph
66
67 %1 = bitcast i32 %a1.coerce to <2 x i16>
68 %2 = bitcast i32 %a2.coerce to <2 x i16>
69 %3 = tail call i64 @llvm.mips.dpaqx.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
70 ret i64 %3
71}
72
73declare i64 @llvm.mips.dpaqx.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
74
75define i64 @test__builtin_mips_dpaqx_sa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
76entry:
77; CHECK: dpaqx_sa.w.ph
78
79 %1 = bitcast i32 %a1.coerce to <2 x i16>
80 %2 = bitcast i32 %a2.coerce to <2 x i16>
81 %3 = tail call i64 @llvm.mips.dpaqx.sa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
82 ret i64 %3
83}
84
85declare i64 @llvm.mips.dpaqx.sa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
86
87define i64 @test__builtin_mips_dpsqx_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
88entry:
89; CHECK: dpsqx_s.w.ph
90
91 %1 = bitcast i32 %a1.coerce to <2 x i16>
92 %2 = bitcast i32 %a2.coerce to <2 x i16>
93 %3 = tail call i64 @llvm.mips.dpsqx.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
94 ret i64 %3
95}
96
97declare i64 @llvm.mips.dpsqx.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
98
99define i64 @test__builtin_mips_dpsqx_sa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
100entry:
101; CHECK: dpsqx_sa.w.ph
102
103 %1 = bitcast i32 %a1.coerce to <2 x i16>
104 %2 = bitcast i32 %a2.coerce to <2 x i16>
105 %3 = tail call i64 @llvm.mips.dpsqx.sa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
106 ret i64 %3
107}
108
109declare i64 @llvm.mips.dpsqx.sa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
Akira Hatanakaa2164012012-09-27 03:13:59 +0000110
111define { i32 } @test__builtin_mips_addu_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
112entry:
113; CHECK: addu.ph
114
115 %0 = bitcast i32 %a0.coerce to <2 x i16>
116 %1 = bitcast i32 %a1.coerce to <2 x i16>
117 %2 = tail call <2 x i16> @llvm.mips.addu.ph(<2 x i16> %0, <2 x i16> %1)
118 %3 = bitcast <2 x i16> %2 to i32
119 %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
120 ret { i32 } %.fca.0.insert
121}
122
123declare <2 x i16> @llvm.mips.addu.ph(<2 x i16>, <2 x i16>) nounwind
124
125define { i32 } @test__builtin_mips_addu_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
126entry:
127; CHECK: addu_s.ph
128
129 %0 = bitcast i32 %a0.coerce to <2 x i16>
130 %1 = bitcast i32 %a1.coerce to <2 x i16>
131 %2 = tail call <2 x i16> @llvm.mips.addu.s.ph(<2 x i16> %0, <2 x i16> %1)
132 %3 = bitcast <2 x i16> %2 to i32
133 %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
134 ret { i32 } %.fca.0.insert
135}
136
137declare <2 x i16> @llvm.mips.addu.s.ph(<2 x i16>, <2 x i16>) nounwind
138
139define { i32 } @test__builtin_mips_mulq_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
140entry:
141; CHECK: mulq_s.ph
142
143 %0 = bitcast i32 %a0.coerce to <2 x i16>
144 %1 = bitcast i32 %a1.coerce to <2 x i16>
145 %2 = tail call <2 x i16> @llvm.mips.mulq.s.ph(<2 x i16> %0, <2 x i16> %1)
146 %3 = bitcast <2 x i16> %2 to i32
147 %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
148 ret { i32 } %.fca.0.insert
149}
150
151declare <2 x i16> @llvm.mips.mulq.s.ph(<2 x i16>, <2 x i16>) nounwind
152
153define { i32 } @test__builtin_mips_subu_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
154entry:
155; CHECK: subu.ph
156
157 %0 = bitcast i32 %a0.coerce to <2 x i16>
158 %1 = bitcast i32 %a1.coerce to <2 x i16>
159 %2 = tail call <2 x i16> @llvm.mips.subu.ph(<2 x i16> %0, <2 x i16> %1)
160 %3 = bitcast <2 x i16> %2 to i32
161 %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
162 ret { i32 } %.fca.0.insert
163}
164
165declare <2 x i16> @llvm.mips.subu.ph(<2 x i16>, <2 x i16>) nounwind
166
167define { i32 } @test__builtin_mips_subu_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
168entry:
169; CHECK: subu_s.ph
170
171 %0 = bitcast i32 %a0.coerce to <2 x i16>
172 %1 = bitcast i32 %a1.coerce to <2 x i16>
173 %2 = tail call <2 x i16> @llvm.mips.subu.s.ph(<2 x i16> %0, <2 x i16> %1)
174 %3 = bitcast <2 x i16> %2 to i32
175 %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
176 ret { i32 } %.fca.0.insert
177}
178
179declare <2 x i16> @llvm.mips.subu.s.ph(<2 x i16>, <2 x i16>) nounwind
Akira Hatanaka5e929902012-09-27 04:12:30 +0000180
181define i32 @test__builtin_mips_cmpgdu_eq_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
182entry:
183; CHECK: cmpgdu.eq.qb
184
185 %0 = bitcast i32 %a0.coerce to <4 x i8>
186 %1 = bitcast i32 %a1.coerce to <4 x i8>
187 %2 = tail call i32 @llvm.mips.cmpgdu.eq.qb(<4 x i8> %0, <4 x i8> %1)
188 ret i32 %2
189}
190
191declare i32 @llvm.mips.cmpgdu.eq.qb(<4 x i8>, <4 x i8>) nounwind
192
193define i32 @test__builtin_mips_cmpgdu_lt_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
194entry:
195; CHECK: cmpgdu.lt.qb
196
197 %0 = bitcast i32 %a0.coerce to <4 x i8>
198 %1 = bitcast i32 %a1.coerce to <4 x i8>
199 %2 = tail call i32 @llvm.mips.cmpgdu.lt.qb(<4 x i8> %0, <4 x i8> %1)
200 ret i32 %2
201}
202
203declare i32 @llvm.mips.cmpgdu.lt.qb(<4 x i8>, <4 x i8>) nounwind
204
205define i32 @test__builtin_mips_cmpgdu_le_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
206entry:
207; CHECK: cmpgdu.le.qb
208
209 %0 = bitcast i32 %a0.coerce to <4 x i8>
210 %1 = bitcast i32 %a1.coerce to <4 x i8>
211 %2 = tail call i32 @llvm.mips.cmpgdu.le.qb(<4 x i8> %0, <4 x i8> %1)
212 ret i32 %2
213}
214
215declare i32 @llvm.mips.cmpgdu.le.qb(<4 x i8>, <4 x i8>) nounwind
216
217define { i32 } @test__builtin_mips_precr_qb_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
218entry:
219; CHECK: precr.qb.ph
220
221 %0 = bitcast i32 %a0.coerce to <2 x i16>
222 %1 = bitcast i32 %a1.coerce to <2 x i16>
223 %2 = tail call <4 x i8> @llvm.mips.precr.qb.ph(<2 x i16> %0, <2 x i16> %1)
224 %3 = bitcast <4 x i8> %2 to i32
225 %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
226 ret { i32 } %.fca.0.insert
227}
228
229declare <4 x i8> @llvm.mips.precr.qb.ph(<2 x i16>, <2 x i16>) nounwind
230
231define { i32 } @test__builtin_mips_precr_sra_ph_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
232entry:
233; CHECK: precr_sra.ph.w
234
235 %0 = tail call <2 x i16> @llvm.mips.precr.sra.ph.w(i32 %a0, i32 %a1, i32 15)
236 %1 = bitcast <2 x i16> %0 to i32
237 %.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
238 ret { i32 } %.fca.0.insert
239}
240
241declare <2 x i16> @llvm.mips.precr.sra.ph.w(i32, i32, i32) nounwind readnone
242
243define { i32 } @test__builtin_mips_precr_sra_r_ph_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
244entry:
245; CHECK: precr_sra_r.ph.w
246
247 %0 = tail call <2 x i16> @llvm.mips.precr.sra.r.ph.w(i32 %a0, i32 %a1, i32 15)
248 %1 = bitcast <2 x i16> %0 to i32
249 %.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
250 ret { i32 } %.fca.0.insert
251}
252
253declare <2 x i16> @llvm.mips.precr.sra.r.ph.w(i32, i32, i32) nounwind readnone
Akira Hatanaka23bb38f2012-09-27 19:05:08 +0000254
255define { i32 } @test__builtin_mips_shra_qb1(i32 %i0, i32 %a0.coerce) nounwind readnone {
256entry:
257; CHECK: shra.qb
258
259 %0 = bitcast i32 %a0.coerce to <4 x i8>
260 %1 = tail call <4 x i8> @llvm.mips.shra.qb(<4 x i8> %0, i32 3)
261 %2 = bitcast <4 x i8> %1 to i32
262 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
263 ret { i32 } %.fca.0.insert
264}
265
266declare <4 x i8> @llvm.mips.shra.qb(<4 x i8>, i32) nounwind readnone
267
268define { i32 } @test__builtin_mips_shra_r_qb1(i32 %i0, i32 %a0.coerce) nounwind readnone {
269entry:
270; CHECK: shra_r.qb
271
272 %0 = bitcast i32 %a0.coerce to <4 x i8>
273 %1 = tail call <4 x i8> @llvm.mips.shra.r.qb(<4 x i8> %0, i32 3)
274 %2 = bitcast <4 x i8> %1 to i32
275 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
276 ret { i32 } %.fca.0.insert
277}
278
279declare <4 x i8> @llvm.mips.shra.r.qb(<4 x i8>, i32) nounwind readnone
280
281define { i32 } @test__builtin_mips_shra_qb2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
282entry:
283; CHECK: shrav.qb
284
285 %0 = bitcast i32 %a0.coerce to <4 x i8>
286 %1 = tail call <4 x i8> @llvm.mips.shra.qb(<4 x i8> %0, i32 %a1)
287 %2 = bitcast <4 x i8> %1 to i32
288 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
289 ret { i32 } %.fca.0.insert
290}
291
292define { i32 } @test__builtin_mips_shra_r_qb2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
293entry:
294; CHECK: shrav_r.qb
295
296 %0 = bitcast i32 %a0.coerce to <4 x i8>
297 %1 = tail call <4 x i8> @llvm.mips.shra.r.qb(<4 x i8> %0, i32 %a1)
298 %2 = bitcast <4 x i8> %1 to i32
299 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
300 ret { i32 } %.fca.0.insert
301}
302
303define { i32 } @test__builtin_mips_shrl_ph1(i32 %i0, i32 %a0.coerce) nounwind readnone {
304entry:
305; CHECK: shrl.ph
306
307 %0 = bitcast i32 %a0.coerce to <2 x i16>
308 %1 = tail call <2 x i16> @llvm.mips.shrl.ph(<2 x i16> %0, i32 7)
309 %2 = bitcast <2 x i16> %1 to i32
310 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
311 ret { i32 } %.fca.0.insert
312}
313
314declare <2 x i16> @llvm.mips.shrl.ph(<2 x i16>, i32) nounwind readnone
315
316define { i32 } @test__builtin_mips_shrl_ph2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
317entry:
318; CHECK: shrlv.ph
319
320 %0 = bitcast i32 %a0.coerce to <2 x i16>
321 %1 = tail call <2 x i16> @llvm.mips.shrl.ph(<2 x i16> %0, i32 %a1)
322 %2 = bitcast <2 x i16> %1 to i32
323 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
324 ret { i32 } %.fca.0.insert
325}
Akira Hatanakacb39aa02012-09-27 19:09:21 +0000326
327define { i32 } @test__builtin_mips_absq_s_qb1(i32 %i0, i32 %a0.coerce) nounwind {
328entry:
329; CHECK: absq_s.qb
330
331 %0 = bitcast i32 %a0.coerce to <4 x i8>
332 %1 = tail call <4 x i8> @llvm.mips.absq.s.qb(<4 x i8> %0)
333 %2 = bitcast <4 x i8> %1 to i32
334 %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
335 ret { i32 } %.fca.0.insert
336}
337
338declare <4 x i8> @llvm.mips.absq.s.qb(<4 x i8>) nounwind