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.

Reply via email to