<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Wrong isl ast schedule generated"
   href="https://bugs.llvm.org/show_bug.cgi?id=33238">33238</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Wrong isl ast schedule generated
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>Polly
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Other
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>polly-dev@googlegroups.com
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>huihuiz@codeaurora.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=18547" name="attach_18547" title="test input">attachment 18547</a> <a href="attachment.cgi?id=18547&action=edit" title="test input">[details]</a></span>
test input

Attaching the test.ll as test input

Run command "opt -polly-codegen -S test.ll -debug"

Polly produce the isl ast schedule of:

    {
      if (p_0 >= 3) {
        for (int c0 = 0; c0 < (p_0 + 2) / 4; c0 += 1) {
          Stmt0(c0);
          if (p_0 >= 4 * c0 + 3) {
            Stmt2(c0);
            if (p_0 >= 4 * c0 + 4) {
              Stmt4(c0);
              if (p_0 >= 4 * c0 + 5)
                Stmt6(c0);
            }
          }
        }
        if ((p_0 - 1) % 4 == 0) {
          Stmt7();
        } else if (p_0 % 4 == 0) {
          Stmt5();
        } else if ((p_0 + 1) % 4 == 0) {
          Stmt3();
        }
      } else {
        Stmt0(0);
      }
      Stmt1();
    }

else
    {  /* original code */ }

However, the correct schedule should be:

    {
      if (p_0 >= 3) {
        for (int c0 = 0; c0 < (p_0 + 2) / 4; c0 += 1) {
          Stmt0(c0);
          if (p_0 >= 4 * c0 + 3) {
            Stmt2(c0);
            if (p_0 >= 4 * c0 + 4) {
              Stmt4(c0);
              if (p_0 >= 4 * c0 + 5)
                Stmt6(c0);
            }
          }
        }
        if ((p_0 - 1) % 4 == 0) {
          Stmt7();
        } else if (p_0 % 4 == 0) {
          Stmt5();
        } else if ((p_0 + 1) % 4 == 0) {
          Stmt3();
        }
      } else {
        Stmt0(0);
      }
      if((n <= 2) || ((n - 2)%4 == 0))
        Stmt1();
    }

else
    {  /* original code */ }

Notice that for Statement Stmt1(), Polly produce universe domain, Stmt1 is
being executed unconditionally. However, if going through the basic blocks of
the input test.ll file, Stmt1 will only be executed under condition "((n <= 2)
|| ((n - 2)%4 == 0))"</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>