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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Nothing obvious (well, the .optimized result is obviously broken).  ISL
transforms

[scheduler] original ast:
{
  for (int c0 = 0; c0 <= 1; c0 += 1) {
    S_9(c0);
    for (int c1 = 0; c1 <= 1; c1 += 1) {
      S_3(c0, c1);
      S_5(c0, c1);
      for (int c2 = 0; c2 <= 1; c2 += 1)
        S_6(c0, c1, c2);
      S_20(c0, c1);
    }
    S_8(c0);
    S_21(c0);
  }
  S_10();
  for (int c1 = 0; c1 <= 1; c1 += 1)
    S_4(0, c1);
}

[scheduler] AST generated by isl:
{
  S_9(0);
  S_3(0, 0);
  S_5(0, 0);
  S_20(0, 0);
  for (int c0 = 1; c0 <= 2; c0 += 1) {
    if (c0 == 2)
      S_9(1);
    S_3(c0 - 1, -c0 + 2);
    S_5(c0 - 1, -c0 + 2);
    S_20(c0 - 1, -c0 + 2);
    if (c0 == 1) {
      S_8(0);
      S_21(0);
    }
  }
  S_3(1, 1);
  S_5(1, 1);
  S_20(1, 1);
  S_8(1);
  S_21(1);
  for (int c0 = 0; c0 <= 1; c0 += 1)
    S_4(0, c0);
  S_10();
  for (int c0 = 0; c0 <= 1; c0 += 1)
    for (int c1 = 0; c1 <= 3; c1 += 1)
      S_6(c1 / 2, c1 % 2, c0);
}

what is odd is the last loop in the original AST - that belongs to the

  if (aj != 0)
    --n1;

stmt and hints at a bogus initial schedule generation (eventually again
confusing the order we visit BBs in...).  Indeed - scop->pbbs has that
block ordered last :/

testing fix.

Reply via email to