<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 - [X86] Vector call ABI handling does not count registers correctly for 256-bit vectors on SSE only target"
   href="https://bugs.llvm.org/show_bug.cgi?id=46782">46782</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[X86] Vector call ABI handling does not count registers correctly for 256-bit vectors on SSE only target
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

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

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

        <tr>
          <th>OS</th>
          <td>Windows NT
          </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>LLVM Codegen
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>craig.topper@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The frontend code counts the number of used vector registers for vector call
handling. Once we've ran out of the registers allocated to vectorcall, the IR
generation changes. If the vector is larger than the 128 bit on an SSE target
or larger than 512 on an avx/avx2 target, then the number of registers used is
undercounted since those cases will be split by backend type legalization. This
can cause an llvm_unreachable to trigger in X86CallingConv.cpp. Or if asserts
are not enabled, a fatal error when creating physical register copies.

Example crash <a href="https://godbolt.org/z/TTT6nx">https://godbolt.org/z/TTT6nx</a></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>