diff options
author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2013-10-09 08:16:14 +0000 |
---|---|---|
committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2013-10-09 08:16:14 +0000 |
commit | 50dc2ad46ca9a5391bc75c9e3620337afefb995c (patch) | |
tree | 976df2a11f93b3e1abe0f86d0892d5469e76b0f4 /test/CodeGen/X86 | |
parent | d29bae8bc9b393a24c7f3a1812b88763505eda11 (diff) | |
download | llvm-50dc2ad46ca9a5391bc75c9e3620337afefb995c.tar.gz llvm-50dc2ad46ca9a5391bc75c9e3620337afefb995c.tar.bz2 llvm-50dc2ad46ca9a5391bc75c9e3620337afefb995c.tar.xz |
AVX-512: Added VRCP28 and VRSQRT28 instructions and intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192283 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86')
-rw-r--r-- | test/CodeGen/X86/avx512-intrinsics.ll | 74 |
1 files changed, 60 insertions, 14 deletions
diff --git a/test/CodeGen/X86/avx512-intrinsics.ll b/test/CodeGen/X86/avx512-intrinsics.ll index dc2ab859ce..ebf8c2440a 100644 --- a/test/CodeGen/X86/avx512-intrinsics.ll +++ b/test/CodeGen/X86/avx512-intrinsics.ll @@ -1,39 +1,52 @@ ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s declare i32 @llvm.x86.avx512.kortestz(i16, i16) nounwind readnone -; CHECK: test_x86_avx3_kortestz +; CHECK: test_kortestz ; CHECK: kortestw ; CHECK: sete -define i32 @test_x86_avx3_kortestz(i16 %a0, i16 %a1) { +define i32 @test_kortestz(i16 %a0, i16 %a1) { %res = call i32 @llvm.x86.avx512.kortestz(i16 %a0, i16 %a1) ret i32 %res } declare i32 @llvm.x86.avx512.kortestc(i16, i16) nounwind readnone -; CHECK: test_x86_avx3_kortestc +; CHECK: test_kortestc ; CHECK: kortestw ; CHECK: sbbl -define i32 @test_x86_avx3_kortestc(i16 %a0, i16 %a1) { +define i32 @test_kortestc(i16 %a0, i16 %a1) { %res = call i32 @llvm.x86.avx512.kortestc(i16 %a0, i16 %a1) ret i32 %res } -define <16 x float> @test_x86_avx3_rcp_ps_512(<16 x float> %a0) { +define <16 x float> @test_rcp_ps_512(<16 x float> %a0) { ; CHECK: vrcp14ps %res = call <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1] ret <16 x float> %res } declare <16 x float> @llvm.x86.avx512.rcp14.ps.512(<16 x float>) nounwind readnone -define <8 x double> @test_x86_avx3_rcp_pd_512(<8 x double> %a0) { +define <8 x double> @test_rcp_pd_512(<8 x double> %a0) { ; CHECK: vrcp14pd %res = call <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1] ret <8 x double> %res } declare <8 x double> @llvm.x86.avx512.rcp14.pd.512(<8 x double>) nounwind readnone +define <16 x float> @test_rcp28_ps_512(<16 x float> %a0) { + ; CHECK: vrcp28ps + %res = call <16 x float> @llvm.x86.avx512.rcp28.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1] + ret <16 x float> %res +} +declare <16 x float> @llvm.x86.avx512.rcp28.ps.512(<16 x float>) nounwind readnone + +define <8 x double> @test_rcp28_pd_512(<8 x double> %a0) { + ; CHECK: vrcp28pd + %res = call <8 x double> @llvm.x86.avx512.rcp28.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1] + ret <8 x double> %res +} +declare <8 x double> @llvm.x86.avx512.rcp28.pd.512(<8 x double>) nounwind readnone -define <8 x double> @test_x86_avx3_rndscale_pd_512(<8 x double> %a0) { +define <8 x double> @test_rndscale_pd_512(<8 x double> %a0) { ; CHECK: vrndscale %res = call <8 x double> @llvm.x86.avx512.rndscale.pd.512(<8 x double> %a0, i32 7) ; <<8 x double>> [#uses=1] ret <8 x double> %res @@ -41,7 +54,7 @@ define <8 x double> @test_x86_avx3_rndscale_pd_512(<8 x double> %a0) { declare <8 x double> @llvm.x86.avx512.rndscale.pd.512(<8 x double>, i32) nounwind readnone -define <16 x float> @test_x86_avx3_rndscale_ps_512(<16 x float> %a0) { +define <16 x float> @test_rndscale_ps_512(<16 x float> %a0) { ; CHECK: vrndscale %res = call <16 x float> @llvm.x86.avx512.rndscale.ps.512(<16 x float> %a0, i32 7) ; <<16 x float>> [#uses=1] ret <16 x float> %res @@ -49,37 +62,70 @@ define <16 x float> @test_x86_avx3_rndscale_ps_512(<16 x float> %a0) { declare <16 x float> @llvm.x86.avx512.rndscale.ps.512(<16 x float>, i32) nounwind readnone -define <16 x float> @test_x86_avx3_rsqrt_ps_512(<16 x float> %a0) { +define <16 x float> @test_rsqrt_ps_512(<16 x float> %a0) { ; CHECK: vrsqrt14ps %res = call <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1] ret <16 x float> %res } declare <16 x float> @llvm.x86.avx512.rsqrt14.ps.512(<16 x float>) nounwind readnone +define <16 x float> @test_rsqrt28_ps_512(<16 x float> %a0) { + ; CHECK: vrsqrt28ps + %res = call <16 x float> @llvm.x86.avx512.rsqrt28.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1] + ret <16 x float> %res +} +declare <16 x float> @llvm.x86.avx512.rsqrt28.ps.512(<16 x float>) nounwind readnone + +define <4 x float> @test_rsqrt14_ss(<4 x float> %a0) { + ; CHECK: vrsqrt14ss + %res = call <4 x float> @llvm.x86.avx512.rsqrt14.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1] + ret <4 x float> %res +} +declare <4 x float> @llvm.x86.avx512.rsqrt14.ss(<4 x float>) nounwind readnone + +define <4 x float> @test_rsqrt28_ss(<4 x float> %a0) { + ; CHECK: vrsqrt28ss + %res = call <4 x float> @llvm.x86.avx512.rsqrt28.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1] + ret <4 x float> %res +} +declare <4 x float> @llvm.x86.avx512.rsqrt28.ss(<4 x float>) nounwind readnone + +define <4 x float> @test_rcp14_ss(<4 x float> %a0) { + ; CHECK: vrcp14ss + %res = call <4 x float> @llvm.x86.avx512.rcp14.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1] + ret <4 x float> %res +} +declare <4 x float> @llvm.x86.avx512.rcp14.ss(<4 x float>) nounwind readnone + +define <4 x float> @test_rcp28_ss(<4 x float> %a0) { + ; CHECK: vrcp28ss + %res = call <4 x float> @llvm.x86.avx512.rcp28.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1] + ret <4 x float> %res +} +declare <4 x float> @llvm.x86.avx512.rcp28.ss(<4 x float>) nounwind readnone -define <8 x double> @test_x86_avx3_sqrt_pd_512(<8 x double> %a0) { +define <8 x double> @test_sqrt_pd_512(<8 x double> %a0) { ; CHECK: vsqrtpd %res = call <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double> %a0) ; <<8 x double>> [#uses=1] ret <8 x double> %res } declare <8 x double> @llvm.x86.avx512.sqrt.pd.512(<8 x double>) nounwind readnone - -define <16 x float> @test_x86_avx3_sqrt_ps_512(<16 x float> %a0) { +define <16 x float> @test_sqrt_ps_512(<16 x float> %a0) { ; CHECK: vsqrtps %res = call <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float> %a0) ; <<16 x float>> [#uses=1] ret <16 x float> %res } declare <16 x float> @llvm.x86.avx512.sqrt.ps.512(<16 x float>) nounwind readnone -define <4 x float> @test_x86_avx3_sqrt_ss(<4 x float> %a0, <4 x float> %a1) { +define <4 x float> @test_sqrt_ss(<4 x float> %a0, <4 x float> %a1) { ; CHECK: vsqrtssz %res = call <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1] ret <4 x float> %res } declare <4 x float> @llvm.x86.avx512.sqrt.ss(<4 x float>, <4 x float>) nounwind readnone -define <2 x double> @test_x86_avx3_sqrt_sd(<2 x double> %a0, <2 x double> %a1) { +define <2 x double> @test_sqrt_sd(<2 x double> %a0, <2 x double> %a1) { ; CHECK: vsqrtsdz %res = call <2 x double> @llvm.x86.avx512.sqrt.sd(<2 x double> %a0, <2 x double> %a1) ; <<2 x double>> [#uses=1] ret <2 x double> %res |