<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/94436>94436</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [KnownBits] Remove hasConflict() assertions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:instcombine
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          nikic
      </td>
    </tr>
</table>

<pre>
    The KnownBits infrastructure currently has pervasive !hasConflict() assertions, which ensure that KnownBits don't claim that a bit is both zero *and* one at the same time. However, these kinds of conflicts can naturally arise whenever the value is known to be poison. At this point, these assertions no longer provide value and just result in a steady stream of compiler crashes.

We should remove these assertions. Once that is done, we may also make use of conflicting KnownBits to fold values to poison.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8Uk-Lq0gQ_zTtpRjRVmNy8JCZISzsYWFZ2HOplXRN2u7QVRqyn37RzHsz8OBdlKK6f__6hyJ8CUSdaV5N857hrC6mLvCVh6yP46P7xxH8GeI9vLIKcDgnFE3zoHMiGOaUKKh_gEOBG6UFhRcCY0uH8hbD2fOgxu6NPQCKUFKOQYx9g7vjwQEFWXHUoX5jGWMwtlUYPPL0XCL0rMACfVQH_1GKYOwRw2jsEWIgQAV1BIITgfJEOfwR77RQWsnUkRBcOYwC8QzDpzCBAQME1Dmh9w_AxEJwdxTWixvegn6mlfe6qgON0BPcIksMORxXTpZ1DvrF82UUQgQfw4US3FJcePwBiGGEj1kUEsnsFTgAgijh-ADRRDg9dU439pRgSCiOJDfFuymOz--_BOLi7EdINMWFfiHP4a8wfGbLW6i0BU8w4QPQS4QJrwSz0PdQOFy-PYVGOEc_PmVv46f5bOyq8VAdMKOubMu2aau6bTLXNbbF-ty2zaEvhnp_Rmp6u6N9WSLVZbHLuLOFrYtd0RRtXVdNXlfFrqxsRXa335VFY-qCJmSfe79MeUyXjEVm6g51Xe0yjz152Qpr7XrCVEcOokOcel4t2rXIqVtXL_18EVMXnkXlC05Z_Vb5nz5N8w5_P2P8XXGzOfnOqd7EVEdjT8aeLqxu7vMhTsaeNjnP38stxQ9aMU6bejH29DSwdPb_AAAA__-0ky86">