From db1fb8cd20ab85c130930ca8bf6cec11efb4d9fe Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Fri, 21 Sep 2018 21:25:16 +0000 Subject: [PATCH] [x86] add more tests for poetntial andnp splitting with AVX1; NFC llvm-svn: 342775 --- llvm/test/CodeGen/X86/avx-logic.ll | 57 ++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/llvm/test/CodeGen/X86/avx-logic.ll b/llvm/test/CodeGen/X86/avx-logic.ll index a7430486f66f..379a9751c2fd 100644 --- a/llvm/test/CodeGen/X86/avx-logic.ll +++ b/llvm/test/CodeGen/X86/avx-logic.ll @@ -364,8 +364,8 @@ define <8 x i32> @andn_disguised_i8_elts(<8 x i32> %x, <8 x i32> %y, <8 x i32> % ret <8 x i32> %add1 } -define <8 x i32> @andn_variable_mask_operand(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z) { -; AVX1-LABEL: andn_variable_mask_operand: +define <8 x i32> @andn_variable_mask_operand_no_concat(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z) { +; AVX1-LABEL: andn_variable_mask_operand_no_concat: ; AVX1: # %bb.0: ; AVX1-NEXT: vandnps %ymm2, %ymm0, %ymm0 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 @@ -375,7 +375,7 @@ define <8 x i32> @andn_variable_mask_operand(<8 x i32> %x, <8 x i32> %y, <8 x i3 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 ; AVX1-NEXT: retq ; -; INT256-LABEL: andn_variable_mask_operand: +; INT256-LABEL: andn_variable_mask_operand_no_concat: ; INT256: # %bb.0: ; INT256-NEXT: vpandn %ymm2, %ymm0, %ymm0 ; INT256-NEXT: vpaddd %ymm1, %ymm0, %ymm0 @@ -386,6 +386,57 @@ define <8 x i32> @andn_variable_mask_operand(<8 x i32> %x, <8 x i32> %y, <8 x i3 ret <8 x i32> %add } +define <8 x i32> @andn_constant_mask_operand_no_concat(<8 x i32> %x, <8 x i32> %y) { +; AVX1-LABEL: andn_constant_mask_operand_no_concat: +; AVX1: # %bb.0: +; AVX1-NEXT: vandnps {{.*}}(%rip), %ymm0, %ymm0 +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 +; AVX1-NEXT: vpaddd %xmm2, %xmm3, %xmm2 +; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 +; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 +; AVX1-NEXT: retq +; +; INT256-LABEL: andn_constant_mask_operand_no_concat: +; INT256: # %bb.0: +; INT256-NEXT: vpandn {{.*}}(%rip), %ymm0, %ymm0 +; INT256-NEXT: vpaddd %ymm1, %ymm0, %ymm0 +; INT256-NEXT: retq + %xor = xor <8 x i32> %x, + %and = and <8 x i32> %xor, + %r = add <8 x i32> %and, %y + ret <8 x i32> %r +} + +define <8 x i32> @andn_variable_mask_operand_concat(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z, <8 x i32> %w) { +; AVX1-LABEL: andn_variable_mask_operand_concat: +; AVX1: # %bb.0: +; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 +; AVX1-NEXT: vpaddd %xmm4, %xmm5, %xmm4 +; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 +; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0 +; AVX1-NEXT: vandnps %ymm2, %ymm0, %ymm0 +; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 +; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2 +; AVX1-NEXT: vpaddd %xmm2, %xmm1, %xmm1 +; AVX1-NEXT: vpaddd %xmm3, %xmm0, %xmm0 +; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 +; AVX1-NEXT: retq +; +; INT256-LABEL: andn_variable_mask_operand_concat: +; INT256: # %bb.0: +; INT256-NEXT: vpaddd %ymm1, %ymm0, %ymm0 +; INT256-NEXT: vpandn %ymm2, %ymm0, %ymm0 +; INT256-NEXT: vpaddd %ymm3, %ymm0, %ymm0 +; INT256-NEXT: retq + %add = add <8 x i32> %x, %y + %xor = xor <8 x i32> %add, + %and = and <8 x i32> %xor, %z + %r = add <8 x i32> %and, %w + ret <8 x i32> %r +} + define <8 x i32> @or_disguised_i8_elts(<8 x i32> %x, <8 x i32> %y, <8 x i32> %z) { ; AVX1-LABEL: or_disguised_i8_elts: ; AVX1: # %bb.0: