Changes since v2:
* Code clean up from Andrea's comments.
* Replaced gimple_build_vector_from_val with better overload in
aarch64-builtins.cc.
* Fixed semantically redundant safety check loop in cse_main(), it now
skips the instruction if the wide duplicate destination register has
been modified between the widest vec_dup and the current insn. Also
this loop exits when it reaches the end of the basic block.
* Removed redundant default constructor from cse_vec_duplicate_match
struct.
* Removed redundant copy_rtx from line 6990 since we aren't modifying
dup_src and we are just using it as a replacement source.
Dylan Rees (2):
aarch64: Improve simd highpart builtin folding
middle-end: Eliminate redundant scalar duplication at different vector
widths
gcc/config/aarch64/aarch64-builtins.cc | 16 +-
gcc/cse.cc | 231 +++++++++++++++++-
.../aarch64/simd/fold_to_highpart_7.c | 28 +++
gcc/testsuite/gcc.target/i386/pr81501-9a.c | 4 +-
gcc/testsuite/gcc.target/i386/pr81501-9b.c | 2 +-
5 files changed, 273 insertions(+), 8 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/fold_to_highpart_7.c
--
2.43.0