diff options
author | Richard Guenther <rguenther@suse.de> | 2010-07-26 12:48:37 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-07-26 12:48:37 +0000 |
commit | e093ffe3c293fb22b4d9715159b604f29bacdcb5 (patch) | |
tree | bbc03f60f0471b2b675fc2b8ead60f6ec5196090 | |
parent | 71ff73f3fbaac481a9c3c9f49c885e9a5bdee84b (diff) | |
download | gcc-e093ffe3c293fb22b4d9715159b604f29bacdcb5.zip gcc-e093ffe3c293fb22b4d9715159b604f29bacdcb5.tar.gz gcc-e093ffe3c293fb22b4d9715159b604f29bacdcb5.tar.bz2 |
re PR tree-optimization/45071 (ICE: tree check: expected ssa_name, have integer_cst in inhibit_phi_insertion, at tree-ssa-pre.c:3278 with -ftree-pre -ftree-vectorize)
2010-07-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/45071
* tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address): Always
adjust op->opcode.
* gcc.dg/pr45071.c: New testcase.
From-SVN: r162534
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr45071.c | 34 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 8 |
4 files changed, 48 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fcf57df..c03ebf9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-26 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/45071 + * tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address): Always + adjust op->opcode. + 2010-07-26 Naveen.H.S <naveen.S@kpitcummins.com> * config/v850/lib1funcs.asm (save_r2_r31, return_r2_r31, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b9de6e4..f1fde68 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-26 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/45071 + * gcc.dg/pr45071.c: New testcase. + 2010-07-26 Tobias Burnus <burnus@net-b.de> PR fortran/45066 diff --git a/gcc/testsuite/gcc.dg/pr45071.c b/gcc/testsuite/gcc.dg/pr45071.c new file mode 100644 index 0000000..d1715db --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr45071.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-vrp -ftree-vectorize" } */ + +struct A +{ + int i; +}; + +struct B +{ + struct A a; +}; + +extern void f4 (void *); + +inline void +f3 (struct A *a) +{ + f4 (a); + while (a->i); +} + +static inline void +f2 (struct B *b) +{ + f3 (&b->a); +} + +void +f1 () +{ + struct B *b = 0; + f2 (b); +} diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index c99c8a8..cfd22db 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1050,11 +1050,9 @@ vn_reference_maybe_forwprop_address (VEC (vn_reference_op_s, heap) **ops, else mem_op->off = -1; if (TREE_CODE (op->op0) == SSA_NAME) - { - op->op0 = SSA_VAL (op->op0); - if (TREE_CODE (op->op0) != SSA_NAME) - op->opcode = TREE_CODE (op->op0); - } + op->op0 = SSA_VAL (op->op0); + if (TREE_CODE (op->op0) != SSA_NAME) + op->opcode = TREE_CODE (op->op0); /* And recurse. */ if (TREE_CODE (op->op0) == SSA_NAME) |