https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81410
--- Comment #5 from Marc Glisse <glisse at gcc dot gnu.org> --- Seems related to vectorization. These lines look suspicious: vect__37.14_78 = MEM[(long int *)_30]; vect__37.15_72 = MEM[(long int *)_30 + 16B]; vect__37.16_70 = MEM[(long int *)_30 + 32B]; vect__37.17_68 = MEM[(long int *)_30 + 48B]; MEM[(long int *)_28] = vect__37.14_78; MEM[(long int *)_28 + 16B] = vect__37.15_72; MEM[(long int *)_28 + 32B] = vect__37.16_70; MEM[(long int *)_28 + 48B] = vect__37.17_68; where _30 is for b, _28 is for a, and I would expect to see gaps in the reads from b (+24, +48, +72 instead of +16, +32 and +48). But I haven't checked, this is only a first guess.