------- Additional Comments From steven at gcc dot gnu dot org 2005-01-24 00:34 ------- For the RTL illiterate like myself: BB2: j = k + l j0 = j + 1 flags = (j0 <= 0) if (flags) goto BB4 else goto BB3 flags are in live_at_end BB3: flags are not in live_at_start j = j + 2 [ kills the flags ] goto BB5 flags are not in live_at_end BB4: flags are in live_at_start j = (flags) ? j : j0 goto BB5 flags are not in live_at_end BB5: just an uninteresting join block Then if-conversion basically merges BB2, BB3, and BB4 to give: BB2: j = k + l j0 = j + 1 r65 = j + 2 [ kills the flags ] r66 = (flags) ? j : j0 flags = (j0 <= 0) j = (flags) ? r66 : r65 falthru to BB5 BB5: just an uninteresting former join block
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19579