On January 11, 2016 6:40:28 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> 
wrote:
>Hi!
>
>As the testcase shows, simplify_cond_using_ranges has one place where
>it can extend range of SSA_NAME_OCCURS_IN_ABNORMAL_PHI ssa names and
>cause SSA corruption by that.
>
>Fixed by only optimizing that if it is not (ab).  The optimized
>statements are GIMPLE_CONDs with SSA_NAME cmp INTEGER_CST, so the
>(ab) SSA_NAME certainly is not used on the cond stmt.
>
>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Thanks,
Richard.

>2016-01-11  Jakub Jelinek  <ja...@redhat.com>
>
>       PR tree-optimization/69214
>       * tree-vrp.c (simplify_cond_using_ranges): Don't propagate
>       innerop into a comparison if SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
>       Formatting fix.
>
>       * gcc.c-torture/compile/pr69214.c: New test.
>
>--- gcc/tree-vrp.c.jj  2016-01-09 08:36:15.000000000 +0100
>+++ gcc/tree-vrp.c     2016-01-11 13:43:07.477623410 +0100
>@@ -9478,7 +9478,8 @@ simplify_cond_using_ranges (gcond *stmt)
> 
>       if (TREE_CODE (innerop) == SSA_NAME
>         && !POINTER_TYPE_P (TREE_TYPE (innerop))
>-         && desired_pro_or_demotion_p (TREE_TYPE (innerop), TREE_TYPE
>(op0)))
>+        && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (innerop)
>+        && desired_pro_or_demotion_p (TREE_TYPE (innerop), TREE_TYPE
>(op0)))
>       {
>         value_range *vr = get_value_range (innerop);
> 
>@@ -9509,8 +9510,8 @@ simplify_cond_using_ranges (gcond *stmt)
>                 else
>                   location = gimple_location (stmt);
>                 warning_at (location, OPT_Wstrict_overflow,
>-                    "assuming signed overflow does not occur when "
>-                    "simplifying conditional");
>+                            "assuming signed overflow does not occur when "
>+                            "simplifying conditional");
>               }
> 
>             tree newconst = fold_convert (TREE_TYPE (innerop), op1);
>--- gcc/testsuite/gcc.c-torture/compile/pr69214.c.jj   2016-01-11
>13:47:44.162767118 +0100
>+++ gcc/testsuite/gcc.c-torture/compile/pr69214.c      2016-01-11
>13:47:30.000000000 +0100
>@@ -0,0 +1,17 @@
>+/* PR tree-optimization/69214 */
>+
>+extern void bar (void);
>+extern int __setjmp (char *);
>+
>+void
>+foo (char *p)
>+{
>+  int d = 0;
>+  bar ();
>+  if (__setjmp (p))
>+    return;
>+  long a = d;
>+  d = 8;
>+  if (!a)
>+    bar ();
>+}
>
>       Jakub


Reply via email to