As as been noted in the past, the old jump threader's support for threading across a loop backedge introduces significant complexity. The most serious complexity is the need to handle processing statements a second time (as we come around the top of the loop). This requires invalidation support, potentially introduces loops in the SSA_NAME_VALUE chains, etc. I've speculated for a while that a backwards threader with a more sensible region copying scheme was the right long term direction. Sebastian got us started on that direction when he introduced the FSM threader. Essentially it walks def-use chains backwards from a conditional to try and find paths where an SSA_NAME has a constant value. Those paths represent potentially optimizable jump threads and he's using a SEME region copier to handle the SSA & CFG updates. BZ67892 is an issue with the old jump threader's backedge handling. Essentially when we thread across the backedge we're not completely invaliding the SSA_NAME_VALUE chains -- and it's not entirely clear if we can properly invalidate them. So rather than bang my head against the wall writing more code to handle cases in the old threader of marginal value I've taken this bug as an opportunity to start exploiting the FSM threader more heavily. The patches to date have been improving the FSM threader to handle cases it missed, or where we really didn't want it to change the CFG. This patch actually disables the old threader's backedge handling and exclusively relies on the FSM threader to pick up those opportunities. Bootstrapped and regression tested on x86_64-linux-gnu. Applied to the trunk. Next step is to start removing the now dead code from the old threader :-) Jeff