diff mbox

[VECT] Skip unnecessary data dependence check after visited store stmt in slp

Message ID VI1PR0802MB2176B11F286DE7E2A278BC0FE7AD0@VI1PR0802MB2176.eurprd08.prod.outlook.com
State New
Headers show

Commit Message

Bin Cheng Oct. 28, 2016, 11:10 a.m. UTC
Hi,
Function vect_slp_analyze_node_dependences delays data-dependence check for visited store stmts until we run into the last store, because all stores are sunk/vectorized at the position of the last one.  The problem is that it still checks data-dep for current store stmt after the delay part of code.  This is unnecessary no matter the last store stmt is encountered or not.  This patch fixes the issue by simple refactoring.  Bootstrap and test on x86_64.  Is it OK?

Thanks,
bin

2016-10-27  Bin Cheng  <bin.cheng@arm.com>

	* tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Skip
	unnecessary data dependence check after visited store stmt.

Comments

Richard Biener Oct. 28, 2016, 12:44 p.m. UTC | #1
On Fri, Oct 28, 2016 at 1:10 PM, Bin Cheng <Bin.Cheng@arm.com> wrote:
> Hi,
> Function vect_slp_analyze_node_dependences delays data-dependence check for visited store stmts until we run into the last store, because all stores are sunk/vectorized at the position of the last one.  The problem is that it still checks data-dep for current store stmt after the delay part of code.  This is unnecessary no matter the last store stmt is encountered or not.  This patch fixes the issue by simple refactoring.  Bootstrap and test on x86_64.  Is it OK?

Ok.

Richard.

> Thanks,
> bin
>
> 2016-10-27  Bin Cheng  <bin.cheng@arm.com>
>
>         * tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Skip
>         unnecessary data dependence check after visited store stmt.
diff mbox

Patch

diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index c99fa40..9346cfe 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -583,6 +583,7 @@  vect_slp_analyze_node_dependences (slp_instance instance, slp_tree node,
 	  if (!dr_b)
 	    return false;
 
+	  bool dependent = false;
 	  /* If we run into a store of this same instance (we've just
 	     marked those) then delay dependence checking until we run
 	     into the last store because this is where it will have
@@ -599,22 +600,21 @@  vect_slp_analyze_node_dependences (slp_instance instance, slp_tree node,
 		    = STMT_VINFO_DATA_REF (vinfo_for_stmt (store));
 		  ddr_p ddr = initialize_data_dependence_relation
 				(dr_a, store_dr, vNULL);
-		  if (vect_slp_analyze_data_ref_dependence (ddr))
-		    {
-		      free_dependence_relation (ddr);
-		      return false;
-		    }
+		  dependent = vect_slp_analyze_data_ref_dependence (ddr);
 		  free_dependence_relation (ddr);
+		  if (dependent)
+		    break;
 		}
 	    }
-
-	  ddr_p ddr = initialize_data_dependence_relation (dr_a, dr_b, vNULL);
-	  if (vect_slp_analyze_data_ref_dependence (ddr))
+	  else
 	    {
+	      ddr_p ddr = initialize_data_dependence_relation (dr_a,
+							       dr_b, vNULL);
+	      dependent = vect_slp_analyze_data_ref_dependence (ddr);
 	      free_dependence_relation (ddr);
-	      return false;
 	    }
-	  free_dependence_relation (ddr);
+	  if (dependent)
+	    return false;
 	}
     }
   return true;