]> git.ipfire.org Git - thirdparty/gcc.git/commit
Check for matching CONST_VECTOR encodings [PR99929]
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 14 Apr 2021 19:06:45 +0000 (20:06 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 14 Apr 2021 19:06:45 +0000 (20:06 +0100)
commita87d3f964df31d4fbceb822c6d293e85c117d992
tree5b0d160928a75af3bbf9d3e0895955f34c0e6373
parent1fce5932a3af575cd02c1d2b786dd1b39b922ebe
Check for matching CONST_VECTOR encodings [PR99929]

PR99929 is one of those “how did we get away with this for so long”
bugs: the equality routines weren't checking whether two variable-length
CONST_VECTORs had the same encoding.  This meant that:

   { 1, 0, 0, 0, 0, 0, ... }

would appear to be equal to:

   { 1, 0, 1, 0, 1, 0, ... }

since both are represented using the elements { 1, 0 }.

gcc/
PR rtl-optimization/99929
* rtl.h (same_vector_encodings_p): New function.
* cse.c (exp_equiv_p): Check that CONST_VECTORs have the same encoding.
* cselib.c (rtx_equal_for_cselib_1): Likewise.
* jump.c (rtx_renumbered_equal_p): Likewise.
* lra-constraints.c (operands_match_p): Likewise.
* reload.c (operands_match_p): Likewise.
* rtl.c (rtx_equal_p_cb, rtx_equal_p): Likewise.

gcc/testsuite/
* gcc.target/aarch64/sve/pr99929_1.c: New file.
* gcc.target/aarch64/sve/pr99929_2.c: Likewise.
gcc/cse.c
gcc/cselib.c
gcc/jump.c
gcc/lra-constraints.c
gcc/reload.c
gcc/rtl.c
gcc/rtl.h
gcc/testsuite/gcc.target/aarch64/sve/pr99929_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/pr99929_2.c [new file with mode: 0644]