[llvm] 75eb43a - [AArch64] Add more tests related to vselect with constant condition.
Eli Friedman via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 6 17:07:19 PDT 2021
Author: Eli Friedman
Date: 2021-07-06T17:06:22-07:00
New Revision: 75eb43ab490fd8e16c231fc40e9ec589c867cee5
URL: https://github.com/llvm/llvm-project/commit/75eb43ab490fd8e16c231fc40e9ec589c867cee5
DIFF: https://github.com/llvm/llvm-project/commit/75eb43ab490fd8e16c231fc40e9ec589c867cee5.diff
LOG: [AArch64] Add more tests related to vselect with constant condition.
Not a complete set of tests, but a starting point if anyone wants to
look at improving this.
Added:
Modified:
llvm/test/CodeGen/AArch64/neon-bitwise-instructions.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AArch64/neon-bitwise-instructions.ll b/llvm/test/CodeGen/AArch64/neon-bitwise-instructions.ll
index 2418e8c9260b..4d1e6419b9ef 100644
--- a/llvm/test/CodeGen/AArch64/neon-bitwise-instructions.ll
+++ b/llvm/test/CodeGen/AArch64/neon-bitwise-instructions.ll
@@ -817,28 +817,126 @@ define <4 x i32> @bsl4xi32(<4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
ret <4 x i32> %4
}
-define <8 x i8> @vselect_v8i8(<8 x i8> %a) {
-; CHECK-LABEL: vselect_v8i8:
+define <8 x i8> @vselect_constant_cond_zero_v8i8(<8 x i8> %a) {
+; CHECK-LABEL: vselect_constant_cond_zero_v8i8:
; CHECK: // %bb.0:
-; CHECK-NEXT: movi d1, #0x0000000000ffff
+; CHECK-NEXT: movi d1, #0x00000000ff00ff
; CHECK-NEXT: and v0.8b, v0.8b, v1.8b
; CHECK-NEXT: orr v0.2s, #0
; CHECK-NEXT: ret
- %b = select <8 x i1> <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> <i8 undef, i8 undef, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
+ %b = select <8 x i1> <i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> zeroinitializer
ret <8 x i8> %b
}
-define <4 x i16> @vselect_v4i16(<4 x i16> %a) {
-; CHECK-LABEL: vselect_v4i16:
+define <4 x i16> @vselect_constant_cond_zero_v4i16(<4 x i16> %a) {
+; CHECK-LABEL: vselect_constant_cond_zero_v4i16:
; CHECK: // %bb.0:
-; CHECK-NEXT: movi d1, #0x0000000000ffff
+; CHECK-NEXT: movi d1, #0xffff00000000ffff
; CHECK-NEXT: and v0.8b, v0.8b, v1.8b
; CHECK-NEXT: orr v0.2s, #0
; CHECK-NEXT: ret
- %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i16> %a, <4 x i16> <i16 undef, i16 0, i16 0, i16 0>
+ %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i16> %a, <4 x i16> zeroinitializer
ret <4 x i16> %b
}
+define <4 x i32> @vselect_constant_cond_zero_v4i32(<4 x i32> %a) {
+; CHECK-LABEL: vselect_constant_cond_zero_v4i32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: adrp x8, .LCPI85_0
+; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI85_0]
+; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
+; CHECK-NEXT: orr v0.4s, #0
+; CHECK-NEXT: ret
+ %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i32> %a, <4 x i32> zeroinitializer
+ ret <4 x i32> %b
+}
+
+define <8 x i8> @vselect_constant_cond_v8i8(<8 x i8> %a, <8 x i8> %b) {
+; CHECK-LABEL: vselect_constant_cond_v8i8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: movi d2, #0xffffffffff00ff00
+; CHECK-NEXT: movi d3, #0x00000000ff00ff
+; CHECK-NEXT: and v1.8b, v1.8b, v2.8b
+; CHECK-NEXT: and v0.8b, v0.8b, v3.8b
+; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
+; CHECK-NEXT: ret
+ %c = select <8 x i1> <i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> %b
+ ret <8 x i8> %c
+}
+
+define <4 x i16> @vselect_constant_cond_v4i16(<4 x i16> %a, <4 x i16> %b) {
+; CHECK-LABEL: vselect_constant_cond_v4i16:
+; CHECK: // %bb.0:
+; CHECK-NEXT: movi d2, #0x00ffffffff0000
+; CHECK-NEXT: movi d3, #0xffff00000000ffff
+; CHECK-NEXT: and v1.8b, v1.8b, v2.8b
+; CHECK-NEXT: and v0.8b, v0.8b, v3.8b
+; CHECK-NEXT: orr v0.8b, v0.8b, v1.8b
+; CHECK-NEXT: ret
+ %c = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i16> %a, <4 x i16> %b
+ ret <4 x i16> %c
+}
+
+define <4 x i32> @vselect_constant_cond_v4i32(<4 x i32> %a, <4 x i32> %b) {
+; CHECK-LABEL: vselect_constant_cond_v4i32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: adrp x8, .LCPI88_0
+; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI88_0]
+; CHECK-NEXT: bif v0.16b, v1.16b, v2.16b
+; CHECK-NEXT: ret
+ %c = select <4 x i1> <i1 true, i1 false, i1 false, i1 true>, <4 x i32> %a, <4 x i32> %b
+ ret <4 x i32> %c
+}
+
+define <8 x i8> @vselect_equivalent_shuffle_v8i8(<8 x i8> %a, <8 x i8> %b) {
+; CHECK-LABEL: vselect_equivalent_shuffle_v8i8:
+; CHECK: // %bb.0:
+; CHECK-NEXT: adrp x8, .LCPI89_0
+; CHECK-NEXT: ldr d2, [x8, :lo12:.LCPI89_0]
+; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT: mov v0.d[1], v1.d[0]
+; CHECK-NEXT: tbl v0.8b, { v0.16b }, v2.8b
+; CHECK-NEXT: ret
+ %c = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 9, i32 4, i32 5, i32 6, i32 7>
+ ret <8 x i8> %c
+}
+
+define <8 x i16> @vselect_equivalent_shuffle_v8i16(<8 x i16> %a, <8 x i16> %b) {
+; CHECK-LABEL: vselect_equivalent_shuffle_v8i16:
+; CHECK: // %bb.0:
+; CHECK-NEXT: adrp x8, .LCPI90_0
+; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI90_0]
+; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
+; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
+; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
+; CHECK-NEXT: ret
+ %c = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 9, i32 4, i32 5, i32 6, i32 7>
+ ret <8 x i16> %c
+}
+
+define <4 x i16> @vselect_equivalent_shuffle_v4i16(<4 x i16> %a, <4 x i16> %b) {
+; CHECK-LABEL: vselect_equivalent_shuffle_v4i16:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ext v0.8b, v0.8b, v0.8b, #2
+; CHECK-NEXT: ext v0.8b, v0.8b, v1.8b, #4
+; CHECK-NEXT: ext v0.8b, v0.8b, v0.8b, #2
+; CHECK-NEXT: ret
+ %c = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 3>
+ ret <4 x i16> %c
+}
+
+define <4 x i32> @vselect_equivalent_shuffle_v4i32(<4 x i32> %a, <4 x i32> %b) {
+; CHECK-LABEL: vselect_equivalent_shuffle_v4i32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #4
+; CHECK-NEXT: ext v0.16b, v0.16b, v1.16b, #8
+; CHECK-NEXT: ext v0.16b, v0.16b, v0.16b, #4
+; CHECK-NEXT: ret
+ %c = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 3>
+ ret <4 x i32> %c
+}
+
define <8 x i8> @vselect_cmp_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
; CHECK-LABEL: vselect_cmp_ne:
; CHECK: // %bb.0:
More information about the llvm-commits
mailing list