<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">