This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: vector alignment
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Martin Sebor <msebor at gmail dot com>
- Cc: gcc mailing list <gcc at gcc dot gnu dot org>
- Date: Wed, 3 Apr 2019 13:13:54 +0200
- Subject: Re: vector alignment
- References: <e6fd3216-8581-55a6-24ee-c41662c946da@gmail.com>
On Tue, Apr 2, 2019 at 6:20 PM Martin Sebor <msebor@gmail.com> wrote:
>
> GCC tries to align a vector on its natural boundary, i.e., that
> given by its size, up to MAX_OBJECT_ALIGNMENT. Vectors that are
> bigger than that are either silently [mis]aligned on that same
> maximum boundary (PR 89798), silently truncated (and misaligned),
> or cause an ICE (PR 89797). Compiling the following:
>
> __attribute__ ((vector_size (N))) char v;
>
> _Static_assert (sizeof (v) == N, "size");
> _Static_assert (__alignof__ (v) == N, "alignment");
>
> with N set to 1LLU << I shows these failures:
>
> I < 29 succeeds
> I < 31 fails alignment
> I < 32 ICE
> I >= 32 fails alignment and size
>
> Attribute aligned doesn't seem to have any effect on types or
> variables declared with attribute vector_size. The alignment
> set by the latter prevails.
>
> This happens no matter what scope the vector is defined in (i.e.,
> file or local).
>
> I have some questions:
>
> 1) Is there some reason to align vectors on the same boundary
> as their size no matter how big it is? I can't find such
> a requirement in the ABIs I looked at. Or would it be more
> appropriate to align the big ones on the preferred boundary
> for the target? For instance, does it make more sense to
> align a 64KB vector on a 64KB boundary than on, say,
> a 64-byte boundary (or some other boundary less than 64K?)
I don't think there's a good reason. Instead I think that
BIGGEST_ALIGNMENT is what we should go for as upper limit,
anything bigger doesn't make sense (unless the user explicitely
requests it).
> 2) If not, is it then appropriate to underalign very large
> vectors on a boundary less than their size?
Yes.
> 3) Should the aligned attribute not override the default vector
> alignment?
Yes, but doesn't it already?
> I would like to think the answer to (1) is that vectors should
> be aligned on the preferred boundary for the target/ABI. If
> that's feasible, it should also obviate question (2).
>
> I believe the answer to (3) is yes. If not, GCC should issue
> a warning that it doesn't honor the aligned attribute.
>
> Thanks
> Martin