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] Improve vectorizer dependence analysis


The following patch makes us handle strided group stores in the
vectorizer dependence analysis code as our general dependence
code cannot handle {0, +, s_1} vs. {1, +, s_1} resulting from

 a[i] = ..;
 a[i+1] = ..;
 i+=s;

this prevents the strided store support enhancement from triggering
on symbolic strided stores (it still triggers for constant-step
aka groups with gaps stores).

I also took the opportunity to remove read-read and self dependence
computations - those were never necessary for loop vectorization.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

Richard.

2016-06-14  Richard Biener  <rguenther@suse.de>

	* tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Do
	not consider dependences between accesses that belong to the
	same group.
	(vect_analyze_data_ref_dependences): Do not analyze read-read
	or self-dependences.

Index: gcc/tree-vect-data-refs.c
===================================================================
*** gcc/tree-vect-data-refs.c	(revision 237428)
--- gcc/tree-vect-data-refs.c	(working copy)
*************** vect_analyze_data_ref_dependence (struct
*** 227,232 ****
--- 231,242 ----
        || (DR_IS_READ (dra) && DR_IS_READ (drb)))
      return false;
  
+   /* We do not have to consider dependences between accesses that belong
+      to the same group.  */
+   if (GROUP_FIRST_ELEMENT (stmtinfo_a)
+       && GROUP_FIRST_ELEMENT (stmtinfo_a) == GROUP_FIRST_ELEMENT (stmtinfo_b))
+     return false;
+ 
    /* Even if we have an anti-dependence then, as the vectorized loop covers at
       least two scalar iterations, there is always also a true dependence.
       As the vectorizer does not re-order loads and stores we can ignore
*************** vect_analyze_data_ref_dependences (loop_
*** 469,475 ****
    LOOP_VINFO_NO_DATA_DEPENDENCIES (loop_vinfo) = true;
    if (!compute_all_dependences (LOOP_VINFO_DATAREFS (loop_vinfo),
  				&LOOP_VINFO_DDRS (loop_vinfo),
! 				LOOP_VINFO_LOOP_NEST (loop_vinfo), true))
      return false;
  
    FOR_EACH_VEC_ELT (LOOP_VINFO_DDRS (loop_vinfo), i, ddr)
--- 501,507 ----
    LOOP_VINFO_NO_DATA_DEPENDENCIES (loop_vinfo) = true;
    if (!compute_all_dependences (LOOP_VINFO_DATAREFS (loop_vinfo),
  				&LOOP_VINFO_DDRS (loop_vinfo),
! 				LOOP_VINFO_LOOP_NEST (loop_vinfo), false))
      return false;
  
    FOR_EACH_VEC_ELT (LOOP_VINFO_DDRS (loop_vinfo), i, ddr)


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