https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88965
--- Comment #1 from Anton Blanchard <anton at samba dot org> --- Here's something more representative. Passing the address via an explicit pointer makes the issue go away. #include <stdint.h> #include <altivec.h> #define LOADU(p) vec_vsx_ld(0, (vector unsigned long *)(p)) static uint64_t blake2b_IV[8] = { 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; vector unsigned long ret; int main(void) { #ifdef GOOD unsigned long *p = &blake2b_IV[0]; ret = LOADU(p); #else ret = LOADU(&blake2b_IV[0]); #endif }