From: Jakub Jelinek Date: Sat, 23 Nov 2013 14:21:46 +0000 (+0100) Subject: re PR tree-optimization/59154 (internal compiler error: tree check: expected ssa_name... X-Git-Tag: releases/gcc-4.9.0~2500 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e07ded7bf92a813f96e6932cca384a83a089f720;p=thirdparty%2Fgcc.git re PR tree-optimization/59154 (internal compiler error: tree check: expected ssa_name, have integer_cst) 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. From-SVN: r205307 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 331cbbb717f9..d1f7f6ecab15 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-11-23 Jakub Jelinek + + 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. + 2013-11-23 Uros Bizjak PR target/56788 diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index d5d3bb84f1c6..6e6d11563e55 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -3548,7 +3548,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))) diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 9daf28f6d070..7145559d697b 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -2935,9 +2935,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);