From 47afdaa4872e8617734e50bcc99bab149bfb08f8 Mon Sep 17 00:00:00 2001 From: David Green Date: Fri, 5 Jul 2019 15:21:29 +0000 Subject: [ARM] MVE patterns for VMVN, VORR and VBIC This add simple Q register forms of bitwise not instructions. Differential Revision: https://reviews.llvm.org/D63983 llvm-svn: 365214 --- llvm/test/CodeGen/Thumb2/mve-bitarith.ll | 95 ++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) (limited to 'llvm/test/CodeGen/Thumb2/mve-bitarith.ll') diff --git a/llvm/test/CodeGen/Thumb2/mve-bitarith.ll b/llvm/test/CodeGen/Thumb2/mve-bitarith.ll index a39c8cb007d..1ee57124a60 100644 --- a/llvm/test/CodeGen/Thumb2/mve-bitarith.ll +++ b/llvm/test/CodeGen/Thumb2/mve-bitarith.ll @@ -93,3 +93,98 @@ entry: ret <4 x i32> %0 } +define arm_aapcs_vfpcc <16 x i8> @v_mvn_i8(<16 x i8> %src) { +; CHECK-LABEL: v_mvn_i8: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vmvn q0, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <16 x i8> %src, + ret <16 x i8> %0 +} + +define arm_aapcs_vfpcc <8 x i16> @v_mvn_i16(<8 x i16> %src) { +; CHECK-LABEL: v_mvn_i16: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vmvn q0, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <8 x i16> %src, + ret <8 x i16> %0 +} + +define arm_aapcs_vfpcc <4 x i32> @v_mvn_i32(<4 x i32> %src) { +; CHECK-LABEL: v_mvn_i32: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vmvn q0, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <4 x i32> %src, + ret <4 x i32> %0 +} + +define arm_aapcs_vfpcc <16 x i8> @v_bic_i8(<16 x i8> %src1, <16 x i8> %src2) { +; CHECK-LABEL: v_bic_i8: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vbic q0, q1, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <16 x i8> %src1, + %1 = and <16 x i8> %src2, %0 + ret <16 x i8> %1 +} + +define arm_aapcs_vfpcc <8 x i16> @v_bic_i16(<8 x i16> %src1, <8 x i16> %src2) { +; CHECK-LABEL: v_bic_i16: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vbic q0, q1, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <8 x i16> %src1, + %1 = and <8 x i16> %src2, %0 + ret <8 x i16> %1 +} + +define arm_aapcs_vfpcc <4 x i32> @v_bic_i32(<4 x i32> %src1, <4 x i32> %src2) { +; CHECK-LABEL: v_bic_i32: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vbic q0, q1, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <4 x i32> %src1, + %1 = and <4 x i32> %src2, %0 + ret <4 x i32> %1 +} + +define arm_aapcs_vfpcc <16 x i8> @v_or_i8(<16 x i8> %src1, <16 x i8> %src2) { +; CHECK-LABEL: v_or_i8: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vorn q0, q1, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <16 x i8> %src1, + %1 = or <16 x i8> %src2, %0 + ret <16 x i8> %1 +} + +define arm_aapcs_vfpcc <8 x i16> @v_or_i16(<8 x i16> %src1, <8 x i16> %src2) { +; CHECK-LABEL: v_or_i16: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vorn q0, q1, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <8 x i16> %src1, + %1 = or <8 x i16> %src2, %0 + ret <8 x i16> %1 +} + +define arm_aapcs_vfpcc <4 x i32> @v_or_i32(<4 x i32> %src1, <4 x i32> %src2) { +; CHECK-LABEL: v_or_i32: +; CHECK: @ %bb.0: @ %entry +; CHECK-NEXT: vorn q0, q1, q0 +; CHECK-NEXT: bx lr +entry: + %0 = xor <4 x i32> %src1, + %1 = or <4 x i32> %src2, %0 + ret <4 x i32> %1 +} -- cgit v1.2.3