This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] vect_slp_analyze_node_dependences TLC


Some TLC also preparing for further enhancements.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2015-11-10  Richard Biener  <rguenther@suse.de>

	* tree-vect-data-refs.c (vect_slp_analyze_node_dependences):
	Handle memory using/clobbering stmts without a STMT_VINFO_DATA_REF
	conservatively.

Index: gcc/tree-vect-data-refs.c
===================================================================
--- gcc/tree-vect-data-refs.c	(revision 230020)
+++ gcc/tree-vect-data-refs.c	(working copy)
@@ -573,21 +595,22 @@ vect_slp_analyze_node_dependences (slp_i
       gimple *access = SLP_TREE_SCALAR_STMTS (node)[k];
       if (access == last_access)
 	continue;
-      stmt_vec_info access_stmt_info = vinfo_for_stmt (access);
-      gimple_stmt_iterator gsi = gsi_for_stmt (access);
-      gsi_next (&gsi);
-      for (; gsi_stmt (gsi) != last_access; gsi_next (&gsi))
+      data_reference *dr_a = STMT_VINFO_DATA_REF (vinfo_for_stmt (access));
+      for (gimple_stmt_iterator gsi = gsi_for_stmt (access);
+	   gsi_stmt (gsi) != last_access; gsi_next (&gsi))
 	{
 	  gimple *stmt = gsi_stmt (gsi);
-	  stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
-	  if (!STMT_VINFO_DATA_REF (stmt_info)
-	      || (DR_IS_READ (STMT_VINFO_DATA_REF (stmt_info))
-		  && DR_IS_READ (STMT_VINFO_DATA_REF (access_stmt_info))))
+	  if (! gimple_vuse (stmt)
+	      || (DR_IS_READ (dr_a) && ! gimple_vdef (stmt)))
 	    continue;
 
-	  ddr_p ddr = initialize_data_dependence_relation
-	      (STMT_VINFO_DATA_REF (access_stmt_info),
-	       STMT_VINFO_DATA_REF (stmt_info), vNULL);
+	  /* If we couldn't record a (single) data reference for this
+	     stmt we have to give up.  */
+	  data_reference *dr_b = STMT_VINFO_DATA_REF (vinfo_for_stmt (stmt));
+	  if (!dr_b)
+	    return false;
+
+	  ddr_p ddr = initialize_data_dependence_relation (dr_a, dr_b, vNULL);
 	  if (vect_slp_analyze_data_ref_dependence (ddr))
 	    {
 	      /* ???  If the dependence analysis failed we can resort to the


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]