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

--- Comment #3 from amker at gcc dot gnu.org ---
So given below dump before sccp:

  <bb 2> [local count: 14598063]:

  <bb 3> [local count: 118111601]:
  # eu_19 = PHI <0(2), eu_13(7)>

  <bb 4> [local count: 955630224]:
  # dj.1_18 = PHI <0(3), _1(8)>
  _1 = dj.1_18 + 1;
  if (_1 <= 1)
    goto <bb 8>; [89.00%]
  else
    goto <bb 5>; [11.00%]

  <bb 8> [local count: 850510900]:
  goto <bb 4>; [100.00%]

  <bb 5> [local count: 118111601]:
  # _2 = PHI <_1(4)>
  _4 = _2 != 3;
  _5 = (unsigned int) _4;
  _15 = 1 - _5;
  eu_13 = _15 + eu_19;
  if (eu_13 <= 1)
    goto <bb 7>; [87.64%]
  else
    goto <bb 6>; [12.36%]

  <bb 7> [local count: 103513538]:
  goto <bb 3>; [100.00%]

  <bb 6> [local count: 14598063]:
  # _25 = PHI <_2(5)>
  dj = _25;
  return;

before sccp, e_13, _15 and e_19 was identified as:
e_13: {_15, _15}
_15 : _15
e_19: {0, _15}

During sccp, it proves _15 equals to 0 and thus:
e_13: 0
_15 : 0
e_19: {0, _15}

This information is cached and used in ivopts.

Reply via email to