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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The gimple level looks correct:
  <bb 4> [local count: 8209314308]:
  # __cur_2 = PHI <__cur_149(5), _141(3)>
  # __first_156 = PHI <__first_148(5), &D.24777(3)>
  # prephitmp_155 = PHI <pretmp_3(5), 900(3)>
  # prephitmp_153 = PHI <pretmp_142(5), 11(3)>
  # prephitmp_108 = PHI <pretmp_109(5), 22(3)>
  # prephitmp_105 = PHI <pretmp_106(5), 33(3)>
  MEM[(int *)__cur_2] = prephitmp_155;
  MEM[(int *)__cur_2 + 4B] = prephitmp_153;
  MEM[(int *)__cur_2 + 8B] = prephitmp_108;
  MEM[(int *)__cur_2 + 12B] = prephitmp_105;
  __first_148 = __first_156 + 16;
  __cur_149 = __cur_2 + 16;
  if (&MEM <const struct box[19]> [(void *)&D.24777 + 304B] != __first_148)
    goto <bb 5>; [89.00%]
  else
    goto <bb 6>; [11.00%]

  <bb 5> [local count: 7306289739]:
  pretmp_3 = MEM[(int *)__first_148];
  pretmp_142 = MEM[(int *)__first_148 + 4B];
  pretmp_109 = MEM[(int *)__first_148 + 8B];
  pretmp_106 = MEM[(int *)__first_148 + 12B];
  goto <bb 4>; [100.00%]

I suspect the rtl level unroller messes up the first iteration for the stores
in the above case.

Reply via email to