This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix up forwprop and improve reassoc (PR tree-optimization/59154)
- From: Richard Biener <rguenther at suse dot de>
- To: Jakub Jelinek <jakub at redhat dot com>, Jakub Jelinek <jakub at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Sat, 23 Nov 2013 15:10:27 +0100
- Subject: Re: [PATCH] Fix up forwprop and improve reassoc (PR tree-optimization/59154)
- Authentication-results: sourceware.org; auth=none
- References: <20131122201532 dot GN892 at tucnak dot redhat dot com>
Jakub Jelinek <jakub@redhat.com> wrote:
>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?
Ok.
Thanks,
Richard.
>2013-11-22 Jakub Jelinek <jakub@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