Hi!

This PR is about what I understood (can't reproduce, seems ltoish)
about reassoc now creating say _24 = (int) 0; with _Bool 0, and
forwprop ICEing on that.

The patch fixes forwprop not to ICE on it (I think we don't require
the IL to be always folded), and reassoc not to create it in this case,
IMHO either hunk could fix the issue but haven't verified that.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2013-11-22  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/59154
        * tree-ssa-reassoc.c (maybe_optimize_range_tests): When changing
        rhs1 of a cast and new_op is invariant, fold_convert it.
        * tree-ssa-forwprop.c (ssa_forward_propagate_and_combine): Only call
        simplify_conversion_from_bitmask if rhs1 is a SSA_NAME.

--- gcc/tree-ssa-reassoc.c.jj   2013-11-22 13:15:55.000000000 +0100
+++ gcc/tree-ssa-reassoc.c      2013-11-22 17:53:21.501637844 +0100
@@ -2930,9 +2930,15 @@ maybe_optimize_range_tests (gimple stmt)
                      tree new_lhs = make_ssa_name (TREE_TYPE (lhs), NULL);
                      enum tree_code rhs_code
                        = gimple_assign_rhs_code (cast_stmt);
-                     gimple g
-                       = gimple_build_assign_with_ops (rhs_code, new_lhs,
-                                                       new_op, NULL_TREE);
+                     gimple g;
+                     if (is_gimple_min_invariant (new_op))
+                       {
+                         new_op = fold_convert (TREE_TYPE (lhs), new_op);
+                         g = gimple_build_assign (new_lhs, new_op);
+                       }
+                     else
+                       g = gimple_build_assign_with_ops (rhs_code, new_lhs,
+                                                         new_op, NULL_TREE);
                      gimple_stmt_iterator gsi = gsi_for_stmt (cast_stmt);
                      gimple_set_uid (g, gimple_uid (cast_stmt));
                      gimple_set_visited (g, true);
--- gcc/tree-ssa-forwprop.c.jj  2013-11-22 13:15:55.000000000 +0100
+++ gcc/tree-ssa-forwprop.c     2013-11-22 16:05:38.823559573 +0100
@@ -3542,7 +3542,8 @@ ssa_forward_propagate_and_combine (void)
                      {
                        tree outer_type = TREE_TYPE (gimple_assign_lhs (stmt));
                        tree inner_type = TREE_TYPE (gimple_assign_rhs1 (stmt));
-                       if (INTEGRAL_TYPE_P (outer_type)
+                       if (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME
+                           && INTEGRAL_TYPE_P (outer_type)
                            && INTEGRAL_TYPE_P (inner_type)
                            && (TYPE_PRECISION (outer_type)
                                <= TYPE_PRECISION (inner_type)))

        Jakub

Reply via email to