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

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Seems the inliner immediately undoes what ICF did and both get inlined into
main as well.
The aD.2373 array becomes an alias of aD.2363.
And the real bug is introduced in ccp2:
Folding predicate __for_begin_5 == &MEM[(void *)&a + 64B] to 0
on previously:
  intD.9 bD.2396;
  const intD.9 * __for_beginD.2397;
  static const intD.9 aD.2363[16] = {0, 1, 2, 3, 4, 5, 8, 15, 16, 17, 512,
1020, 1021, 1022, 1023, 1024};
  intD.9 bD.2394;
  const intD.9 * __for_beginD.2395;
  static const intD.9 aD.2373[16];

  <bb 2> [local count: 63136019]:
  printf ("foo ");

  <bb 3> [local count: 1073741820]:
  # __for_begin_8 = PHI <&aD.2363(2), __for_begin_10(4)>
  if (__for_begin_8 == &MEM[(voidD.46 *)&aD.2363 + 64B])
    goto <bb 5>; [5.88%]
  else
    goto <bb 4>; [94.12%]

  <bb 4> [local count: 1010605800]:
  b_9 = *__for_begin_8;
  printf ("%d, ", b_9);
  __for_begin_10 = __for_begin_8 + 4;
  goto <bb 3>; [100.00%]

  <bb 5> [local count: 63136019]:
  printf ("end\nbar ");

  <bb 6> [local count: 1073741825]:
  # __for_begin_5 = PHI <&aD.2373(5), __for_begin_7(7)>
  if (__for_begin_5 == &MEM[(voidD.46 *)&aD.2373 + 64B])
    goto <bb 8>; [5.88%]
  else
    goto <bb 7>; [94.12%]

  <bb 7> [local count: 1010605805]:
  b_6 = *__for_begin_5;
  printf ("%d, ", b_6);
  __for_begin_7 = __for_begin_5 + 4;
  goto <bb 6>; [100.00%]

  <bb 8> [local count: 63136019]:
  __builtin_puts (&"end"[0]);

Reply via email to