aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-02-25 11:46:02 +0100
committerRichard Biener <rguenther@suse.de>2020-05-04 15:37:26 +0200
commit367766f40a031ff064857681dc4da3309f0ce57d (patch)
tree3cb7e3831a5e9eede1a75862644548782366f765 /gcc
parentec40967f1323069da3a5a45286f71fa4f80926df (diff)
downloadgcc-367766f40a031ff064857681dc4da3309f0ce57d.zip
gcc-367766f40a031ff064857681dc4da3309f0ce57d.tar.gz
gcc-367766f40a031ff064857681dc4da3309f0ce57d.tar.bz2
tree-optimization/93891 - improve same-store disambiguation
We need a reference to assess alignment, fall back to the original reference tree if available. 2020-05-04 Richard Biener <rguenther@suse.de> PR tree-optimization/93891 * tree-ssa-sccvn.c (vn_reference_lookup_3): Fall back to the original reference tree for assessing access alignment.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-sccvn.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 61d5ce5..88a32ac 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2020-05-04 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/93891
+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Fall back to
+ the original reference tree for assessing access alignment.
+
+2020-05-04 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/39612
* tree-ssa-loop-im.c (im_mem_ref::loaded): New member.
(set_ref_loaded_in_loop): New.
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 238931d..8a4af91 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -2527,7 +2527,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
and return the found value. */
if (is_gimple_reg_type (TREE_TYPE (lhs))
&& types_compatible_p (TREE_TYPE (lhs), vr->type)
- && ref->ref)
+ && (ref->ref || data->orig_ref.ref))
{
tree *saved_last_vuse_ptr = data->last_vuse_ptr;
/* Do not update last_vuse_ptr in vn_reference_lookup_2. */
@@ -2552,7 +2552,9 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
-fno-strict-aliasing. So simply resort to alignment to
rule out overlaps. Do this check last because it is
quite expensive compared to the hash-lookup above. */
- && multiple_p (get_object_alignment (ref->ref), ref->size)
+ && multiple_p (get_object_alignment
+ (ref->ref ? ref->ref : data->orig_ref.ref),
+ ref->size)
&& multiple_p (get_object_alignment (lhs), ref->size))
return res;
}