aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-10-08 11:58:03 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-10-08 11:58:03 +0000
commit91af9dc984aef60a44002758dd80a5e178ddec04 (patch)
tree0366d9fd3496ec410bfcf8987b7f5b77736e7c41 /gcc
parent585d0dc43c1323a1b1fde9de6f6ee95dfc065ff2 (diff)
downloadgcc-91af9dc984aef60a44002758dd80a5e178ddec04.zip
gcc-91af9dc984aef60a44002758dd80a5e178ddec04.tar.gz
gcc-91af9dc984aef60a44002758dd80a5e178ddec04.tar.bz2
re PR tree-optimization/54825 (ICE with vector extension)
2012-10-08 Richard Guenther <rguenther@suse.de> PR tree-optimization/54825 * tree-ssa-sccvn.c (vn_nary_length_from_stmt): Handle BIT_FIELD_REF. (init_vn_nary_op_from_stmt): Likewise. * tree-ssa-pre.c (compute_avail): Use vn_nary_op_lookup_stmt. * tree-ssa-sccvn.h (sizeof_vn_nary_op): Avoid overflow. From-SVN: r192205
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-ssa-pre.c6
-rw-r--r--gcc/tree-ssa-sccvn.c11
-rw-r--r--gcc/tree-ssa-sccvn.h2
4 files changed, 21 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f1e815e..b9eb340 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2012-10-08 Richard Guenther <rguenther@suse.de>
+ PR tree-optimization/54825
+ * tree-ssa-sccvn.c (vn_nary_length_from_stmt): Handle BIT_FIELD_REF.
+ (init_vn_nary_op_from_stmt): Likewise.
+ * tree-ssa-pre.c (compute_avail): Use vn_nary_op_lookup_stmt.
+ * tree-ssa-sccvn.h (sizeof_vn_nary_op): Avoid overflow.
+
+2012-10-08 Richard Guenther <rguenther@suse.de>
+
* tree-ssa-pre.c (postorder_num): New global.
(compute_antic): Initialize all blocks and adjust for
generic postorder.
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 5feed3b..fe9186c 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -3849,11 +3849,7 @@ compute_avail (void)
|| code == VEC_COND_EXPR)
continue;
- vn_nary_op_lookup_pieces (gimple_num_ops (stmt) - 1,
- code,
- gimple_expr_type (stmt),
- gimple_assign_rhs1_ptr (stmt),
- &nary);
+ vn_nary_op_lookup_stmt (stmt, &nary);
if (!nary)
continue;
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 832328d..2391632 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -2194,6 +2194,9 @@ vn_nary_length_from_stmt (gimple stmt)
case VIEW_CONVERT_EXPR:
return 1;
+ case BIT_FIELD_REF:
+ return 3;
+
case CONSTRUCTOR:
return CONSTRUCTOR_NELTS (gimple_assign_rhs1 (stmt));
@@ -2220,6 +2223,13 @@ init_vn_nary_op_from_stmt (vn_nary_op_t vno, gimple stmt)
vno->op[0] = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
break;
+ case BIT_FIELD_REF:
+ vno->length = 3;
+ vno->op[0] = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0);
+ vno->op[1] = TREE_OPERAND (gimple_assign_rhs1 (stmt), 1);
+ vno->op[2] = TREE_OPERAND (gimple_assign_rhs1 (stmt), 2);
+ break;
+
case CONSTRUCTOR:
vno->length = CONSTRUCTOR_NELTS (gimple_assign_rhs1 (stmt));
for (i = 0; i < vno->length; ++i)
@@ -2227,6 +2237,7 @@ init_vn_nary_op_from_stmt (vn_nary_op_t vno, gimple stmt)
break;
default:
+ gcc_checking_assert (!gimple_assign_single_p (stmt));
vno->length = gimple_num_ops (stmt) - 1;
for (i = 0; i < vno->length; ++i)
vno->op[i] = gimple_op (stmt, i + 1);
diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h
index 956bde2..cd418da 100644
--- a/gcc/tree-ssa-sccvn.h
+++ b/gcc/tree-ssa-sccvn.h
@@ -51,7 +51,7 @@ typedef const struct vn_nary_op_s *const_vn_nary_op_t;
static inline size_t
sizeof_vn_nary_op (unsigned int length)
{
- return sizeof (struct vn_nary_op_s) + sizeof (tree) * (length - 1);
+ return sizeof (struct vn_nary_op_s) + sizeof (tree) * length - sizeof (tree);
}
/* Phi nodes in the hashtable consist of their non-VN_TOP phi