<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </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 --- - LICM: Ignore loop exits which don't exit on first iteration when computing isGuaranteedToExecute"
   href="https://llvm.org/bugs/show_bug.cgi?id=26428">26428</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>LICM: Ignore loop exits which don't exit on first iteration when computing isGuaranteedToExecute
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </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>normal
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>Loop Optimizer
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>listmail@philipreames.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>When computing the isGuaranteedToExecute predicate in LICM (used for satisfying
dereferenceability and memory model legality questions), we can ignore any
exiting blocks where the exit condition is known not to exit on the first
iteration.  

A motivating example might be something like this:
sum = 0;
for (int i = 0; i < 100; i++)
  if (i > 20) break;
  // g_idx is a global and doesn't alias a
  sum += a[g_idx]
}

We can hoist the load of g_idx out of the loop even if we don't know that g_idx
is dereferenceable since doing so can not change the location of a fault. 
Specifically, we know that the loop exit can't be taken on the first iteration
since (0 > 20) == false.</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>