diff options
author | Joey Gouly <joey.gouly@arm.com> | 2013-08-23 12:01:13 +0000 |
---|---|---|
committer | Joey Gouly <joey.gouly@arm.com> | 2013-08-23 12:01:13 +0000 |
commit | a0b2d332c114571716746ba90c815cfb6f68d4ab (patch) | |
tree | 6dabdf8d992ffc29c1936659bee46519a55f89d8 /test/CodeGen/ARM/vminmaxnm.ll | |
parent | 5768bb8d77892926dff0d078b1fb08c14ea791f3 (diff) | |
download | external_llvm-a0b2d332c114571716746ba90c815cfb6f68d4ab.zip external_llvm-a0b2d332c114571716746ba90c815cfb6f68d4ab.tar.gz external_llvm-a0b2d332c114571716746ba90c815cfb6f68d4ab.tar.bz2 |
[ARMv8] Add CodeGen for VMAXNM/VMINNM.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189103 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/ARM/vminmaxnm.ll')
-rw-r--r-- | test/CodeGen/ARM/vminmaxnm.ll | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/CodeGen/ARM/vminmaxnm.ll b/test/CodeGen/ARM/vminmaxnm.ll index afa73b9..fdf0c6a 100644 --- a/test/CodeGen/ARM/vminmaxnm.ll +++ b/test/CodeGen/ARM/vminmaxnm.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s -mtriple armv8 -mattr=+neon | FileCheck %s +; RUN: llc < %s -mtriple armv8 -mattr=+neon,+v8fp -enable-unsafe-fp-math | FileCheck %s --check-prefix=CHECK-FAST define <4 x float> @vmaxnmq(<4 x float>* %A, <4 x float>* %B) nounwind { ; CHECK: vmaxnmq @@ -36,6 +37,51 @@ define <2 x float> @vminnmd(<2 x float>* %A, <2 x float>* %B) nounwind { ret <2 x float> %tmp3 } +define float @v8fp_vminnm_o(float %a, float %b) { +; CHECK-FAST: v8fp_vminnm_o +; CHECK-FAST-NOT: vcmp +; CHECK-FAST: vminnm.f32 +; CHECK: v8fp_vminnm_o +; CHECK-NOT: vminnm.f32 + %cmp = fcmp olt float %a, %b + %cond = select i1 %cmp, float %a, float %b + ret float %cond +} + +define float @v8fp_vminnm_u(float %a, float %b) { +; CHECK-FAST: v8fp_vminnm_u +; CHECK-FAST-NOT: vcmp +; CHECK-FAST: vminnm.f32 +; CHECK: v8fp_vminnm_u +; CHECK-NOT: vminnm.f32 + %cmp = fcmp ult float %a, %b + %cond = select i1 %cmp, float %a, float %b + ret float %cond +} + +define float @v8fp_vmaxnm_o(float %a, float %b) { +; CHECK-FAST: v8fp_vmaxnm_o +; CHECK-FAST-NOT: vcmp +; CHECK-FAST: vmaxnm.f32 +; CHECK: v8fp_vmaxnm_o +; CHECK-NOT: vmaxnm.f32 + %cmp = fcmp ogt float %a, %b + %cond = select i1 %cmp, float %a, float %b + ret float %cond +} + +define float @v8fp_vmaxnm_u(float %a, float %b) { +; CHECK-FAST: v8fp_vmaxnm_u +; CHECK-FAST-NOT: vcmp +; CHECK-FAST: vmaxnm.f32 +; CHECK: v8fp_vmaxnm_u +; CHECK-NOT: vmaxnm.f32 + %cmp = fcmp ugt float %a, %b + %cond = select i1 %cmp, float %a, float %b + ret float %cond +} + + declare <4 x float> @llvm.arm.neon.vminnm.v4f32(<4 x float>, <4 x float>) nounwind readnone declare <2 x float> @llvm.arm.neon.vminnm.v2f32(<2 x float>, <2 x float>) nounwind readnone declare <4 x float> @llvm.arm.neon.vmaxnm.v4f32(<4 x float>, <4 x float>) nounwind readnone |