AVX-512: added SQRT, VRSQRT14, VCOMISS, VUCOMISS, VRCP14, VPABS
[oota-llvm.git] / test / CodeGen / X86 / avx512-intrinsics.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
2
3 declare i32 @llvm.x86.avx512.kortestz(i16, i16) nounwind readnone
4 ; CHECK: test_x86_avx3_kortestz
5 ; CHECK: kortestw
6 ; CHECK: sete
7 define i32 @test_x86_avx3_kortestz(i16 %a0, i16 %a1) {
8   %res = call i32 @llvm.x86.avx512.kortestz(i16 %a0, i16 %a1) 
9   ret i32 %res
10 }
11
12 declare i32 @llvm.x86.avx512.kortestc(i16, i16) nounwind readnone
13 ; CHECK: test_x86_avx3_kortestc
14 ; CHECK: kortestw
15 ; CHECK: sbbl
16 define i32 @test_x86_avx3_kortestc(i16 %a0, i16 %a1) {
17   %res = call i32 @llvm.x86.avx512.kortestc(i16 %a0, i16 %a1) 
18   ret i32 %res
19 }
20
21 define <16 x float> @test_x86_avx3_rcp_ps_512(<16 x float> %a0) {
22   ; 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 }
26 declare <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float>) nounwind readnone
27
28 define <8 x double> @test_x86_avx3_rcp_pd_512(<8 x double> %a0) {
29   ; 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 }
33 declare <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double>) nounwind readnone
34
35
36 define <8 x double> @test_x86_avx3_rndscale_pd_512(<8 x double> %a0) {
37   ; CHECK: vrndscale
38   %res = call <8 x double> @llvm.x86.avx512.rndscale.pd.512(<8 x double> %a0, i32 7) ; <<8 x double>> [#uses=1]
39   ret <8 x double> %res
40 }
41 declare <8 x double> @llvm.x86.avx512.rndscale.pd.512(<8 x double>, i32) nounwind readnone
42
43
44 define <16 x float> @test_x86_avx3_rndscale_ps_512(<16 x float> %a0) {
45   ; CHECK: vrndscale
46   %res = call <16 x float> @llvm.x86.avx512.rndscale.ps.512(<16 x float> %a0, i32 7) ; <<16 x float>> [#uses=1]
47   ret <16 x float> %res
48 }
49 declare <16 x float> @llvm.x86.avx512.rndscale.ps.512(<16 x float>, i32) nounwind readnone
50
51
52 define <16 x float> @test_x86_avx3_rsqrt_ps_512(<16 x float> %a0) {
53   ; CHECK: vrsqrt14ps
54   %res = call <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
55   ret <16 x float> %res
56 }
57 declare <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float>) nounwind readnone
58
59
60 define <8 x double> @test_x86_avx3_sqrt_pd_512(<8 x double> %a0) {
61   ; CHECK: vsqrtpd
62   %res = call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1]
63   ret <8 x double> %res
64 }
65 declare <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double>) nounwind readnone
66
67
68 define <16 x float> @test_x86_avx3_sqrt_ps_512(<16 x float> %a0) {
69   ; CHECK: vsqrtps
70   %res = call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1]
71   ret <16 x float> %res
72 }
73 declare <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float>) nounwind readnone
74
75 define <4 x float> @test_x86_avx3_sqrt_ss(<4 x float> %a0, <4 x float> %a1) {
76   ; CHECK: vsqrtssz
77   %res = call <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
78   ret <4 x float> %res
79 }
80 declare <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float>, <4 x float>) nounwind readnone
81
82 define <2 x double> @test_x86_avx3_sqrt_sd(<2 x double> %a0, <2 x double> %a1) {
83   ; CHECK: vsqrtsdz
84   %res = call <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1]
85   ret <2 x double> %res
86 }
87 declare <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double>, <2 x double>) nounwind readnone
88