------- Comment #5 from sebpop at gmail dot com  2007-10-31 23:43 -------
Subject: Re:  Failing to represent the stride (with array) of a dataref when it
is not a constant

> > Making us return symbolic stride would not be hard.  The problem is that 
> > data
> > dependence analysis would fail anyway,
>

True, and the vectorizer has also to be fixed to not consider
INTEGER_CST strides only.

> sometimes (not in this testcases) there won't be a need for dependence testing
> - e.g. a reduction computation where there are no stores, or initialization
> with a constant (i.e. a store and no loads), so there's already a value in
> doing this.
>

This patch would let symbolic non integer_cst steps to be computed,
and stored in DR_STEP:

Index: tree-data-ref.c
===================================================================
--- tree-data-ref.c     (revision 129797)
+++ tree-data-ref.c     (working copy)
@@ -657,7 +657,7 @@ dr_analyze_innermost (struct data_refere
       offset_iv.base = ssize_int (0);
       offset_iv.step = ssize_int (0);
     }
-  else if (!simple_iv (loop, stmt, poffset, &offset_iv, false))
+  else if (!simple_iv (loop, stmt, poffset, &offset_iv, true))
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "failed: evolution of offset is not affine.\n");


but the problem is that in the vectorizer, DR_STEP has to be an
INTEGER_CST: for instance,

  step = TREE_INT_CST_LOW (DR_STEP (dra));
...
      || tree_int_cst_compare (DR_STEP (dra), DR_STEP (drb)))

and plenty of other places will ICE if we feed them with symbolic
strides.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33113

Reply via email to