https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109543
--- Comment #2 from avieira at gcc dot gnu.org --- Sorry for the delay. Here's the typedefs with GNU vectors. typedef struct { float __attribute__ ((vector_size(16))) v[2]; } STRUCT; #ifdef GOOD typedef STRUCT TYPE; #else typedef union { STRUCT s; double d[2]; } TYPE; #endif To be fair I suspect you could see similar behaviour with just 16-byte vectors, but with aarch64 the backend will know to use 64-bit scalar moves for 128-bit BLKmodes, though even then, picking the vector mode would result in more optimal (single vector move) code.