diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-77.c | 13 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 6 |
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6dd97ab..15d7919 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2019-07-05 Richard Biener <rguenther@suse.de> + * tree-ssa-sccvn.c (vn_reference_lookup_3): Valueize RHS + when comparing against a store with possibly the same value. + +2019-07-05 Richard Biener <rguenther@suse.de> + PR tree-optimization/91091 * tree-ssa-alias.h (get_continuation_for_phi): Add tbaa_p parameter. (walk_non_aliased_vuses): Likewise. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5656a5b2e..a57c230 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2019-07-05 Richard Biener <rguenther@suse.de> + * gcc.dg/tree-ssa/ssa-fre-77.c: New testcase. + +2019-07-05 Richard Biener <rguenther@suse.de> + PR tree-optimization/91091 * gcc.dg/tree-ssa/pr91091-2.c: New testcase. * gcc.dg/tree-ssa/ssa-fre-70.c: Likewise. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-77.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-77.c new file mode 100644 index 0000000..115f277 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-77.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-fre1" } */ + +int foo (int *p, int *q) +{ + int x; + *p = 1; + x = *p; + *q = x; + return *p; +} + +/* { dg-final { scan-tree-dump "return 1;" "fre1" } } */ diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 6d4ad75..67d51bf 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -2047,9 +2047,11 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_, if (res && res != (void *)-1) { vn_reference_t vnresult = (vn_reference_t) res; + tree rhs = gimple_assign_rhs1 (def_stmt); + if (TREE_CODE (rhs) == SSA_NAME) + rhs = SSA_VAL (rhs); if (vnresult->result - && operand_equal_p (vnresult->result, - gimple_assign_rhs1 (def_stmt), 0)) + && operand_equal_p (vnresult->result, rhs, 0)) return res; } } |