https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87288

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amker at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
-fno-ivopts also avoids the issue but still generates aligned accesses:

  400510:       66 0f 10 02             movupd (%rdx),%xmm0
  400514:       83 c6 01                add    $0x1,%esi
  400517:       48 83 c2 20             add    $0x20,%rdx
  40051b:       48 83 c1 10             add    $0x10,%rcx
  40051f:       66 0f 16 42 f0          movhpd -0x10(%rdx),%xmm0
  400524:       0f 29 41 f0             movaps %xmm0,-0x10(%rcx)
  400528:       41 39 f0                cmp    %esi,%r8d
  40052b:       77 e3                   ja     400510 <main+0x40>

Oh, the issue is bogus iteration...  in the original cited assembly
we start with rdx == rcx == 0 and thus iterate until overflow.

IVOPTs does

-  MEM[(double &)vectp_jacobianTransposeds.15_51] = vect_perm_even_49;
-  vectp.11_45 = vectp.11_47 + 16;
-  vectp_jacobianTransposeds.15_52 = vectp_jacobianTransposeds.15_51 + 16;
-  ivtmp_55 = ivtmp_54 + 1;
-  if (ivtmp_55 >= bnd.8_41)
+  MEM[symbol: jacobianTransposeds, index: ivtmp.23_27, offset: 0] =
vect_perm_even_49;
+  ivtmp.23_26 = ivtmp.23_27 + 16;
+  if (ivtmp.23_26 == _19)

the >= -> == transform looks wrong.  Bin?

Reply via email to