aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-04-16 12:10:34 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-04-16 12:10:34 +0000
commitb9334e4c48b64c13796604a859d5cbb2158ea86d (patch)
tree70de4b20a0fdee7312802b5f5b06dabe96b52651 /gcc
parentf8269ad4a97c7a4c950fcf42de24d6f145037e7e (diff)
downloadgcc-b9334e4c48b64c13796604a859d5cbb2158ea86d.zip
gcc-b9334e4c48b64c13796604a859d5cbb2158ea86d.tar.gz
gcc-b9334e4c48b64c13796604a859d5cbb2158ea86d.tar.bz2
re PR tree-optimization/65774 (FAIL: gcc.dg/builtin-arith-overflow-1.c (internal compiler error))
2015-04-16 Richard Biener <rguenther@suse.de> PR tree-optimization/65774 * tree-ssa-ccp.c (evaluate_stmt): Constrain types we invoke bit-value tracking on. From-SVN: r222147
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-ccp.c45
2 files changed, 25 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c4d0c15..39a73a0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2015-04-16 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/65774
+ * tree-ssa-ccp.c (evaluate_stmt): Constrain types we invoke
+ bit-value tracking on.
+
+2015-04-16 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/64277
* tree-vrp.c (check_array_ref): Fix anti-range handling,
simplify upper bound handling.
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 996296b..79f6afb 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1772,35 +1772,28 @@ evaluate_stmt (gimple stmt)
{
enum tree_code subcode = gimple_assign_rhs_code (stmt);
tree rhs1 = gimple_assign_rhs1 (stmt);
- switch (get_gimple_rhs_class (subcode))
- {
- case GIMPLE_SINGLE_RHS:
- if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
- || POINTER_TYPE_P (TREE_TYPE (rhs1)))
- val = get_value_for_expr (rhs1, true);
- break;
+ tree lhs = gimple_assign_lhs (stmt);
+ if ((INTEGRAL_TYPE_P (TREE_TYPE (lhs))
+ || POINTER_TYPE_P (TREE_TYPE (lhs)))
+ && (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
+ || POINTER_TYPE_P (TREE_TYPE (rhs1))))
+ switch (get_gimple_rhs_class (subcode))
+ {
+ case GIMPLE_SINGLE_RHS:
+ val = get_value_for_expr (rhs1, true);
+ break;
- case GIMPLE_UNARY_RHS:
- if ((INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
- || POINTER_TYPE_P (TREE_TYPE (rhs1)))
- && (INTEGRAL_TYPE_P (gimple_expr_type (stmt))
- || POINTER_TYPE_P (gimple_expr_type (stmt))))
- val = bit_value_unop (subcode, gimple_expr_type (stmt), rhs1);
- break;
+ case GIMPLE_UNARY_RHS:
+ val = bit_value_unop (subcode, TREE_TYPE (lhs), rhs1);
+ break;
- case GIMPLE_BINARY_RHS:
- if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
- || POINTER_TYPE_P (TREE_TYPE (rhs1)))
- {
- tree lhs = gimple_assign_lhs (stmt);
- tree rhs2 = gimple_assign_rhs2 (stmt);
- val = bit_value_binop (subcode,
- TREE_TYPE (lhs), rhs1, rhs2);
- }
- break;
+ case GIMPLE_BINARY_RHS:
+ val = bit_value_binop (subcode, TREE_TYPE (lhs), rhs1,
+ gimple_assign_rhs2 (stmt));
+ break;
- default:;
- }
+ default:;
+ }
}
else if (code == GIMPLE_COND)
{