On 01/09/2012 04:31 PM, Richard Guenther wrote:

We have two Graphite related release blockers for 4.7.  The
following patch fixes the first one.

Hi Richard,

thanks a lot for working on this.

The asserts in

static inline ppl_dimension_type
psct_dynamic_dim (poly_bb_p pbb, graphite_dim_t level)
{
   graphite_dim_t result = 1 + 2 * level;

   gcc_assert (result<  pbb_nb_scattering_transform (pbb));
   return result;
}

static inline ppl_dimension_type
psct_static_dim (poly_bb_p pbb, graphite_dim_t level)
{
   graphite_dim_t result = 2 * level;

   gcc_assert (result<  pbb_nb_scattering_transform (pbb));
   return result;
}

are not consistent in case both a dynamic and static dimension should
always exist at the same time.  Changing psct_dynamic_dim to use<=
fixes the issue.

I don't think this is the right fix. The asserts seem to be correct.
The problem is actually already shown when you run cc1.

[CLooG] INFO: 2 dimensions (over 3) are scalar.
[CLooG] WARNING: not enough constraints for 1 scattering function(s).

This means, the schedule/scattering that we defined was not sufficient
enough to define the execution order. It is underspecified. The result is that CLooG generates the following code:

for (c2=-250;c2<=1535;c2++) {
  for (i=max(0,ceild(51*c2,307))
       i<=min(255,floord(51*c2+12800,307));i++) {
    S1(i);
  }
}

c2 is a scattering variable, but 'i' is actually a original loop dimension. I believe graphite does not expect this dimension to show up. Somehow the scattering that is defined is incorrect. I suspect the loop flattening has some problems with the inequalities introduced by the strip-mining.

I will look into this.

Tobias, you are the only active(?) Graphite reviewer left.

I am, though i have currently not a lot of time to write patches myself.

I am still looking into finishing Sebastians patches. Afterwards it should be simple to use the new polyhedral optimizer as it was recently added to isl.

Tobi

Reply via email to