From: Andrew Pinski Date: Mon, 22 Jul 2024 18:19:11 +0000 (-0700) Subject: aarch64: Rename bic/orn patterns to iorn/andn for vector modes X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fe2e945c18752903d8db4118ef033d606525dc83;p=thirdparty%2Fgcc.git aarch64: Rename bic/orn patterns to iorn/andn for vector modes This renames the patterns orn3 to iorn3 so it matches the new optab that was added with r15-1890-gf379596e0ba99d. Likewise for bic3 to andn3. Note the operand 1 and operand 2 are swapped from the original patterns to match the optab now. Built and tested for aarch64-linux-gnu with no regression. gcc/ChangeLog: * config/aarch64/aarch64-simd.md (bic3): Rename to ... (andn3): This. Also swap operands. (orn3): Rename to ... (iorn3): This. Also swap operands. (vec_cmp): Update orn call to iorn and swap the last two arguments. gcc/testsuite/ChangeLog: * g++.target/aarch64/vect_cmp-1.C: New test. Signed-off-by: Andrew Pinski --- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index bbeee221f37c..459e11b09a19 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -322,21 +322,21 @@ [(set_attr "length" "4")] ) -(define_insn "orn3" +(define_insn "iorn3" [(set (match_operand:VDQ_I 0 "register_operand" "=w") - (ior:VDQ_I (not:VDQ_I (match_operand:VDQ_I 1 "register_operand" "w")) - (match_operand:VDQ_I 2 "register_operand" "w")))] + (ior:VDQ_I (not:VDQ_I (match_operand:VDQ_I 2 "register_operand" "w")) + (match_operand:VDQ_I 1 "register_operand" "w")))] "TARGET_SIMD" - "orn\t%0., %2., %1." + "orn\t%0., %1., %2." [(set_attr "type" "neon_logic")] ) -(define_insn "bic3" +(define_insn "andn3" [(set (match_operand:VDQ_I 0 "register_operand" "=w") - (and:VDQ_I (not:VDQ_I (match_operand:VDQ_I 1 "register_operand" "w")) - (match_operand:VDQ_I 2 "register_operand" "w")))] + (and:VDQ_I (not:VDQ_I (match_operand:VDQ_I 2 "register_operand" "w")) + (match_operand:VDQ_I 1 "register_operand" "w")))] "TARGET_SIMD" - "bic\t%0., %2., %1." + "bic\t%0., %1., %2." [(set_attr "type" "neon_logic")] ) @@ -4064,7 +4064,7 @@ tmp0, mode), lowpart_subreg (mode, tmp1, mode))); - emit_insn (gen_orn3 (operands[0], tmp2, operands[0])); + emit_insn (gen_iorn3 (operands[0], operands[0], tmp2)); } break; @@ -4111,7 +4111,7 @@ else if (code == UNEQ) { emit_insn (gen_aarch64_cmeq (tmp, operands[2], operands[3])); - emit_insn (gen_orn3 (operands[0], operands[0], tmp)); + emit_insn (gen_iorn3 (operands[0], tmp, operands[0])); } break; diff --git a/gcc/testsuite/g++.target/aarch64/vect_cmp-1.C b/gcc/testsuite/g++.target/aarch64/vect_cmp-1.C new file mode 100644 index 000000000000..b82d87827d30 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/vect_cmp-1.C @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2 -fdump-tree-optimized" } */ +/* { dg-final { check-function-bodies "**" "" "" { target { le } } } } */ + +#pragma GCC target "+nosve" + +#define vect8 __attribute__((vector_size(8) )) + +/** +**bar1: +** fcmgt v([0-9]+).2s, v[0-9]+.2s, v[0-9]+.2s +** bic v0.8b, v2.8b, v\1.8b +** ret +*/ +extern "C" +vect8 int bar1(vect8 float a, vect8 float b, vect8 int c) +{ + return (a > b) ? 0 : c; +} + +/** +**bar2: +** fcmgt v([0-9]+).2s, v[0-9]+.2s, v[0-9]+.2s +** orn v0.8b, v2.8b, v\1.8b +** ret +*/ +extern "C" +vect8 int bar2(vect8 float a, vect8 float b, vect8 int c) +{ + return (a > b) ? c : -1; +} + +// We should produce a BIT_ANDC and BIT_IORC here. + +// { dg-final { scan-tree-dump ".BIT_ANDN " "optimized" } } +// { dg-final { scan-tree-dump ".BIT_IORN " "optimized" } } +