aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-06-03 10:45:38 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-06-03 10:45:38 +0000
commit1be54209b30e4ace3ec771f2dfab687d451fbbf8 (patch)
treee68d721fcca49cd4a4f23f6dd97dfa936bc41916 /gcc
parent4c76ebd05b41db96913d818b28668f8a530340e4 (diff)
downloadgcc-1be54209b30e4ace3ec771f2dfab687d451fbbf8.zip
gcc-1be54209b30e4ace3ec771f2dfab687d451fbbf8.tar.gz
gcc-1be54209b30e4ace3ec771f2dfab687d451fbbf8.tar.bz2
tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Get original full reference tree and record in ref->ref.
2019-06-03 Richard Biener <rguenther@suse.de> * tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Get original full reference tree and record in ref->ref. (vn_reference_lookup_3): Pass in original ref to ao_ref_init_from_vn_reference. (vn_reference_lookup): Likewise. * tree-ssa-sccvn.h (ao_ref_init_from_vn_reference): Adjust prototype. * tree-ssa-alias.c (nonoverlapping_component_refs_of_decl_p): Handle non-decl bases in the original reference. * gcc.dg/tree-ssa/alias-access-path-1.c: Scan fre1. From-SVN: r271860
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-1.c5
-rw-r--r--gcc/tree-ssa-alias.c6
-rw-r--r--gcc/tree-ssa-sccvn.c9
-rw-r--r--gcc/tree-ssa-sccvn.h2
6 files changed, 28 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6529d0e..c68c2d9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2019-06-03 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Get original
+ full reference tree and record in ref->ref.
+ (vn_reference_lookup_3): Pass in original ref to
+ ao_ref_init_from_vn_reference.
+ (vn_reference_lookup): Likewise.
+ * tree-ssa-sccvn.h (ao_ref_init_from_vn_reference): Adjust prototype.
+ * tree-ssa-alias.c (nonoverlapping_component_refs_of_decl_p):
+ Handle non-decl bases in the original reference.
+
2019-06-03 Martin Liska <mliska@suse.cz>
* fold-const.c (operand_equal_p): Fix typo as compare_tree_int
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 75e38b8..0621f68 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2019-06-03 Richard Biener <rguenther@suse.de>
+ * gcc.dg/tree-ssa/alias-access-path-1.c: Scan fre1.
+
+2019-06-03 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/90716
* gcc.dg/guality/pr90716.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-1.c b/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-1.c
index 264f72a..63722a5 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-1.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-fre3 -fno-tree-sra" } */
+/* { dg-options "-O2 -fdump-tree-fre1 -fno-tree-sra" } */
+
struct foo
{
int val;
@@ -18,4 +19,4 @@ test ()
return barptr->val2;
}
-/* { dg-final { scan-tree-dump-times "return 123" 1 "fre3"} } */
+/* { dg-final { scan-tree-dump-times "return 123" 1 "fre1"} } */
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 429288b..dd4e3b7 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -1013,7 +1013,8 @@ nonoverlapping_component_refs_of_decl_p (tree ref1, tree ref2)
}
if (TREE_CODE (ref1) == MEM_REF)
{
- if (!integer_zerop (TREE_OPERAND (ref1, 1)))
+ if (!integer_zerop (TREE_OPERAND (ref1, 1))
+ || TREE_CODE (TREE_OPERAND (ref1, 0)) != ADDR_EXPR)
return false;
ref1 = TREE_OPERAND (TREE_OPERAND (ref1, 0), 0);
}
@@ -1026,7 +1027,8 @@ nonoverlapping_component_refs_of_decl_p (tree ref1, tree ref2)
}
if (TREE_CODE (ref2) == MEM_REF)
{
- if (!integer_zerop (TREE_OPERAND (ref2, 1)))
+ if (!integer_zerop (TREE_OPERAND (ref2, 1))
+ || TREE_CODE (TREE_OPERAND (ref2, 0)) != ADDR_EXPR)
return false;
ref2 = TREE_OPERAND (TREE_OPERAND (ref2, 0), 0);
}
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index b4f6260..8c0c8b2 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -995,7 +995,7 @@ copy_reference_ops_from_ref (tree ref, vec<vn_reference_op_s> *result)
bool
ao_ref_init_from_vn_reference (ao_ref *ref,
alias_set_type set, tree type,
- vec<vn_reference_op_s> ops)
+ vec<vn_reference_op_s> ops, tree orig_ref)
{
vn_reference_op_t op;
unsigned i;
@@ -1149,7 +1149,7 @@ ao_ref_init_from_vn_reference (ao_ref *ref,
if (base == NULL_TREE)
return false;
- ref->ref = NULL_TREE;
+ ref->ref = orig_ref;
ref->base = base;
ref->ref_alias_set = set;
if (base_alias_set != -1)
@@ -1976,7 +1976,8 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_,
{
lhs_ref_ok = ao_ref_init_from_vn_reference (&lhs_ref,
get_alias_set (lhs),
- TREE_TYPE (lhs), lhs_ops);
+ TREE_TYPE (lhs), lhs_ops,
+ lhs);
if (lhs_ref_ok
&& !refs_may_alias_p_1 (ref, &lhs_ref, true))
{
@@ -2718,7 +2719,7 @@ vn_reference_lookup (tree op, tree vuse, vn_lookup_kind kind,
Otherwise preserve the full reference for advanced TBAA. */
if (!valuezied_anything
|| !ao_ref_init_from_vn_reference (&r, vr1.set, vr1.type,
- vr1.operands))
+ vr1.operands, op))
ao_ref_init (&r, op);
if (! tbaa_p)
r.ref_alias_set = r.base_alias_set = 0;
diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h
index bd661bc..ec32dcb 100644
--- a/gcc/tree-ssa-sccvn.h
+++ b/gcc/tree-ssa-sccvn.h
@@ -229,7 +229,7 @@ vn_nary_op_t vn_nary_op_insert (tree, tree);
vn_nary_op_t vn_nary_op_insert_pieces (unsigned int, enum tree_code,
tree, tree *, tree, unsigned int);
bool ao_ref_init_from_vn_reference (ao_ref *, alias_set_type, tree,
- vec<vn_reference_op_s> );
+ vec<vn_reference_op_s>, tree = NULL_TREE);
vec<vn_reference_op_s> vn_reference_operands_for_lookup (tree);
tree vn_reference_lookup_pieces (tree, alias_set_type, tree,
vec<vn_reference_op_s> ,