https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62217
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> --- Index: gcc/tree-ssa-dom.c =================================================================== --- gcc/tree-ssa-dom.c (revision 220755) +++ gcc/tree-ssa-dom.c (working copy) @@ -2291,11 +2291,16 @@ cprop_operand (gimple stmt, use_operand_ if (!may_propagate_copy (op, val)) return; - /* Do not propagate copies into simple IV increment statements. - See PR23821 for how this can disturb IV analysis. */ - if (TREE_CODE (val) != INTEGER_CST - && simple_iv_increment_p (stmt)) - return; + /* Do not propagate copies into BIVs. + See PR23821 and PR62217 for how this can disturb IV and + number of iteration analysis. */ + if (TREE_CODE (val) != INTEGER_CST) + { + gimple def = SSA_NAME_DEF_STMT (op); + if (gimple_code (def) == GIMPLE_PHI + && gimple_bb (def)->loop_father->header == gimple_bb (def)) + return; + } /* Dump details. */ if (dump_file && (dump_flags & TDF_DETAILS)) fixes the warning on the branch, not sure yet if the missed-optimization on the trunk. It extends an existing heuristic to not replace a BIV use in an increment to not replace any BIV use (??? Best if we'd know if the equivalence were temporary only...)