https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84466

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
So the issue is

  for (i = 0; i < N; i++)
    {
      y[i] = i;

      for (j = 0; j < N; j++)
        {
          if (j > 500)
            {
              x[i][j] = i + j + 3;
              y[j] = i*j + 10;
^^^

here we now verify that we can instantiate i*j + 10 at this point which
is (int) {10, +, {0, +, 1}_3}_4 and that fails the graphite_can_represent_scev
test because of

    case POLYNOMIAL_CHREC:
      /* Check for constant strides.  With a non constant stride of
         'n' we would have a value of 'iv * n'.  Also check that the
         initial value can represented: for example 'n * m' cannot be
         represented.  */
      gcc_assert (loop_in_sese_p (get_loop (cfun,
                                            CHREC_VARIABLE (scev)), scop));
      if (!evolution_function_right_is_integer_cst (scev)
          || !graphite_can_represent_init (scev))
        return false;

given CHREC_RIGHT is {0, +, 1}_3 and not an INTEGER_CST.

I think with graphite_can_represent_scev I used the wrong tool (it is supposed
to guard what extract_affine handles).  Testing a patch.

Reply via email to