https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117718
--- Comment #3 from Michael Meissner <meissner at gcc dot gnu.org> --- No, the issue is with DQ addressing (i.e. vector load/store with offset), we can't guarantee that the external address will be properly aligned with the bottom 4 bits must be set to 0. In theory, we have the same thing with DS addressing (i.e. LD and STD), but there the bottom 2 bits must be set to 0. When I wrote the code for Power9, I could not guarantee that people would use vector types when declaring external variables. Consider this program: #include <stddef.h> #include <stdio.h> vector double foo = { 0.0, 0.0 }; float a = 2.0f; double b[3] = { 3.0, 4.0 }; double c[3] = { 5.0, 6.0 }; double d[3]; int main (void) { size_t i; vector double *p_b = (vector double *) &b; vector double *p_c = (vector double *) &c; vector double *p_d = (vector double *) &d; *p_d = *p_b + *p_c; printf ("a = 0x%lx, 0x%lx\n", (unsigned long) &a, ((unsigned long) &a) & 0xf); printf ("b = 0x%lx, 0x%lx\n", (unsigned long) &b, ((unsigned long) &b) & 0xf); printf ("c = 0x%lx, 0x%lx\n", (unsigned long) &c, ((unsigned long) &c) & 0xf); printf ("d = 0x%lx, 0x%lx\n", (unsigned long) &d, ((unsigned long) &d) & 0xf); return 0; } In this program, it produces: a = 0x10020060, offset = 0x0 b = 0x10020030, offset = 0x0 c = 0x10020048, offset = 0x8 d = 0x10020070, offset = 0x0 Note that c is not suitable for a DQ address. In power10, this is folded into the plxv and pstxv instructions because power10 has prefixed and pcrel addressing, which does not have the DQ constraint on addressing. The decision for this is ultimately made in quad_address_p in rs6000.cc, and quad_address_offset_p in rs6000-internal.h. This in turn is called from rs6000_legitimate_offset_address_p, rs6000_legitimate_address_p, and rs6000_secondary_reload_inner which in turn calls quad_address_p if the mode uses DQ addressing (i.e. vector modes). The rs6000_output_move_128bit function also calls quad_address_p, but that is done in final after the addressing decisions have been made.