Hi all,

This patch implements the missed optimisation noted in PR117850.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117850

Changes since the last revision:
        - Now processing different function signatures programatically
        - Fixed ICE RE the type referred to by a BIT_FIELD_REF
        - Modified testcase regex to account for commutativity
        - Removed vabal_combine.c in favour of coverage in fold_to_highpart_1.c
        - Supported widening floating-point conversions
        - General response to feedback from Richard S., Christophe Lyon.

Notes:
        - I'm on the fence about adding more conservative assertions to 
aarch64_duplicate_vector_cst.
          E.g.
                        gcc_assert (types_compatible_p (TREE_TYPE (TREE_TYPE 
(vec_in)),
                                                       (TREE_TYPE (out_ty))));

        - I give this test in fold_to_highpart_7.c; 
https://godbolt.org/z/sG6GdEdGb.  It's interesting
          that the current behavior of GCC is worse than GCC14, trunk targeting 
aarch64_be, and  Clang.

          Maybe it's worth a thought?

Bootstrapped and regtested on aarch64-none-linux-gnu. This work was also
tested on a cross-compiler targeting aarch64_be-none-linux-gnu.

OK for stage-1?

Thanks,
Spencer

Spencer Abson (1):
  AArch64: Fold builtins with highpart args to highpart equivalent
    [PR117850]

 gcc/config/aarch64/aarch64-builtin-pairs.def  |  81 ++
 gcc/config/aarch64/aarch64-builtins.cc        | 206 +++++
 .../aarch64/simd/fold_to_highpart_1.c         | 733 ++++++++++++++++++
 .../aarch64/simd/fold_to_highpart_2.c         |  86 ++
 .../aarch64/simd/fold_to_highpart_3.c         |  81 ++
 .../aarch64/simd/fold_to_highpart_4.c         |  77 ++
 .../aarch64/simd/fold_to_highpart_5.c         |  38 +
 .../aarch64/simd/fold_to_highpart_6.c         |  94 +++
 .../aarch64/simd/fold_to_highpart_7.c         |  36 +
 .../gcc.target/aarch64/simd/vabal_combine.c   |  72 --
 10 files changed, 1432 insertions(+), 72 deletions(-)
 create mode 100644 gcc/config/aarch64/aarch64-builtin-pairs.def
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_1.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_2.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_3.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_4.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_5.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_6.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_7.c
 delete mode 100644 gcc/testsuite/gcc.target/aarch64/simd/vabal_combine.c

-- 
2.34.1

Reply via email to