blob: b43c00bf4880e9840aca0076a53b3b0aa841b8a9 [file] [log] [blame]
Elena Demikhovskycf088092013-12-11 14:31:04 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl --show-mc-encoding| FileCheck %s
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +00002
Elena Demikhovskye382c3f2013-12-10 13:53:10 +00003declare i32 @llvm.x86.avx512.kortestz.w(i16, i16) nounwind readnone
4; CHECK-LABEL: 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 Demikhovskye382c3f2013-12-10 13:53:10 +00008 %res = call i32 @llvm.x86.avx512.kortestz.w(i16 %a0, i16 %a1)
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +00009 ret i32 %res
10}
11
Elena Demikhovskye382c3f2013-12-10 13:53:10 +000012declare i32 @llvm.x86.avx512.kortestc.w(i16, i16) nounwind readnone
13; CHECK-LABEL: 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 Demikhovskye382c3f2013-12-10 13:53:10 +000017 %res = call i32 @llvm.x86.avx512.kortestc.w(i16 %a0, i16 %a1)
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000018 ret i32 %res
19}
20
Elena Demikhovskye382c3f2013-12-10 13:53:10 +000021declare i16 @llvm.x86.avx512.kand.w(i16, i16) nounwind readnone
22; CHECK-LABEL: test_kand
23; CHECK: kandw
24; CHECK: kandw
25define i16 @test_kand(i16 %a0, i16 %a1) {
26 %t1 = call i16 @llvm.x86.avx512.kand.w(i16 %a0, i16 8)
27 %t2 = call i16 @llvm.x86.avx512.kand.w(i16 %t1, i16 %a1)
28 ret i16 %t2
29}
30
31declare i16 @llvm.x86.avx512.knot.w(i16) nounwind readnone
32; CHECK-LABEL: test_knot
33; CHECK: knotw
34define i16 @test_knot(i16 %a0) {
35 %res = call i16 @llvm.x86.avx512.knot.w(i16 %a0)
36 ret i16 %res
37}
38
39declare i16 @llvm.x86.avx512.kunpck.bw(i16, i16) nounwind readnone
40
41; CHECK-LABEL: unpckbw_test
42; CHECK: kunpckbw
43; CHECK:ret
44define i16 @unpckbw_test(i16 %a0, i16 %a1) {
45 %res = call i16 @llvm.x86.avx512.kunpck.bw(i16 %a0, i16 %a1)
46 ret i16 %res
47}
48
Elena Demikhovskya3a71402013-10-09 08:16:14 +000049define <16 x float> @test_rcp_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000050 ; CHECK: vrcp14ps
51 %res = call <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
52 ret <16 x float> %res
53}
54declare <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float>) nounwind readnone
55
Elena Demikhovskya3a71402013-10-09 08:16:14 +000056define <8 x double> @test_rcp_pd_512(<8 x double> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000057 ; CHECK: vrcp14pd
58 %res = call <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
59 ret <8 x double> %res
60}
61declare <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double>) nounwind readnone
62
Elena Demikhovskya3a71402013-10-09 08:16:14 +000063define <16 x float> @test_rcp28_ps_512(<16 x float> %a0) {
64 ; CHECK: vrcp28ps
65 %res = call <16 x float> @llvm.x86.avx512.rcp28.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
66 ret <16 x float> %res
67}
68declare <16 x float> @llvm.x86.avx512.rcp28.ps.512(<16 x float>) nounwind readnone
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000069
Elena Demikhovskya3a71402013-10-09 08:16:14 +000070define <8 x double> @test_rcp28_pd_512(<8 x double> %a0) {
71 ; CHECK: vrcp28pd
72 %res = call <8 x double> @llvm.x86.avx512.rcp28.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
73 ret <8 x double> %res
74}
75declare <8 x double> @llvm.x86.avx512.rcp28.pd.512(<8 x double>) nounwind readnone
76
Elena Demikhovskyde3f7512014-01-01 15:12:34 +000077declare <8 x double> @llvm.x86.avx512.mask.rndscale.pd.512(<8 x double>, i32, <8 x double>, i8, i32)
78
79define <8 x double> @test7(<8 x double> %a) {
80; CHECK: vrndscalepd {{.*}}encoding: [0x62,0xf3,0xfd,0x48,0x09,0xc0,0x0b]
81 %res = call <8 x double> @llvm.x86.avx512.mask.rndscale.pd.512(<8 x double> %a, i32 11, <8 x double> zeroinitializer, i8 -1, i32 4)
82 ret <8 x double>%res
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000083}
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000084
Elena Demikhovskyde3f7512014-01-01 15:12:34 +000085declare <16 x float> @llvm.x86.avx512.mask.rndscale.ps.512(<16 x float>, i32, <16 x float>, i16, i32)
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000086
Elena Demikhovskyde3f7512014-01-01 15:12:34 +000087define <16 x float> @test8(<16 x float> %a) {
88; CHECK: vrndscaleps {{.*}}encoding: [0x62,0xf3,0x7d,0x48,0x08,0xc0,0x0b]
89 %res = call <16 x float> @llvm.x86.avx512.mask.rndscale.ps.512(<16 x float> %a, i32 11, <16 x float> zeroinitializer, i16 -1, i32 4)
90 ret <16 x float>%res
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000091}
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000092
Elena Demikhovskya3a71402013-10-09 08:16:14 +000093define <16 x float> @test_rsqrt_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +000094 ; CHECK: vrsqrt14ps
95 %res = call <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
96 ret <16 x float> %res
97}
98declare <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float>) nounwind readnone
99
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000100define <16 x float> @test_rsqrt28_ps_512(<16 x float> %a0) {
101 ; CHECK: vrsqrt28ps
102 %res = call <16 x float> @llvm.x86.avx512.rsqrt28.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
103 ret <16 x float> %res
104}
105declare <16 x float> @llvm.x86.avx512.rsqrt28.ps.512(<16 x float>) nounwind readnone
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000106
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000107define <4 x float> @test_rsqrt14_ss(<4 x float> %a0) {
108 ; CHECK: vrsqrt14ss
109 %res = call <4 x float> @llvm.x86.avx512.rsqrt14.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
110 ret <4 x float> %res
111}
112declare <4 x float> @llvm.x86.avx512.rsqrt14.ss(<4 x float>) nounwind readnone
113
114define <4 x float> @test_rsqrt28_ss(<4 x float> %a0) {
115 ; CHECK: vrsqrt28ss
116 %res = call <4 x float> @llvm.x86.avx512.rsqrt28.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
117 ret <4 x float> %res
118}
119declare <4 x float> @llvm.x86.avx512.rsqrt28.ss(<4 x float>) nounwind readnone
120
121define <4 x float> @test_rcp14_ss(<4 x float> %a0) {
122 ; CHECK: vrcp14ss
123 %res = call <4 x float> @llvm.x86.avx512.rcp14.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
124 ret <4 x float> %res
125}
126declare <4 x float> @llvm.x86.avx512.rcp14.ss(<4 x float>) nounwind readnone
127
128define <4 x float> @test_rcp28_ss(<4 x float> %a0) {
129 ; CHECK: vrcp28ss
130 %res = call <4 x float> @llvm.x86.avx512.rcp28.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
131 ret <4 x float> %res
132}
133declare <4 x float> @llvm.x86.avx512.rcp28.ss(<4 x float>) nounwind readnone
134
135define <8 x double> @test_sqrt_pd_512(<8 x double> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000136 ; CHECK: vsqrtpd
137 %res = call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
138 ret <8 x double> %res
139}
140declare <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double>) nounwind readnone
141
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000142define <16 x float> @test_sqrt_ps_512(<16 x float> %a0) {
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000143 ; CHECK: vsqrtps
144 %res = call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
145 ret <16 x float> %res
146}
147declare <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float>) nounwind readnone
148
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000149define <4 x float> @test_sqrt_ss(<4 x float> %a0, <4 x float> %a1) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000150 ; CHECK: vsqrtss {{.*}}encoding: [0x62
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000151 %res = call <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
152 ret <4 x float> %res
153}
154declare <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float>, <4 x float>) nounwind readnone
155
Elena Demikhovskya3a71402013-10-09 08:16:14 +0000156define <2 x double> @test_sqrt_sd(<2 x double> %a0, <2 x double> %a1) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000157 ; CHECK: vsqrtsd {{.*}}encoding: [0x62
Elena Demikhovsky9a5ed9c2013-08-28 11:21:58 +0000158 %res = call <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
159 ret <2 x double> %res
160}
161declare <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double>, <2 x double>) nounwind readnone
162
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000163define i64 @test_x86_sse2_cvtsd2si64(<2 x double> %a0) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000164 ; CHECK: vcvtsd2si {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000165 %res = call i64 @llvm.x86.sse2.cvtsd2si64(<2 x double> %a0) ; <i64> [#uses=1]
166 ret i64 %res
167}
168declare i64 @llvm.x86.sse2.cvtsd2si64(<2 x double>) nounwind readnone
169
170define <2 x double> @test_x86_sse2_cvtsi642sd(<2 x double> %a0, i64 %a1) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000171 ; CHECK: vcvtsi2sdq {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000172 %res = call <2 x double> @llvm.x86.sse2.cvtsi642sd(<2 x double> %a0, i64 %a1) ; <<2 x double>> [#uses=1]
173 ret <2 x double> %res
174}
175declare <2 x double> @llvm.x86.sse2.cvtsi642sd(<2 x double>, i64) nounwind readnone
176
177define <2 x double> @test_x86_avx512_cvtusi642sd(<2 x double> %a0, i64 %a1) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000178 ; CHECK: vcvtusi2sdq {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000179 %res = call <2 x double> @llvm.x86.avx512.cvtusi642sd(<2 x double> %a0, i64 %a1) ; <<2 x double>> [#uses=1]
180 ret <2 x double> %res
181}
182declare <2 x double> @llvm.x86.avx512.cvtusi642sd(<2 x double>, i64) nounwind readnone
183
184define i64 @test_x86_sse2_cvttsd2si64(<2 x double> %a0) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000185 ; CHECK: vcvttsd2si {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000186 %res = call i64 @llvm.x86.sse2.cvttsd2si64(<2 x double> %a0) ; <i64> [#uses=1]
187 ret i64 %res
188}
189declare i64 @llvm.x86.sse2.cvttsd2si64(<2 x double>) nounwind readnone
190
191
192define i64 @test_x86_sse_cvtss2si64(<4 x float> %a0) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000193 ; CHECK: vcvtss2si {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000194 %res = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %a0) ; <i64> [#uses=1]
195 ret i64 %res
196}
197declare i64 @llvm.x86.sse.cvtss2si64(<4 x float>) nounwind readnone
198
199
200define <4 x float> @test_x86_sse_cvtsi642ss(<4 x float> %a0, i64 %a1) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000201 ; CHECK: vcvtsi2ssq {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000202 %res = call <4 x float> @llvm.x86.sse.cvtsi642ss(<4 x float> %a0, i64 %a1) ; <<4 x float>> [#uses=1]
203 ret <4 x float> %res
204}
205declare <4 x float> @llvm.x86.sse.cvtsi642ss(<4 x float>, i64) nounwind readnone
206
207
208define i64 @test_x86_sse_cvttss2si64(<4 x float> %a0) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000209 ; CHECK: vcvttss2si {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000210 %res = call i64 @llvm.x86.sse.cvttss2si64(<4 x float> %a0) ; <i64> [#uses=1]
211 ret i64 %res
212}
213declare i64 @llvm.x86.sse.cvttss2si64(<4 x float>) nounwind readnone
214
215define i64 @test_x86_avx512_cvtsd2usi64(<2 x double> %a0) {
Elena Demikhovskycf088092013-12-11 14:31:04 +0000216 ; CHECK: vcvtsd2usi {{.*}}encoding: [0x62
Elena Demikhovsky2e408ae2013-10-06 13:11:09 +0000217 %res = call i64 @llvm.x86.avx512.cvtsd2usi64(<2 x double> %a0) ; <i64> [#uses=1]
218 ret i64 %res
219}
220declare i64 @llvm.x86.avx512.cvtsd2usi64(<2 x double>) nounwind readnone
Elena Demikhovskydd0794e2013-10-24 07:16:35 +0000221
222define <16 x float> @test_x86_vcvtph2ps_512(<16 x i16> %a0) {
223 ; CHECK: vcvtph2ps
224 %res = call <16 x float> @llvm.x86.avx512.vcvtph2ps.512(<16 x i16> %a0)
225 ret <16 x float> %res
226}
227declare <16 x float> @llvm.x86.avx512.vcvtph2ps.512(<16 x i16>) nounwind readonly
228
229
230define <16 x i16> @test_x86_vcvtps2ph_256(<16 x float> %a0) {
231 ; CHECK: vcvtps2ph
232 %res = call <16 x i16> @llvm.x86.avx512.vcvtps2ph.512(<16 x float> %a0, i32 0)
233 ret <16 x i16> %res
234}
235declare <16 x i16> @llvm.x86.avx512.vcvtps2ph.512(<16 x float>, i32) nounwind readonly
Quentin Colombet4bf1c282013-10-25 17:47:18 +0000236
237define <16 x float> @test_x86_vbroadcast_ss_512(i8* %a0) {
238 ; CHECK: vbroadcastss
239 %res = call <16 x float> @llvm.x86.avx512.vbroadcast.ss.512(i8* %a0) ; <<16 x float>> [#uses=1]
240 ret <16 x float> %res
241}
242declare <16 x float> @llvm.x86.avx512.vbroadcast.ss.512(i8*) nounwind readonly
243
244define <8 x double> @test_x86_vbroadcast_sd_512(i8* %a0) {
245 ; CHECK: vbroadcastsd
246 %res = call <8 x double> @llvm.x86.avx512.vbroadcast.sd.512(i8* %a0) ; <<8 x double>> [#uses=1]
247 ret <8 x double> %res
248}
249declare <8 x double> @llvm.x86.avx512.vbroadcast.sd.512(i8*) nounwind readonly
Quentin Colombet8761a8f2013-10-25 18:04:12 +0000250
251define <16 x float> @test_x86_vbroadcast_ss_ps_512(<4 x float> %a0) {
252 ; CHECK: vbroadcastss
253 %res = call <16 x float> @llvm.x86.avx512.vbroadcast.ss.ps.512(<4 x float> %a0) ; <<16 x float>> [#uses=1]
254 ret <16 x float> %res
255}
256declare <16 x float> @llvm.x86.avx512.vbroadcast.ss.ps.512(<4 x float>) nounwind readonly
257
258define <8 x double> @test_x86_vbroadcast_sd_pd_512(<2 x double> %a0) {
259 ; CHECK: vbroadcastsd
260 %res = call <8 x double> @llvm.x86.avx512.vbroadcast.sd.pd.512(<2 x double> %a0) ; <<8 x double>> [#uses=1]
261 ret <8 x double> %res
262}
263declare <8 x double> @llvm.x86.avx512.vbroadcast.sd.pd.512(<2 x double>) nounwind readonly
Elena Demikhovsky199c8232013-10-27 08:18:37 +0000264
Cameron McInally394d5572013-10-31 13:56:31 +0000265define <16 x i32> @test_x86_pbroadcastd_512(<4 x i32> %a0) {
266 ; CHECK: vpbroadcastd
267 %res = call <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32> %a0) ; <<16 x i32>> [#uses=1]
268 ret <16 x i32> %res
269}
270declare <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32>) nounwind readonly
271
272define <16 x i32> @test_x86_pbroadcastd_i32_512(i32 %a0) {
273 ; CHECK: vpbroadcastd
274 %res = call <16 x i32> @llvm.x86.avx512.pbroadcastd.i32.512(i32 %a0) ; <<16 x i32>> [#uses=1]
275 ret <16 x i32> %res
276}
277declare <16 x i32> @llvm.x86.avx512.pbroadcastd.i32.512(i32) nounwind readonly
278
279define <8 x i64> @test_x86_pbroadcastq_512(<2 x i64> %a0) {
280 ; CHECK: vpbroadcastq
281 %res = call <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64> %a0) ; <<8 x i64>> [#uses=1]
282 ret <8 x i64> %res
283}
284declare <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64>) nounwind readonly
285
286define <8 x i64> @test_x86_pbroadcastq_i64_512(i64 %a0) {
287 ; CHECK: vpbroadcastq
288 %res = call <8 x i64> @llvm.x86.avx512.pbroadcastq.i64.512(i64 %a0) ; <<8 x i64>> [#uses=1]
289 ret <8 x i64> %res
290}
291declare <8 x i64> @llvm.x86.avx512.pbroadcastq.i64.512(i64) nounwind readonly
292
Elena Demikhovsky199c8232013-10-27 08:18:37 +0000293define <16 x i32> @test_x86_pmaxu_d(<16 x i32> %a0, <16 x i32> %a1) {
294 ; CHECK: vpmaxud
295 %res = call <16 x i32> @llvm.x86.avx512.pmaxu.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.pmaxu.d(<16 x i32>, <16 x i32>) nounwind readonly
299
300define <8 x i64> @test_x86_pmaxu_q(<8 x i64> %a0, <8 x i64> %a1) {
301 ; CHECK: vpmaxuq
302 %res = call <8 x i64> @llvm.x86.avx512.pmaxu.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.pmaxu.q(<8 x i64>, <8 x i64>) nounwind readonly
306
307define <16 x i32> @test_x86_pmaxs_d(<16 x i32> %a0, <16 x i32> %a1) {
308 ; CHECK: vpmaxsd
309 %res = call <16 x i32> @llvm.x86.avx512.pmaxs.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.pmaxs.d(<16 x i32>, <16 x i32>) nounwind readonly
313
314define <8 x i64> @test_x86_pmaxs_q(<8 x i64> %a0, <8 x i64> %a1) {
315 ; CHECK: vpmaxsq
316 %res = call <8 x i64> @llvm.x86.avx512.pmaxs.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.pmaxs.q(<8 x i64>, <8 x i64>) nounwind readonly
320
321define <16 x i32> @test_x86_pminu_d(<16 x i32> %a0, <16 x i32> %a1) {
322 ; CHECK: vpminud
323 %res = call <16 x i32> @llvm.x86.avx512.pminu.d(<16 x i32> %a0, <16 x i32> %a1) ; <<16 x i32>> [#uses=1]
324 ret <16 x i32> %res
325}
326declare <16 x i32> @llvm.x86.avx512.pminu.d(<16 x i32>, <16 x i32>) nounwind readonly
327
328define <8 x i64> @test_x86_pminu_q(<8 x i64> %a0, <8 x i64> %a1) {
329 ; CHECK: vpminuq
330 %res = call <8 x i64> @llvm.x86.avx512.pminu.q(<8 x i64> %a0, <8 x i64> %a1) ; <<8 x i64>> [#uses=1]
331 ret <8 x i64> %res
332}
333declare <8 x i64> @llvm.x86.avx512.pminu.q(<8 x i64>, <8 x i64>) nounwind readonly
334
335define <16 x i32> @test_x86_pmins_d(<16 x i32> %a0, <16 x i32> %a1) {
336 ; CHECK: vpminsd
337 %res = call <16 x i32> @llvm.x86.avx512.pmins.d(<16 x i32> %a0, <16 x i32> %a1) ; <<16 x i32>> [#uses=1]
338 ret <16 x i32> %res
339}
340declare <16 x i32> @llvm.x86.avx512.pmins.d(<16 x i32>, <16 x i32>) nounwind readonly
341
342define <8 x i64> @test_x86_pmins_q(<8 x i64> %a0, <8 x i64> %a1) {
343 ; CHECK: vpminsq
344 %res = call <8 x i64> @llvm.x86.avx512.pmins.q(<8 x i64> %a0, <8 x i64> %a1) ; <<8 x i64>> [#uses=1]
345 ret <8 x i64> %res
346}
347declare <8 x i64> @llvm.x86.avx512.pmins.q(<8 x i64>, <8 x i64>) nounwind readonly
Elena Demikhovskydacddb02013-11-03 13:46:31 +0000348
349define <16 x i32> @test_conflict_d(<16 x i32> %a) {
Elena Demikhovsky6270b382013-12-10 11:58:35 +0000350 ; CHECK: movw $-1, %ax
351 ; CHECK: vpxor
Elena Demikhovskydacddb02013-11-03 13:46:31 +0000352 ; CHECK: vpconflictd
Elena Demikhovsky6270b382013-12-10 11:58:35 +0000353 %res = call <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32> %a, <16 x i32> zeroinitializer, i16 -1)
Elena Demikhovskydacddb02013-11-03 13:46:31 +0000354 ret <16 x i32> %res
355}
Elena Demikhovskydacddb02013-11-03 13:46:31 +0000356
Elena Demikhovsky6270b382013-12-10 11:58:35 +0000357declare <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32>, <16 x i32>, i16) nounwind readonly
Elena Demikhovskydacddb02013-11-03 13:46:31 +0000358
Elena Demikhovsky6270b382013-12-10 11:58:35 +0000359define <8 x i64> @test_conflict_q(<8 x i64> %a) {
360 ; CHECK: movb $-1, %al
361 ; CHECK: vpxor
362 ; CHECK: vpconflictq
363 %res = call <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64> %a, <8 x i64> zeroinitializer, i8 -1)
Elena Demikhovskydacddb02013-11-03 13:46:31 +0000364 ret <8 x i64> %res
365}
Elena Demikhovsky6270b382013-12-10 11:58:35 +0000366
367declare <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64>, <8 x i64>, i8) nounwind readonly
368
369
370define <16 x i32> @test_maskz_conflict_d(<16 x i32> %a, i16 %mask) {
371 ; CHECK: vpconflictd
372 %res = call <16 x i32> @llvm.x86.avx512.mask.conflict.d.512(<16 x i32> %a, <16 x i32> zeroinitializer, i16 %mask)
373 ret <16 x i32> %res
374}
375
376define <8 x i64> @test_mask_conflict_q(<8 x i64> %a, <8 x i64> %b, i8 %mask) {
377 ; CHECK: vpconflictq
378 %res = call <8 x i64> @llvm.x86.avx512.mask.conflict.q.512(<8 x i64> %a, <8 x i64> %b, i8 %mask)
379 ret <8 x i64> %res
380}
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000381
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000382define <16 x float> @test_x86_mask_blend_ps_512(i16 %a0, <16 x float> %a1, <16 x float> %a2) {
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000383 ; CHECK: vblendmps
384 %m0 = bitcast i16 %a0 to <16 x i1>
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000385 %res = call <16 x float> @llvm.x86.avx512.mask.blend.ps.512(<16 x i1> %m0, <16 x float> %a1, <16 x float> %a2) ; <<16 x float>> [#uses=1]
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000386 ret <16 x float> %res
387}
Elena Demikhovsky6270b382013-12-10 11:58:35 +0000388
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000389declare <16 x float> @llvm.x86.avx512.mask.blend.ps.512(<16 x i1> %a0, <16 x float> %a1, <16 x float> %a2) nounwind readonly
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000390
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000391define <8 x double> @test_x86_mask_blend_pd_512(i8 %a0, <8 x double> %a1, <8 x double> %a2) {
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000392 ; CHECK: vblendmpd
393 %m0 = bitcast i8 %a0 to <8 x i1>
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000394 %res = call <8 x double> @llvm.x86.avx512.mask.blend.pd.512(<8 x i1> %m0, <8 x double> %a1, <8 x double> %a2) ; <<8 x double>> [#uses=1]
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000395 ret <8 x double> %res
396}
Cameron McInallycbb51da2013-12-04 18:05:36 +0000397
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000398define <8 x double> @test_x86_mask_blend_pd_512_memop(<8 x double> %a, <8 x double>* %ptr, i8 %mask) {
399 ; CHECK-LABEL: test_x86_mask_blend_pd_512_memop
Cameron McInallycbb51da2013-12-04 18:05:36 +0000400 ; CHECK: vblendmpd {{.*}}, {{%zmm[0-9]}}, {{%zmm[0-9]}} {%k1}
401 %vmask = bitcast i8 %mask to <8 x i1>
402 %b = load <8 x double>* %ptr
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000403 %res = call <8 x double> @llvm.x86.avx512.mask.blend.pd.512(<8 x i1> %vmask, <8 x double> %a, <8 x double> %b) ; <<8 x double>> [#uses=1]
Cameron McInallycbb51da2013-12-04 18:05:36 +0000404 ret <8 x double> %res
405}
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000406declare <8 x double> @llvm.x86.avx512.mask.blend.pd.512(<8 x i1> %a0, <8 x double> %a1, <8 x double> %a2) nounwind readonly
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000407
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000408define <16 x i32> @test_x86_mask_blend_d_512(i16 %a0, <16 x i32> %a1, <16 x i32> %a2) {
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000409 ; CHECK: vpblendmd
410 %m0 = bitcast i16 %a0 to <16 x i1>
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000411 %res = call <16 x i32> @llvm.x86.avx512.mask.blend.d.512(<16 x i1> %m0, <16 x i32> %a1, <16 x i32> %a2) ; <<16 x i32>> [#uses=1]
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000412 ret <16 x i32> %res
413}
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000414declare <16 x i32> @llvm.x86.avx512.mask.blend.d.512(<16 x i1> %a0, <16 x i32> %a1, <16 x i32> %a2) nounwind readonly
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000415
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000416define <8 x i64> @test_x86_mask_blend_q_512(i8 %a0, <8 x i64> %a1, <8 x i64> %a2) {
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000417 ; CHECK: vpblendmq
418 %m0 = bitcast i8 %a0 to <8 x i1>
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000419 %res = call <8 x i64> @llvm.x86.avx512.mask.blend.q.512(<8 x i1> %m0, <8 x i64> %a1, <8 x i64> %a2) ; <<8 x i64>> [#uses=1]
Cameron McInallyd80f7d32013-11-04 19:14:56 +0000420 ret <8 x i64> %res
421}
Cameron McInallye3cc4aa2013-12-06 13:35:35 +0000422declare <8 x i64> @llvm.x86.avx512.mask.blend.q.512(<8 x i1> %a0, <8 x i64> %a1, <8 x i64> %a2) nounwind readonly
Elena Demikhovskyde3f7512014-01-01 15:12:34 +0000423
424 define <8 x i32> @test_cvtpd2udq(<8 x double> %a) {
425 ;CHECK: vcvtpd2udq {ru-sae}{{.*}}encoding: [0x62,0xf1,0xfc,0x58,0x79,0xc0]
426 %res = call <8 x i32> @llvm.x86.avx512.mask.cvtpd2udq.512(<8 x double> %a, <8 x i32>zeroinitializer, i8 -1, i32 2)
427 ret <8 x i32>%res
428 }
429 declare <8 x i32> @llvm.x86.avx512.mask.cvtpd2udq.512(<8 x double>, <8 x i32>, i8, i32)
430
431 define <16 x i32> @test_cvtps2udq(<16 x float> %a) {
432 ;CHECK: vcvtps2udq {rd-sae}{{.*}}encoding: [0x62,0xf1,0x7c,0x38,0x79,0xc0]
433 %res = call <16 x i32> @llvm.x86.avx512.mask.cvtps2udq.512(<16 x float> %a, <16 x i32>zeroinitializer, i16 -1, i32 1)
434 ret <16 x i32>%res
435 }
436 declare <16 x i32> @llvm.x86.avx512.mask.cvtps2udq.512(<16 x float>, <16 x i32>, i16, i32)
437
438 define i16 @test_cmpps(<16 x float> %a, <16 x float> %b) {
439 ;CHECK: vcmpleps {sae}{{.*}}encoding: [0x62,0xf1,0x7c,0x18,0xc2,0xc1,0x02]
440 %res = call i16 @llvm.x86.avx512.mask.cmp.ps.512(<16 x float> %a, <16 x float> %b, i32 2, i16 -1, i32 8)
441 ret i16 %res
442 }
443 declare i16 @llvm.x86.avx512.mask.cmp.ps.512(<16 x float> , <16 x float> , i32, i16, i32)
444
445 define i8 @test_cmppd(<8 x double> %a, <8 x double> %b) {
446 ;CHECK: vcmpneqpd %zmm{{.*}}encoding: [0x62,0xf1,0xfd,0x48,0xc2,0xc1,0x04]
447 %res = call i8 @llvm.x86.avx512.mask.cmp.pd.512(<8 x double> %a, <8 x double> %b, i32 4, i8 -1, i32 4)
448 ret i8 %res
449 }
450 declare i8 @llvm.x86.avx512.mask.cmp.pd.512(<8 x double> , <8 x double> , i32, i8, i32)