------- Comment #3 from rguenth at gcc dot gnu dot org  2009-11-27 14:18 -------
This is early IPA-SRA which transforms

<bb 2>:
  goto <bb 9>;

<bb 3>:
  p_6.0_3 = (int) p_6_1;
  if (p_6.0_3 <= 100)
    goto <bb 4>;
  else
    goto <bb 5>;

<bb 4>:
  p_6_6 = p_6_1 >> p_6.0_3;

<bb 5>:
  # p_6_7 = PHI <p_6_1(3), p_6_6(4)>
  if (p_6_7 != 0)
    goto <bb 10>;
  else
    goto <bb 6>;

<bb 6>:
  if (p_6_1 <= 49)
    goto <bb 7>;
  else
    goto <bb 8>;

<bb 7>:
  p_6_9 = p_6_1 + 1;

<bb 8>:
  # p_6_10 = PHI <p_6_1(6), p_6_9(7)>

<bb 9>:
  # p_6_1 = PHI <1(2), p_6_10(8)>
  if (p_6_1 <= 2)
    goto <bb 3>;
  else
    goto <bb 10>;

to

<bb 2>:
  goto <bb 9>;

<bb 3>:
  p_6.0_3 = (int) p_6_2;
  if (p_6.0_3 <= 100)
    goto <bb 4>;
  else
    goto <bb 5>;

<bb 4>:
  p_6_5 = p_6_2 >> p_6.0_3;

<bb 5>:
  # p_6_12 = PHI <p_6_2(3), p_6_5(4)>
  if (p_6_12 != 0)
    goto <bb 10>;
  else
    goto <bb 6>;

<bb 6>:
  if (p_6_12 <= 49)
    goto <bb 7>;
  else
    goto <bb 8>;

<bb 7>:
  p_6_11 = p_6_12 + 1;

<bb 8>:
  # p_6_4 = PHI <p_6_12(6), p_6_11(7)>

<bb 9>:
  # p_6_2 = PHI <1(2), p_6_4(8)>
  if (p_6_2 <= 2)
    goto <bb 3>;
  else
    goto <bb 10>;


see how p_6_9 = p_6_1 + 1 is changed to p_6_11 = p_6_12 + 1 forming an
endless loop - it shuld have been p_6_11 = p_6_2 + 1 instead.

Martin?


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jamborm at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42006

Reply via email to