------- 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