aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2013-11-23 15:21:46 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2013-11-23 15:21:46 +0100
commite07ded7bf92a813f96e6932cca384a83a089f720 (patch)
tree3588f3e5d92d09b275560f857be2669c3ba82fcb /gcc
parentb84acf541bfbc444da9cad9cee0d17c1746b240a (diff)
downloadgcc-e07ded7bf92a813f96e6932cca384a83a089f720.zip
gcc-e07ded7bf92a813f96e6932cca384a83a089f720.tar.gz
gcc-e07ded7bf92a813f96e6932cca384a83a089f720.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-ssa-forwprop.c3
-rw-r--r--gcc/tree-ssa-reassoc.c12
3 files changed, 19 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 331cbbb..d1f7f6e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2013-11-23 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.
+
2013-11-23 Uros Bizjak <ubizjak@gmail.com>
PR target/56788
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index d5d3bb8..6e6d115 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 9daf28f..7145559 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);