<html>
    <head>
      <base href="https://bugs.webkit.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 - Air::allocateStack is way too optimistic about Def semantics"
   href="https://bugs.webkit.org/show_bug.cgi?id=151128">151128</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Air::allocateStack is way too optimistic about Def semantics
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>WebKit Nightly Build
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>Normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>JavaScriptCore
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned&#64;lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>fpizlo&#64;apple.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Air::allocateStack assumes that a Def of a StackSlot means that the StackSlot is not live before that instruction.  But this is only true if the instruction Def's the full size of the StackSlot.  This is hard to tell because currently, a Def in Air means that it could write anywhere from 1 to 8 bytes.

There are a lot of possible solutions.

For starters, B3 StackSlots are unlikely to benefit from being allocated based on liveness.  We could simply create a new notion stack slot that has the Use/Def semantics we want.  For example, we could say that the &quot;Anonymous&quot; stack slot kind actually means that any store to the stack slot changes all bytes in the StackSlot.  This would only require a documentation change.

Alternatively, we could incorporate forward flow into the notion of liveness: a Def is only a Def if just prior to it, none of the bytes in the StackSlot have had a value stored into them.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>