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

--- Comment #19 from Uroš Bizjak <ubizjak at gmail dot com> ---
Some further analysis:

  pretmp_94 = __gcov0.prep_compound_page[7];  <--
  _179 = pretmp_94 + 1;                       <--
  ivtmp.1725_211 = (unsigned long long) _179;

  _135 = (unsigned int) nr_pages_11;
  _134 = _135 + 4294967294;             <--
  _132 = (unsigned long long) _134;     <--
  _89 = (unsigned long long) pretmp_94; <--
  _76 = _89 + 2;       <-
  _19 = _76 + _132;    <-


And the loop exit condition is:

  # ivtmp.1725_77 = PHI <ivtmp.1725_69(9), ivtmp.1725_211(8)>
  ...
  ivtmp.1725_69 = ivtmp.1725_77 + 1;

And the loop exit condition is:

  if (_19 != ivtmp.1725_69)


So, both ivtmp and _19 are calculated from the value at
__gcov0.prep_compound_page. But as shown in Comment #15, we have two separate
reads from the location, the compiler assumes that the value there is
invariant, which is probably not the case.

Reply via email to