------- Comment #2 from jakub at gcc dot gnu dot org 2007-10-12 13:38 ------- Doesn't seem to look like a problem in ipa-cp to me, more like an inlining bug. ipa-cp creates: T.1 (a, b) { _Bool D.1565;
<bb 2>: if (1) goto <bb 3>; else goto <bb 6>; <bb 3>: # b_3 = PHI <1(2)> goto <bb 5>; <bb 4>: k ={v} 1; <bb 5>: # b_2 = PHI <b_3(3), b_1(4)> b_1 = b_2 + -1; if (b_2 != 0) goto <bb 4>; else goto <bb 8>; <bb 6>: if (0) goto <bb 7>; else goto <bb 8>; <bb 7>: __builtin_abort (); <bb 8>: return; } and even the first dump during apply_inline looks correct, inside of main we have: ... # BLOCK 4 freq:4999 # b_6 = PHI <1(3)> goto <bb 6>; # BLOCK 5 freq:10000 k ={v} 1; # BLOCK 6 freq:10000 # b_5 = PHI <b_6(4), b_4(5)> b_4 = b_5 + -1; if (b_5 != 0) goto <bb 5>; else goto <bb 9>; But during inlining both a and b are mark_sym_for_renaming and when update_ssa is called, rewrite_update_stmt -> maybe_replace_use changes that if (b_5 != 0) into incorrect: if (b_4 != 0) so k is never set to 1. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33434