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

    <tr>
        <th>Summary</th>
        <td>
            TypePromotion produces invalid IR
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    ```
; RUN: opt -S -type-promotion < %s
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"

define i1 @test(i8 %arg) {
  %ext1 = zext i8 %arg to i64
  %trunc = trunc i64 %ext1 to i3
  %ext2 = zext i3 %trunc to i8
  %cmp = icmp ne i8 %ext2, 0
  ret i1 %cmp
}
```
Results in a verifier error:
```
Type too small for ZExt
  %ext2 = zext i64 %1 to i32
in function test
LLVM ERROR: Broken function found, compilation aborted!
```
The produced IR looks as follows:
```
define i1 @test(i8 %arg) {
  %ext1 = zext i8 %arg to i64
  %1 = and i64 %ext1, 7
  %ext2 = zext i64 %1 to i32
  %cmp = icmp ne i32 %ext2, 0
  ret i1 %cmp
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VEtvozAQ_jVwsYjA5nng0DSttFL3oXS7h70ZGBJvHBvZJm331-8YkjSV0sOutBKYYeabxzcz0OjutQ7y-HjFqyC-CdiSrJ--BOyG6MGR6JFE7nWAaDB6r53QigTslgQ0szPecbMBRzruuOSvenRoX6GdQrTHIBCJEh_-ZjQSSY7CdPi3PEUhT1FNPQDPSDE66x69jtJ3SZwRg4RTAs5Nu0XkqHZKP6tICjW-RBs1nt3ms4NeKCAiIUEaO7AuoKUoPQWMGtCKBMVyRhKvhBeXTCl-o0TOQOI08QW_AZ0ZVTshZwmtZ38PZu-D0oug7M3fI8sLZLsfJqDwgi-7PPkH9JbEJ6TBdnhGk8ORbbE6Cu8nugY7SmeJUISTAxjRCzAEjNEGW33V5TtOHCvTxO65lKTXhvy8e3EfE5qpH3kfu4_5emQ47czU9kn78PDjM7lbr7-u_Yotjd7BBa7Xo-o80VbvByH5pOSNNg5QnVwvdgsEt7MbW-jIpzWRWu8s4RaDSamf7Uck_9dezCiuusuN8JyKv-vf9XVg9N_3IYQ6yfOipGWZVGFXs65iFQ-dcBJqP_Nv54_82FC_NQcuhW9sOBpZb50bpo7Se7w2wm3HZoHDwhcpD6eH_1v8ghY7ei-sHcGikJVlysJtzfqMxjwrKOMtb6q0qjgkGXQ8j1nR5n0oeQPS1kG2DLJVKGoaU5okcZGwNM-qRZMVKXQ5pFWRJzSpcHiw50IufOKFNpvQ1FMNzbixaJTCOvtm5NaKjQI4xeej22pTK7ETbTgVW0-V_gFzbnJQ">