http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46693
Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Component|target |tree-optimization --- Comment #9 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> 2010-12-13 10:53:31 UTC --- On trunk vrp converts the IR from : <bb 3>: c_5 = D.2034_4; D.2026_6 = D.2034_4 == 13; D.2027_7 = D.2034_4 == 10; D.2028_8 = D.2026_6 || D.2027_7; if (D.2028_8 != 0) goto <bb 7>; else goto <bb 4>; <bb 4>: D.2030_9 = D.2034_4 <= 31; D.2031_10 = D.2034_4 != 9; D.2032_11 = D.2030_9 && D.2031_10; if (D.2032_11 != 0) goto <bb 7>; else goto <bb 5>; <bb 5>: str_12 = str_1 + 1; <bb 6>: # str_1 = PHI <str_3(D)(2), str_12(5)> D.2034_4 = *str_1; if (D.2034_4 != 0) goto <bb 3>; else goto <bb 7>; <bb 7>: # D.2033_2 = PHI <0(4), 1(6), 0(3)> return D.2033_2; to <bb 3>: c_5 = D.2034_4; D.2026_6 = D.2034_4 == 13; D.2027_7 = D.2034_4 == 10; D.2028_8 = D.2026_6 | D.2027_7; if (D.2028_8 != 0) goto <bb 7>; else goto <bb 4>; <bb 4>: D.2030_9 = D.2034_4 <= 31; D.2031_10 = D.2034_4 != 9; D.2032_11 = D.2030_9 & D.2031_10; if (D.2032_11 != 0) goto <bb 7>; else goto <bb 5>; <bb 5>: str_12 = str_1 + 1; <bb 6>: # str_1 = PHI <str_3(D)(2), str_12(5)> D.2034_4 = *str_1; if (D.2034_4 != 0) goto <bb 3>; else goto <bb 7>; <bb 7>: # D.2033_2 = PHI <0(4), 1(6), 0(3)> return D.2033_2; After a while ifcombine comes along and removes basic block 5 and merges blocks 3 and 4 into 1 basic block because it thinks that the optimizing two comparisons to 1 Merging blocks 3 and 4 Removing basic block 5 and converts this to this form: <bb 2>: goto <bb 4>; <bb 3>: D.2026_6 = D.2034_4 == 13; D.2027_7 = D.2034_4 == 10; D.2028_8 = D.2026_6 | D.2027_7; D.2030_9 = D.2034_4 <= 31; D.2031_10 = D.2034_4 != 9; D.2032_11 = D.2030_9 & D.2031_10; goto <bb 5>; <bb 4>: Invalid sum of incoming frequencies 873, should be 10000 # str_1 = PHI <str_3(D)(2)> D.2034_4 = *str_1; if (D.2034_4 != 0) goto <bb 3>; else goto <bb 5>; <bb 5>: Invalid sum of incoming frequencies 10000, should be 873 # D.2033_2 = PHI <0(3), 1(4)> return D.2033_2;