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

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-10-14
                 CC|                            |law at gcc dot gnu.org,
                   |                            |marxin at gcc dot gnu.org
     Ever confirmed|0                           |1
      Known to fail|                            |6.1.0, 7.0

--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Confirmed, started with r232361. IV canon can't identify number of iterations:

Before:
;; Function f7 (f7, funcdef_no=11, decl_uid=2279, cgraph_uid=11,
symbol_order=11)

Proved that loop 1 iterates 2 times using brute force.
Loop 1 iterates 2 times.
Loop 1 iterates at most 2 times.
Loop 1 likely iterates at most 2 times.
Added canonical iv to loop 1, 2 iterations.
f7 ()
{
  unsigned int a;
  unsigned int c;
  struct _IO_FILE * stderr.0_1;
  unsigned int ivtmp_2;
  unsigned int ivtmp_3;

  <bb 2>:

  <bb 3>:
  # c_14 = PHI <c_6(4), 0(2)>
  # a_15 = PHI <a_5(4), 5(2)>
  # ivtmp_3 = PHI <ivtmp_2(4), 3(2)>
  a_5 = a_15 >> 1;
  c_6 = c_14 + 1;
  ivtmp_2 = ivtmp_3 - 1;
  if (ivtmp_2 != 0)
    goto <bb 4>;
  else
    goto <bb 5>;

  <bb 4>:
  goto <bb 3>;

  <bb 5>:
  # c_4 = PHI <c_6(3)>
  stderr.0_1 = stderr;
  fprintf (stderr.0_1, "cnt: %d\n", c_4);
  return 0;

}


After:
;; Function f7 (f7, funcdef_no=11, decl_uid=2279, cgraph_uid=11,
symbol_order=11)

f7 ()
{
  unsigned int a;
  unsigned int c;
  struct _IO_FILE * stderr.0_1;

  <bb 2>:

  <bb 3>:
  # c_14 = PHI <c_6(4), 0(2)>
  # a_15 = PHI <1(4), 3(2)>
  a_5 = a_15 >> 1;
  c_6 = c_14 + 1;
  if (a_5 != 0)
    goto <bb 4>;
  else
    goto <bb 5>;

  <bb 4>:
  goto <bb 3>;

  <bb 5>:
  # c_4 = PHI <c_6(3)>
  stderr.0_1 = stderr;
  fprintf (stderr.0_1, "cnt: %d\n", c_4);
  return 0;
}

Diff:
  # a_15 = PHI <a_5(4), 5(2)>
  # a_15 = PHI <1(4), 3(2)>

Maybe ivcanon can handle such degenerated situation?
Thoughts?

Reply via email to