middle-end/110495 - avoid associating constants with (VL) vectors
commitf703d2fd3f03890a180e8cc04df087c208999e81
authorRichard Biener <rguenther@suse.de>
Mon, 3 Jul 2023 08:28:10 +0000 (3 10:28 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 4 Jul 2023 07:04:51 +0000 (4 09:04 +0200)
tree29d94f79261e9b5025f0a5aaf3b2e4814ad6ef34
parent0682a32c026f1e246eb07bb8066abca4636f01d8
middle-end/110495 - avoid associating constants with (VL) vectors

When trying to associate (v + INT_MAX) + INT_MAX we are using
the TREE_OVERFLOW bit to check for correctness.  That isn't
working for VECTOR_CSTs and it can't in general when one considers
VL vectors.  It looks like it should work for COMPLEX_CSTs but
I didn't try to single out _Complex int in this change.

The following makes sure that for vectors we use the fallback of
using unsigned arithmetic when associating the above to
v + (INT_MAX + INT_MAX).

PR middle-end/110495
* tree.h (TREE_OVERFLOW): Do not mention VECTOR_CSTs
since we do not set TREE_OVERFLOW on those since the
introduction of VL vectors.
* match.pd (x +- CST +- CST): For VECTOR_CST do not look
at TREE_OVERFLOW to determine validity of association.

* gcc.dg/tree-ssa/addadd-2.c: Amend.
* gcc.dg/tree-ssa/forwprop-27.c: Adjust.
gcc/match.pd
gcc/testsuite/gcc.dg/tree-ssa/addadd-2.c
gcc/testsuite/gcc.dg/tree-ssa/forwprop-27.c
gcc/tree.h