aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2012-01-27 10:38:27 +0000
committerTom de Vries <vries@gcc.gnu.org>2012-01-27 10:38:27 +0000
commit842679dc9f6a1398bc192a85401913608ccc967a (patch)
tree9a8042fec460d9be1c160f2bdb81880a5e095a2a /gcc
parent4daa71b06377971c08341ff1664438de55dd5603 (diff)
downloadgcc-842679dc9f6a1398bc192a85401913608ccc967a.zip
gcc-842679dc9f6a1398bc192a85401913608ccc967a.tar.gz
gcc-842679dc9f6a1398bc192a85401913608ccc967a.tar.bz2
re PR tree-optimization/51990 (ICE in copy_reference_ops_from_ref)
2012-01-27 Tom de Vries <tom@codesourcery.com> PR tree-optimization/51990 * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle WITH_SIZE_EXPR. * tree-ssa-pre.c (create_component_ref_by_pieces_1): Same. From-SVN: r183614
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-pre.c17
-rw-r--r--gcc/tree-ssa-sccvn.c5
3 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fe748f4..e7fb05d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-27 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/51990
+ * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Handle WITH_SIZE_EXPR.
+ * tree-ssa-pre.c (create_component_ref_by_pieces_1): Same.
+
2012-01-27 Jakub Jelinek <jakub@redhat.com>
PR debug/52001
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index b95ac78..71f945f 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2792,6 +2792,23 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref,
return folded;
}
break;
+ case WITH_SIZE_EXPR:
+ {
+ tree genop0 = create_component_ref_by_pieces_1 (block, ref, operand,
+ stmts, domstmt);
+ pre_expr op1expr = get_or_alloc_expr_for (currop->op0);
+ tree genop1;
+
+ if (!genop0)
+ return NULL_TREE;
+
+ genop1 = find_or_generate_expression (block, op1expr, stmts, domstmt);
+ if (!genop1)
+ return NULL_TREE;
+
+ return fold_build2 (currop->opcode, currop->type, genop0, genop1);
+ }
+ break;
case BIT_FIELD_REF:
{
tree folded;
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 1f03600..fdebe47 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -628,6 +628,10 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result)
switch (temp.opcode)
{
+ case WITH_SIZE_EXPR:
+ temp.op0 = TREE_OPERAND (ref, 1);
+ temp.off = 0;
+ break;
case MEM_REF:
/* The base address gets its own vn_reference_op_s structure. */
temp.op0 = TREE_OPERAND (ref, 1);
@@ -744,6 +748,7 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result)
VEC_safe_push (vn_reference_op_s, heap, *result, &temp);
if (REFERENCE_CLASS_P (ref)
+ || TREE_CODE (ref) == WITH_SIZE_EXPR
|| (TREE_CODE (ref) == ADDR_EXPR
&& !is_gimple_min_invariant (ref)))
ref = TREE_OPERAND (ref, 0);