https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126239
--- Comment #4 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
imp_gauge_force seems to have changed but that's doing what I had expected
the pointer base calculation is now lifted outside the loop and the addressing
modes
inside the loop becomes simpler:
@@
lea 0x0(%r13,%r13,2),%rsi
xor %edi,%edi
shl $0x7,%rsi
+ add $0x429ea0,%rsi
test %r8d,%r8d
jg <imp_gauge_force+0x23a>
inc %edi
add $0x18,%rsi
@@
- data16 cs nopw 0x0(%rax,%rax,1)
- nopl (%rax)
+ nopl 0x0(%rax)
@@
- vmovdqu 0x429ea0(%rsi),%xmm6
+ vmovdqu (%rsi),%xmm6
@@
- vmovdqu32 0x429ea0(%rsi,%rax,4),%xmm6{%k1}{z}
+ vmovdqu32 (%rsi,%rax,4),%xmm6{%k1}{z}
which has a knock on effect on the alignment of the loop (and of many other
functions in the file).
So I wonder if you're not seeing the effect of alignment changes, or is the
more complicated addressing modes faster somehow?
But at the GIMPLE level the transformation looks correct.