<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 - InstCombine unsafely drops zero extensions when combining shifts"
   href="https://bugs.llvm.org/show_bug.cgi?id=44802">44802</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>InstCombine unsafely drops zero extensions when combining shifts
          </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>Scalar Optimizations
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>rspringer@google.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Reproducer: <a href="https://rise4fun.com/Alive/ne8y">https://rise4fun.com/Alive/ne8y</a>

In InstCombiner::reassociateShiftAmtsOfTwoSameDirectionShifts(), when
identifying two shifts to combine, it does so while ignoring any
zero-extensions of those values. In the problematic case above, the values were
both i1s zero-extended to i3s.

When their zero-extensions are dropped (taking them back to i1s) their sum
becomes an xor in SimplifyAddInst(), which causes the shift to basically
disappear (and to be dropped in a later pass).

I'm not familiar with the history of this code, particularly why the zero
extensions are ignored, but changing the code to leave them in place does fix
the issue.</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>