http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56817
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2013-04-03 CC| |hubicka at gcc dot gnu.org AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org |gnu.org | Target Milestone|--- |4.8.1 Ever Confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> 2013-04-03 08:21:29 UTC --- Usually a sign of bogus wrto loop argument. 194 /* Induction variables are constants. */ 195 if (!simple_iv (loop, loop_containing_stmt (stmt), op, &iv, false)) 196 return false; op is defined in loop 4 which means it will get an evolution evolving in loop 4, but stmt is in loop 6. Both are nested inside loop (loop 1), but they are not nested inside each other. Which means you cannot compute a sensible evolution for op in loop 6 (which in the end means that simple_iv should return false, but that it should not call analyze_scalar_evolution_in_loop for this loop/op combination). Note that the caller above (tree_estimate_loop_size) is probably interested in the evolution of 'op' in loop 'loop', not in the loop of the stmt that uses op. No? Thus, Index: tree-ssa-loop-ivcanon.c =================================================================== --- tree-ssa-loop-ivcanon.c (revision 197356) +++ tree-ssa-loop-ivcanon.c (working copy) @@ -192,7 +192,7 @@ constant_after_peeling (tree op, gimple } /* Induction variables are constants. */ - if (!simple_iv (loop, loop_containing_stmt (stmt), op, &iv, false)) + if (!simple_iv (loop, loop, op, &iv, false)) return false; if (!is_gimple_min_invariant (iv.base)) return false; looks what we are interested in.