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

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Well, ICF figures out the other part of the partial inlined test() are equal
and I think they are.  The

        if (i >= S){
            return false;
        }

tests are inlined and eliminated (I think correctly so).  -fno-partial-inlining
also avoids the issue.

The issue is that ICF doesn't wipe (or compare) range info so we get after
inlining:

  <bb 2> [local count: 10737416]:
  goto <bb 6>; [100.00%]

  <bb 3> [local count: 1063004409]:
  # RANGE [irange] long unsigned int [0, 591] NONZERO 0x3ff
  _5 = (long unsigned int) i_2;
  # RANGE [irange] unsigned int [0, 287] NONZERO 0x1ff
  _11 = (unsigned int) _5;

Reply via email to