diff options
| author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2015-03-01 07:44:04 +0000 |
|---|---|---|
| committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2015-03-01 07:44:04 +0000 |
| commit | 02ffd26023f75cd0a96072ed1444c78eb284cd0b (patch) | |
| tree | d3e323676bbaf46220b5de57abbf21fabedd4a1c /llvm/test/CodeGen | |
| parent | 98162469f50b7b21f315c71f23b28d85b9ba32f0 (diff) | |
| download | bcm5719-llvm-02ffd26023f75cd0a96072ed1444c78eb284cd0b.tar.gz bcm5719-llvm-02ffd26023f75cd0a96072ed1444c78eb284cd0b.zip | |
AVX-512: Added mask and rounding mode for scalar arithmetics
Added more tests for scalar instructions to destinguish between AVX and AVX-512 forms.
llvm-svn: 230891
Diffstat (limited to 'llvm/test/CodeGen')
| -rw-r--r-- | llvm/test/CodeGen/X86/avx512-scalar.ll | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-scalar.ll b/llvm/test/CodeGen/X86/avx512-scalar.ll new file mode 100644 index 00000000000..644fda41575 --- /dev/null +++ b/llvm/test/CodeGen/X86/avx512-scalar.ll @@ -0,0 +1,92 @@ +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl --show-mc-encoding | FileCheck %s --check-prefix AVX512 +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx --show-mc-encoding | FileCheck %s --check-prefix AVX + +; AVX512-LABEL: @test_fdiv +; AVX512: vdivss %xmm{{.*}} ## encoding: [0x62 +; AVX-LABEL: @test_fdiv +; AVX: vdivss %xmm{{.*}} ## encoding: [0xc5 + +define float @test_fdiv(float %a, float %b) { + %c = fdiv float %a, %b + ret float %c +} + +; AVX512-LABEL: @test_fsub +; AVX512: vsubss %xmm{{.*}} ## encoding: [0x62 +; AVX-LABEL: @test_fsub +; AVX: vsubss %xmm{{.*}} ## encoding: [0xc5 + +define float @test_fsub(float %a, float %b) { + %c = fsub float %a, %b + ret float %c +} + +; AVX512-LABEL: @test_fadd +; AVX512: vaddsd %xmm{{.*}} ## encoding: [0x62 +; AVX-LABEL: @test_fadd +; AVX: vaddsd %xmm{{.*}} ## encoding: [0xc5 + +define double @test_fadd(double %a, double %b) { + %c = fadd double %a, %b + ret double %c +} + +declare float @llvm.trunc.f32(float %Val) +declare double @llvm.trunc.f64(double %Val) +declare float @llvm.rint.f32(float %Val) +declare double @llvm.rint.f64(double %Val) +declare double @llvm.sqrt.f64(double %Val) +declare float @llvm.sqrt.f32(float %Val) + +; AVX512-LABEL: @test_trunc +; AVX512: vrndscaless +; AVX-LABEL: @test_trunc +; AVX: vroundss + +define float @test_trunc(float %a) { + %c = call float @llvm.trunc.f32(float %a) + ret float %c +} + +; AVX512-LABEL: @test_sqrt +; AVX512: vsqrtsd %xmm{{.*}} ## encoding: [0x62 +; AVX-LABEL: @test_sqrt +; AVX: vsqrtsd %xmm{{.*}} ## encoding: [0xc5 + +define double @test_sqrt(double %a) { + %c = call double @llvm.sqrt.f64(double %a) + ret double %c +} + +; AVX512-LABEL: @test_rint +; AVX512: vrndscaless +; AVX-LABEL: @test_rint +; AVX: vroundss + +define float @test_rint(float %a) { + %c = call float @llvm.rint.f32(float %a) + ret float %c +} + +; AVX512-LABEL: @test_vmax +; AVX512: vmaxss %xmm{{.*}} ## encoding: [0x62 +; AVX-LABEL: @test_vmax +; AVX: vmaxss %xmm{{.*}} ## encoding: [0xc5 + +define float @test_vmax(float %i, float %j) { + %cmp_res = fcmp ogt float %i, %j + %max = select i1 %cmp_res, float %i, float %j + ret float %max +} + +; AVX512-LABEL: @test_mov +; AVX512: vcmpltss %xmm{{.*}} ## encoding: [0x62 +; AVX-LABEL: @test_mov +; AVX: vcmpltss %xmm{{.*}} ## encoding: [0xc5 + +define float @test_mov(float %a, float %b, float %i, float %j) { + %cmp_res = fcmp ogt float %i, %j + %max = select i1 %cmp_res, float %b, float %a + ret float %max +} + |

