On July 3, 2014 8:44:28 PM CEST, Jakub Jelinek <ja...@redhat.com> wrote:
>Hi!
>
>The rhs1 of CONVERT_EXPR_CODE_P doesn't have to be a SSA_NAME, can be
>e.g.
>invariant like ADDR_EXPR of a var, but ifcombine didn't think about
>that
>possibility.
>
>Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok
>for
>trunk/4.9/4.8?

Ok.

Thanks
Richard.

>2014-07-03  Jakub Jelinek  <ja...@redhat.com>
>
>       PR tree-optimization/61684
>       * tree-ssa-ifcombine.c (recognize_single_bit_test): Make sure
>       rhs1 of conversion is a SSA_NAME before using SSA_NAME_DEF_STMT on it.
>
>       * gcc.c-torture/compile/pr61684.c: New test.
>
>--- gcc/tree-ssa-ifcombine.c.jj        2014-06-06 09:19:22.000000000 +0200
>+++ gcc/tree-ssa-ifcombine.c   2014-07-03 11:46:25.868335148 +0200
>@@ -233,7 +233,8 @@ recognize_single_bit_test (gimple cond,
>       while (is_gimple_assign (stmt)
>            && ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
>                 && (TYPE_PRECISION (TREE_TYPE (gimple_assign_lhs (stmt)))
>-                    <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 
>(stmt)))))
>+                    <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt))))
>+                && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
>                || gimple_assign_ssa_name_copy_p (stmt)))
>       stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
> 
>--- gcc/testsuite/gcc.c-torture/compile/pr61684.c.jj   2014-07-03
>12:06:46.654858358 +0200
>+++ gcc/testsuite/gcc.c-torture/compile/pr61684.c      2014-07-03
>12:09:05.016123771 +0200
>@@ -0,0 +1,15 @@
>+/* PR tree-optimization/61684 */
>+
>+int a, c;
>+static int *b = 0;
>+short d;
>+static short **e = 0;
>+
>+void
>+foo ()
>+{
>+  for (; c < 1; c++)
>+    ;
>+  *e = &d;
>+  a = d && (c && 1) & *b;
>+}
>
>       Jakub


Reply via email to