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

    <tr>
        <th>Summary</th>
        <td>
            Simple shift in loop body not optimized to eliminate the loop
        </td>
    </tr>

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

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

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

<pre>
    Given following IR:
```llvm
define i32 @src(i32 %a) {
  %1 = icmp eq i32 %a, 0
  br i1 %1, label %loopexit, label %preheader

loopexit:
  %2 = phi i32 [ 1, %0 ], [ %5, %preheader]
  ret i32 %2

preheader:
  %3 = phi i32 [ 0, %0 ], [%6, %preheader ]
  %4 = phi i32 [ 1, %0 ], [%5, %preheader ]
  %5 = shl i32 %4, 1
  %6 = add nuw i32 %3, 1
  %7 = icmp eq i32 %6, %a
  br i1 %7, label %loopexit, label %preheader
}
```
While the tripcount of the loop is not static, it is equal to `%a`. That should make it possible to optimize the above code to simply:
```llvm
  %c = shl i32 1, %a
  ret i32 %c
```

Corresponding Alive 2 link: https://alive2.llvm.org/ce/z/f_xJrW 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVNtu2zAM_Rr7hVggyZfYD35IG3TYHrcBfRxkW4m1ypYryb19_Sg5bi4Nig2wFZE84TmkKNe6fa2-yicxwE4rpZ_lsIdvP6JkE5FtRDZRTuZHqad-drViJwcBMmEQpcSaJmJFMFjGI1ZCtL6ZgeBdFKJkC7LpRxCPcMTdAllQtQFJA9a7Fa-F8pbSehQv0p05RyM6wVthDvLC-o5cVAdmFpjHTs6s2Q2E_BghaG3DHp1oZwf_MTmGD4mMcItqdsp5xJ6RJh9IyRVSNPNLTjghRX_6T-qvib9IlIVEtlNLGan_Az1B5AHB2xaG6XlBJZeo9bWDXKrgH85y_f9nud5ezNxs3ndSCXAdvkaOjZ4GB3oXHD4tSAuDdmAdd7LxBNJ5n3icuAKnwSfyCnOygl8dR2SnJ9VCzx-Ex47aWll7Cg16dLKXbzMdr_WTgEa3IWRlP6rXzy5GaFNz1m562Z-TcWquVjuvt9oYYUc9tP4-bhReUGCg5PCAAqBzbrReCbvDh_soW3kdK2326GkELm_47n6_fDf3ELdV0pZJyWMnnRLVT1-KQJFyh2qGuY01fglCI5cetL5qoXA_cCfe-x1PRlXnCvbSdVO9anSPRujH_PNlNPqPaPDU76S1k7C4ydIyX8ddVSSkaBpSMiqSrMgymmY1p0lLdplgtM3jMCa2CkPOQtJkc5CGB60HTMZw0mNZMcIYSWnBaEJouioKmuZ1U-esLMqEpviREj2X6r1DsamCunraWwwqaZ09BjlOw34QIjBjfj65TpvqTRhd0nURh0qqUMZfmdl6MQ">