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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jsm28 at gcc dot gnu.org

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Olaf Krzikalla from comment #3)
> The type `aligned_double*` could be interpreted in two ways: 
> 
> 1. A aligned pointer to an array of doubles packed in the usual way. That's
> how the vectorizer currently treats it.
> 2. A pointer to an array of aligned doubles. In that case `mov*pd`
> instructions shouldn't be generated at all.

it's not the vectorizer that treats it in this particular way, it's the
frontend that chooses to perform a[i] as

  *(a + (sizetype) ((long unsigned int) i * 8))

which particularly means interpreting the "array" as dense, but also
re-using aligned_double * for the offsetted type it dereferences.  You
can argue that's inconsistent (yes, it is), but it's outside of the
language standard.

I'm CCing Joseph who possibly knows how this is supposed to behave.

Reply via email to