This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR45071
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 26 Jul 2010 14:47:03 +0200 (CEST)
- Subject: [PATCH] Fix PR45071
We forgot to update op->opcode.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
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.
Index: gcc/tree-ssa-sccvn.c
===================================================================
*** gcc/tree-ssa-sccvn.c (revision 162526)
--- gcc/tree-ssa-sccvn.c (working copy)
*************** vn_reference_maybe_forwprop_address (VEC
*** 1050,1060 ****
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);
! }
/* And recurse. */
if (TREE_CODE (op->op0) == SSA_NAME)
--- 1050,1058 ----
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);
/* And recurse. */
if (TREE_CODE (op->op0) == SSA_NAME)
Index: gcc/testsuite/gcc.dg/pr45071.c
===================================================================
*** gcc/testsuite/gcc.dg/pr45071.c (revision 0)
--- gcc/testsuite/gcc.dg/pr45071.c (revision 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);
+ }