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.

Reply via email to