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

--- Comment #2 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
The point of the builder is that, if you know the pattern,
you don't need to supply every element value to the builder.
(And indeed you can't when the vector is variable length.)

So something might push:

  { a, b, c, ... }

and leave the other elements implicit.  Same when computing
the result of adding two vectors with the same pattern
(new_binary_operation).  It might be that the overflow
happens in elements that are not encoded.  But something
later could still ask for the value of the fourth or fifth
element and get something that overflows, even if the vector
itself is not marked as overflowing.

E.g. to take chars as an example, we could build:

    { 0x3c, 0x3d, …, 0x43 }
  + { 0x3c, 0x3d, …, 0x43 }

by pushing all 8 elements of each vector, and seeing the
overflow for 0x40+0x40.  We'd then set TREE_OVERFLOW on
the VECTOR_CST.  But we could also just push 0x3c, 0x3d, 0x3e,
add those together, and get the same constant without the
TREE_OVERFLOW.

So I'm not sure that TREE_OVERFLOW on a VECTOR_CST is really meaningful.

Reply via email to