[PATCH] tree-optimization/93891 - improve same-store disambiguation

Richard Biener rguenther@suse.de
Mon May 4 12:12:46 GMT 2020


This doesn't fix the testcase at hand but is a first step.

Bootstrap / regtest ongoing on x86_64-unknown-linux-gnu.

We need a reference to assess alignment, fall back to the original
reference tree if available.

2020-02-16  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.
---
 gcc/tree-ssa-sccvn.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 238931d3f3e..8a4af91c54e 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;
 	    }
-- 
2.16.4


More information about the Gcc-patches mailing list