[Bug tree-optimization/85284] [7/8 Regression] Loop miscompilation starting with r238367

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Apr 9 10:51:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85284

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot gnu.org

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, for conditional exit tests when the exit condition changes from false to
true and _back_ we may not do this optimization since 'niter' expects this to
be
a one-way transition.  Thus

Index: gcc/tree-ssa-loop-niter.c
===================================================================
--- gcc/tree-ssa-loop-niter.c   (revision 259227)
+++ gcc/tree-ssa-loop-niter.c   (working copy)
@@ -2356,11 +2356,11 @@ number_of_iterations_exit_assumptions (s

   tree iv0_niters = NULL_TREE;
   if (!simple_iv_with_niters (loop, loop_containing_stmt (stmt),
-                             op0, &iv0, &iv0_niters, false))
+                             op0, &iv0, safe ? &iv0_niters : NULL, false))
     return false;
   tree iv1_niters = NULL_TREE;
   if (!simple_iv_with_niters (loop, loop_containing_stmt (stmt),
-                             op1, &iv1, &iv1_niters, false))
+                             op1, &iv1, safe ? &iv1_niters : NULL, false))
     return false;
   /* Give up on complicated case.  */
   if (iv0_niters && iv1_niters)


More information about the Gcc-bugs mailing list