blob: 8a5124870696461bcf2a3a2978ee6d7dafbfd2df [file] [log] [blame]
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
2
3declare i32 @llvm.x86.avx512.kortestz(i16, i16) nounwind readnone
Elena Demikhovskya3a71402013-10-09 08:16:14 +00004; CHECK: test_kortestz
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +00005; CHECK: kortestw
6; CHECK: sete
Elena Demikhovskya3a71402013-10-09 08:16:14 +00007define i32 @test_kortestz(i16 %a0, i16 %a1) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +00008 %res = call i32 @llvm.x86.avx512.kortestz(i16 %a0, i16 %a1)
9 ret i32 %res
10}
11
12declare i32 @llvm.x86.avx512.kortestc(i16, i16) nounwind readnone
Elena Demikhovskya3a71402013-10-09 08:16:14 +000013; CHECK: test_kortestc
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000014; CHECK: kortestw
15; CHECK: sbbl
Elena Demikhovskya3a71402013-10-09 08:16:14 +000016define i32 @test_kortestc(i16 %a0, i16 %a1) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000017 %res = call i32 @llvm.x86.avx512.kortestc(i16 %a0, i16 %a1)
18 ret i32 %res
19}
20
Elena Demikhovskya3a71402013-10-09 08:16:14 +000021define <16 x float> @test_rcp_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000022 ; CHECK: vrcp14ps
23 %res = call <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
24 ret <16 x float> %res
25}
26declare <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float>) nounwind readnone
27
Elena Demikhovskya3a71402013-10-09 08:16:14 +000028define <8 x double> @test_rcp_pd_512(<8 x double> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000029 ; CHECK: vrcp14pd
30 %res = call <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
31 ret <8 x double> %res
32}
33declare <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double>) nounwind readnone
34
Elena Demikhovskya3a71402013-10-09 08:16:14 +000035define <16 x float> @test_rcp28_ps_512(<16 x float> %a0) {
36 ; CHECK: vrcp28ps
37 %res = call <16 x float> @llvm.x86.avx512.rcp28.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
38 ret <16 x float> %res
39}
40declare <16 x float> @llvm.x86.avx512.rcp28.ps.512(<16 x float>) nounwind readnone
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000041
Elena Demikhovskya3a71402013-10-09 08:16:14 +000042define <8 x double> @test_rcp28_pd_512(<8 x double> %a0) {
43 ; CHECK: vrcp28pd
44 %res = call <8 x double> @llvm.x86.avx512.rcp28.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
45 ret <8 x double> %res
46}
47declare <8 x double> @llvm.x86.avx512.rcp28.pd.512(<8 x double>) nounwind readnone
48
49define <8 x double> @test_rndscale_pd_512(<8 x double> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000050 ; CHECK: vrndscale
51 %res = call <8 x double> @llvm.x86.avx512.rndscale.pd.512(<8 x double> %a0, i32 7) ; <<8 x double>> [#uses=1]
52 ret <8 x double> %res
53}
54declare <8 x double> @llvm.x86.avx512.rndscale.pd.512(<8 x double>, i32) nounwind readnone
55
56
Elena Demikhovskya3a71402013-10-09 08:16:14 +000057define <16 x float> @test_rndscale_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000058 ; CHECK: vrndscale
59 %res = call <16 x float> @llvm.x86.avx512.rndscale.ps.512(<16 x float> %a0, i32 7) ; <<16 x float>> [#uses=1]
60 ret <16 x float> %res
61}
62declare <16 x float> @llvm.x86.avx512.rndscale.ps.512(<16 x float>, i32) nounwind readnone
63
64
Elena Demikhovskya3a71402013-10-09 08:16:14 +000065define <16 x float> @test_rsqrt_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000066 ; CHECK: vrsqrt14ps
67 %res = call <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
68 ret <16 x float> %res
69}
70declare <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float>) nounwind readnone
71
Elena Demikhovskya3a71402013-10-09 08:16:14 +000072define <16 x float> @test_rsqrt28_ps_512(<16 x float> %a0) {
73 ; CHECK: vrsqrt28ps
74 %res = call <16 x float> @llvm.x86.avx512.rsqrt28.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
75 ret <16 x float> %res
76}
77declare <16 x float> @llvm.x86.avx512.rsqrt28.ps.512(<16 x float>) nounwind readnone
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000078
Elena Demikhovskya3a71402013-10-09 08:16:14 +000079define <4 x float> @test_rsqrt14_ss(<4 x float> %a0) {
80 ; CHECK: vrsqrt14ss
81 %res = call <4 x float> @llvm.x86.avx512.rsqrt14.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
82 ret <4 x float> %res
83}
84declare <4 x float> @llvm.x86.avx512.rsqrt14.ss(<4 x float>) nounwind readnone
85
86define <4 x float> @test_rsqrt28_ss(<4 x float> %a0) {
87 ; CHECK: vrsqrt28ss
88 %res = call <4 x float> @llvm.x86.avx512.rsqrt28.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
89 ret <4 x float> %res
90}
91declare <4 x float> @llvm.x86.avx512.rsqrt28.ss(<4 x float>) nounwind readnone
92
93define <4 x float> @test_rcp14_ss(<4 x float> %a0) {
94 ; CHECK: vrcp14ss
95 %res = call <4 x float> @llvm.x86.avx512.rcp14.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
96 ret <4 x float> %res
97}
98declare <4 x float> @llvm.x86.avx512.rcp14.ss(<4 x float>) nounwind readnone
99
100define <4 x float> @test_rcp28_ss(<4 x float> %a0) {
101 ; CHECK: vrcp28ss
102 %res = call <4 x float> @llvm.x86.avx512.rcp28.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
103 ret <4 x float> %res
104}
105declare <4 x float> @llvm.x86.avx512.rcp28.ss(<4 x float>) nounwind readnone
106
107define <8 x double> @test_sqrt_pd_512(<8 x double> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000108 ; CHECK: vsqrtpd
109 %res = call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
110 ret <8 x double> %res
111}
112declare <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double>) nounwind readnone
113
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000114define <16 x float> @test_sqrt_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000115 ; CHECK: vsqrtps
116 %res = call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
117 ret <16 x float> %res
118}
119declare <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float>) nounwind readnone
120
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000121define <4 x float> @test_sqrt_ss(<4 x float> %a0, <4 x float> %a1) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000122 ; CHECK: vsqrtssz
123 %res = call <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
124 ret <4 x float> %res
125}
126declare <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float>, <4 x float>) nounwind readnone
127
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000128define <2 x double> @test_sqrt_sd(<2 x double> %a0, <2 x double> %a1) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000129 ; CHECK: vsqrtsdz
130 %res = call <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
131 ret <2 x double> %res
132}
133declare <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double>, <2 x double>) nounwind readnone
134
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000135define i64 @test_x86_sse2_cvtsd2si64(<2 x double> %a0) {
136 ; CHECK: vcvtsd2siz
137 %res = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %a0) ; <i64> [#uses=1]
138 ret i64 %res
139}
140declare i64 @llvm.x86.sse2.cvtsd2si64(<2 x double>) nounwind readnone
141
142define <2 x double> @test_x86_sse2_cvtsi642sd(<2 x double> %a0, i64 %a1) {
143 ; CHECK: vcvtsi2sdqz
144 %res = call <2 x double> @llvm.x86.sse2.cvtsi642sd(<2 x double> %a0, i64 %a1) ; <<2 x double>> [#uses=1]
145 ret <2 x double> %res
146}
147declare <2 x double> @llvm.x86.sse2.cvtsi642sd(<2 x double>, i64) nounwind readnone
148
149define <2 x double> @test_x86_avx512_cvtusi642sd(<2 x double> %a0, i64 %a1) {
150 ; CHECK: vcvtusi2sdqz
151 %res = call <2 x double> @llvm.x86.avx512.cvtusi642sd(<2 x double> %a0, i64 %a1) ; <<2 x double>> [#uses=1]
152 ret <2 x double> %res
153}
154declare <2 x double> @llvm.x86.avx512.cvtusi642sd(<2 x double>, i64) nounwind readnone
155
156define i64 @test_x86_sse2_cvttsd2si64(<2 x double> %a0) {
157 ; CHECK: vcvttsd2siz
158 %res = call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %a0) ; <i64> [#uses=1]
159 ret i64 %res
160}
161declare i64 @llvm.x86.sse2.cvttsd2si64(<2 x double>) nounwind readnone
162
163
164define i64 @test_x86_sse_cvtss2si64(<4 x float> %a0) {
165 ; CHECK: vcvtss2siz
166 %res = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %a0) ; <i64> [#uses=1]
167 ret i64 %res
168}
169declare i64 @llvm.x86.sse.cvtss2si64(<4 x float>) nounwind readnone
170
171
172define <4 x float> @test_x86_sse_cvtsi642ss(<4 x float> %a0, i64 %a1) {
173 ; CHECK: vcvtsi2ssqz
174 %res = call <4 x float> @llvm.x86.sse.cvtsi642ss(<4 x float> %a0, i64 %a1) ; <<4 x float>> [#uses=1]
175 ret <4 x float> %res
176}
177declare <4 x float> @llvm.x86.sse.cvtsi642ss(<4 x float>, i64) nounwind readnone
178
179
180define i64 @test_x86_sse_cvttss2si64(<4 x float> %a0) {
181 ; CHECK: vcvttss2siz
182 %res = call i64 @llvm.x86.sse.cvttss2si64(<4 x float> %a0) ; <i64> [#uses=1]
183 ret i64 %res
184}
185declare i64 @llvm.x86.sse.cvttss2si64(<4 x float>) nounwind readnone
186
187define i64 @test_x86_avx512_cvtsd2usi64(<2 x double> %a0) {
188 ; CHECK: vcvtsd2usiz
189 %res = call i64 @llvm.x86.avx512.cvtsd2usi64(<2 x double> %a0) ; <i64> [#uses=1]
190 ret i64 %res
191}
192declare i64 @llvm.x86.avx512.cvtsd2usi64(<2 x double>) nounwind readnone
Elena Demikhovskydd0794e2013-10-24 07:16:35 +0000193
194define <16 x float> @test_x86_vcvtph2ps_512(<16 x i16> %a0) {
195 ; CHECK: vcvtph2ps
196 %res = call <16 x float> @llvm.x86.avx512.vcvtph2ps.512(<16 x i16> %a0)
197 ret <16 x float> %res
198}
199declare <16 x float> @llvm.x86.avx512.vcvtph2ps.512(<16 x i16>) nounwind readonly
200
201
202define <16 x i16> @test_x86_vcvtps2ph_256(<16 x float> %a0) {
203 ; CHECK: vcvtps2ph
204 %res = call <16 x i16> @llvm.x86.avx512.vcvtps2ph.512(<16 x float> %a0, i32 0)
205 ret <16 x i16> %res
206}
207declare <16 x i16> @llvm.x86.avx512.vcvtps2ph.512(<16 x float>, i32) nounwind readonly
Quentin Colombet4bf1c282013-10-25 17:47:18 +0000208
209define <16 x float> @test_x86_vbroadcast_ss_512(i8* %a0) {
210 ; CHECK: vbroadcastss
211 %res = call <16 x float> @llvm.x86.avx512.vbroadcast.ss.512(i8* %a0) ; <<16 x float>> [#uses=1]
212 ret <16 x float> %res
213}
214declare <16 x float> @llvm.x86.avx512.vbroadcast.ss.512(i8*) nounwind readonly
215
216define <8 x double> @test_x86_vbroadcast_sd_512(i8* %a0) {
217 ; CHECK: vbroadcastsd
218 %res = call <8 x double> @llvm.x86.avx512.vbroadcast.sd.512(i8* %a0) ; <<8 x double>> [#uses=1]
219 ret <8 x double> %res
220}
221declare <8 x double> @llvm.x86.avx512.vbroadcast.sd.512(i8*) nounwind readonly
Quentin Colombet8761a8f2013-10-25 18:04:12 +0000222
223define <16 x float> @test_x86_vbroadcast_ss_ps_512(<4 x float> %a0) {
224 ; CHECK: vbroadcastss
225 %res = call <16 x float> @llvm.x86.avx512.vbroadcast.ss.ps.512(<4 x float> %a0) ; <<16 x float>> [#uses=1]
226 ret <16 x float> %res
227}
228declare <16 x float> @llvm.x86.avx512.vbroadcast.ss.ps.512(<4 x float>) nounwind readonly
229
230define <8 x double> @test_x86_vbroadcast_sd_pd_512(<2 x double> %a0) {
231 ; CHECK: vbroadcastsd
232 %res = call <8 x double> @llvm.x86.avx512.vbroadcast.sd.pd.512(<2 x double> %a0) ; <<8 x double>> [#uses=1]
233 ret <8 x double> %res
234}
235declare <8 x double> @llvm.x86.avx512.vbroadcast.sd.pd.512(<2 x double>) nounwind readonly
Elena Demikhovsky199c8232013-10-27 08:18:37 +0000236
Cameron McInally394d5572013-10-31 13:56:31 +0000237define <16 x i32> @test_x86_pbroadcastd_512(<4 x i32> %a0) {
238 ; CHECK: vpbroadcastd
239 %res = call <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32> %a0) ; <<16 x i32>> [#uses=1]
240 ret <16 x i32> %res
241}
242declare <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32>) nounwind readonly
243
244define <16 x i32> @test_x86_pbroadcastd_i32_512(i32 %a0) {
245 ; CHECK: vpbroadcastd
246 %res = call <16 x i32> @llvm.x86.avx512.pbroadcastd.i32.512(i32 %a0) ; <<16 x i32>> [#uses=1]
247 ret <16 x i32> %res
248}
249declare <16 x i32> @llvm.x86.avx512.pbroadcastd.i32.512(i32) nounwind readonly
250
251define <8 x i64> @test_x86_pbroadcastq_512(<2 x i64> %a0) {
252 ; CHECK: vpbroadcastq
253 %res = call <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64> %a0) ; <<8 x i64>> [#uses=1]
254 ret <8 x i64> %res
255}
256declare <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64>) nounwind readonly
257
258define <8 x i64> @test_x86_pbroadcastq_i64_512(i64 %a0) {
259 ; CHECK: vpbroadcastq
260 %res = call <8 x i64> @llvm.x86.avx512.pbroadcastq.i64.512(i64 %a0) ; <<8 x i64>> [#uses=1]
261 ret <8 x i64> %res
262}
263declare <8 x i64> @llvm.x86.avx512.pbroadcastq.i64.512(i64) nounwind readonly
264
Elena Demikhovsky199c8232013-10-27 08:18:37 +0000265define <16 x i32> @test_x86_pmaxu_d(<16 x i32> %a0, <16 x i32> %a1) {
266 ; CHECK: vpmaxud
267 %res = call <16 x i32> @llvm.x86.avx512.pmaxu.d(<16 x i32> %a0, <16 x i32> %a1) ; <<16 x i32>> [#uses=1]
268 ret <16 x i32> %res
269}
270declare <16 x i32> @llvm.x86.avx512.pmaxu.d(<16 x i32>, <16 x i32>) nounwind readonly
271
272define <8 x i64> @test_x86_pmaxu_q(<8 x i64> %a0, <8 x i64> %a1) {
273 ; CHECK: vpmaxuq
274 %res = call <8 x i64> @llvm.x86.avx512.pmaxu.q(<8 x i64> %a0, <8 x i64> %a1) ; <<8 x i64>> [#uses=1]
275 ret <8 x i64> %res
276}
277declare <8 x i64> @llvm.x86.avx512.pmaxu.q(<8 x i64>, <8 x i64>) nounwind readonly
278
279define <16 x i32> @test_x86_pmaxs_d(<16 x i32> %a0, <16 x i32> %a1) {
280 ; CHECK: vpmaxsd
281 %res = call <16 x i32> @llvm.x86.avx512.pmaxs.d(<16 x i32> %a0, <16 x i32> %a1) ; <<16 x i32>> [#uses=1]
282 ret <16 x i32> %res
283}
284declare <16 x i32> @llvm.x86.avx512.pmaxs.d(<16 x i32>, <16 x i32>) nounwind readonly
285
286define <8 x i64> @test_x86_pmaxs_q(<8 x i64> %a0, <8 x i64> %a1) {
287 ; CHECK: vpmaxsq
288 %res = call <8 x i64> @llvm.x86.avx512.pmaxs.q(<8 x i64> %a0, <8 x i64> %a1) ; <<8 x i64>> [#uses=1]
289 ret <8 x i64> %res
290}
291declare <8 x i64> @llvm.x86.avx512.pmaxs.q(<8 x i64>, <8 x i64>) nounwind readonly
292
293define <16 x i32> @test_x86_pminu_d(<16 x i32> %a0, <16 x i32> %a1) {
294 ; CHECK: vpminud
295 %res = call <16 x i32> @llvm.x86.avx512.pminu.d(<16 x i32> %a0, <16 x i32> %a1) ; <<16 x i32>> [#uses=1]
296 ret <16 x i32> %res
297}
298declare <16 x i32> @llvm.x86.avx512.pminu.d(<16 x i32>, <16 x i32>) nounwind readonly
299
300define <8 x i64> @test_x86_pminu_q(<8 x i64> %a0, <8 x i64> %a1) {
301 ; CHECK: vpminuq
302 %res = call <8 x i64> @llvm.x86.avx512.pminu.q(<8 x i64> %a0, <8 x i64> %a1) ; <<8 x i64>> [#uses=1]
303 ret <8 x i64> %res
304}
305declare <8 x i64> @llvm.x86.avx512.pminu.q(<8 x i64>, <8 x i64>) nounwind readonly
306
307define <16 x i32> @test_x86_pmins_d(<16 x i32> %a0, <16 x i32> %a1) {
308 ; CHECK: vpminsd
309 %res = call <16 x i32> @llvm.x86.avx512.pmins.d(<16 x i32> %a0, <16 x i32> %a1) ; <<16 x i32>> [#uses=1]
310 ret <16 x i32> %res
311}
312declare <16 x i32> @llvm.x86.avx512.pmins.d(<16 x i32>, <16 x i32>) nounwind readonly
313
314define <8 x i64> @test_x86_pmins_q(<8 x i64> %a0, <8 x i64> %a1) {
315 ; CHECK: vpminsq
316 %res = call <8 x i64> @llvm.x86.avx512.pmins.q(<8 x i64> %a0, <8 x i64> %a1) ; <<8 x i64>> [#uses=1]
317 ret <8 x i64> %res
318}
319declare <8 x i64> @llvm.x86.avx512.pmins.q(<8 x i64>, <8 x i64>) nounwind readonly