Andrew Pinski wrote:
The documention on VECTOR_CST is not clear if we can have missing
elements in that the remaining elements are zero. Right we produce such
VECTOR_CST for things like:
#define vector __attribute__((vector_size(16) ))
vector int a = {1, 2};
But is that valid? We currently produce a VECTOR_CST with just two
elements instead of 4. Should we always have the same number of
elements in a VECTOR_CST as there are elements in the vector type?
I think it is reasonable for front-ends to elide initializers and to
follow the usual C semantics that elided initializers are (a) zero, if
the constant is appearing as an initializer for static storage, or (b)
unspecified, "random" values elsewhere.
Requiring explicit zeros is just a way to take up memory. We clearly
wouldn't want to do it for big arrays, and I think we might as well
treat vectors the same way, since we already need logic to handle the
implicit zeros in the back end for arrays and structures.
The counter-argument is that front ends should be explicit. However,
explicit doesn't need to mean verbose; as long as we specify the
semantics I give above, eliding the elements is still perfectly clear.
This is why PR 29091 is failing currently. output_constant assumes
VECTOR_CST have the correct number of elements but the C front-end via
digest_init creates a VECTOR_CST with only 2 elements.
Thus, I think that output_constant should be changed to add the
additional zeros.
--
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713