https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96075
Bug ID: 96075 Summary: bogus alignment for negative step grouped access Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- double x[1024], y[1024]; void __attribute__((noipa)) boo() { for (int i = 0; i < 512; ++i) { x[2*i] = y[2*(511-i)]; x[2*i+1] = y[2*(511-i)]; } } int main () { for (int i = 0; i < 1024; ++i) { x[i] = 0; y[i] = i; __asm__ volatile (""); } boo (); for (int i = 0; i < 1024; ++i) if (x[i] != y[2*(511 - i/2)]) abort (); return 0; } segfaults because we emit boo: .LFB8: .cfi_startproc xorl %eax, %eax .p2align 4,,10 .p2align 3 .L21: movapd y+8168(%rax), %xmm0 movq %rax, %rdx where this is obviously misaligned.