summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Thumb2/mve-bitarith.ll
diff options
context:
space:
mode:
authorDavid Green <david.green@arm.com>2019-07-05 15:21:29 +0000
committerDavid Green <david.green@arm.com>2019-07-05 15:21:29 +0000
commit47afdaa4872e8617734e50bcc99bab149bfb08f8 (patch)
tree316525d067d06f3f214526340a59aa4f917da927 /llvm/test/CodeGen/Thumb2/mve-bitarith.ll
parentdf173bf9bc811471d6f46ecab55aa30258fd7851 (diff)
downloadbcm5719-llvm-47afdaa4872e8617734e50bcc99bab149bfb08f8.tar.gz
bcm5719-llvm-47afdaa4872e8617734e50bcc99bab149bfb08f8.zip
[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
Diffstat (limited to 'llvm/test/CodeGen/Thumb2/mve-bitarith.ll')
-rw-r--r--llvm/test/CodeGen/Thumb2/mve-bitarith.ll95
1 files changed, 95 insertions, 0 deletions
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, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
+ 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, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
+ 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, <i32 -1, i32 -1, i32 -1, i32 -1>
+ 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, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
+ %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, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
+ %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, <i32 -1, i32 -1, i32 -1, i32 -1>
+ %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, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
+ %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, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
+ %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, <i32 -1, i32 -1, i32 -1, i32 -1>
+ %1 = or <4 x i32> %src2, %0
+ ret <4 x i32> %1
+}
OpenPOWER on IntegriCloud