<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137520>137520</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVX-512] `vpternlog` can be used even when a subexpression is consumed
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Validark
</td>
</tr>
</table>
<pre>
This code:
```zig
export fn foo(a: @Vector(8, u64), b: @Vector(8, u64), c: @Vector(8, u64)) @Vector(8, u64) {
const x = a & b;
const y = a & b & c;
return x *% y;
}
```
```llvm
define dso_local <8 x i64> @foo(<8 x i64> %0, <8 x i64> %1, <8 x i64> %2) local_unnamed_addr {
Entry:
%3 = and <8 x i64> %1, %0
%4 = and <8 x i64> %3, %2
%5 = mul <8 x i64> %4, %3
ret <8 x i64> %5
}
```
Compiles to:
```asm
vpandq zmm0, zmm1, zmm0
vpandq zmm1, zmm0, zmm2
vpmullq zmm0, zmm1, zmm0
```
Should be:
```asm
vpandq zmm3, zmm1, zmm0
vpternlogq zmm2, zmm1, zmm0, 128
vpmullq zmm0, zmm2, zmm3
```
In the current assembly, the second `vpandq` relies on the input of the first one. `vpternlogq`, on the other hand, can be computed in parallel to `vpandq`.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEVMtu6zYQ_RpqM4ghkXp5oYWvcw103SLoLqDEscWWIhU-cuN8fUFKaRI_WkMw7TlnhucMxeHOyZNG7Ej1g1SPGQ9-NLZ74koKbv_OeiPO3R-jdDAYgYTtSJ6eOl-ed3ki-Q7fZmM9HDUcjSG05YTtgJT5Ew7eWELbltA9hLokdBt_9f-DD_-Jb-9BQJofJN_BYLTz8AaEPQIHQuu4YUIAVvD8FUzfwyfFog9WxwJ0R2gF5wUizeNX6xedUOp1IvlO4FFqBOHMszIDV0DYvoU3kHVJ2M-ofGnRRZhWefRxFS1uRmk0m8o_B635hOKZC2FX_z-1t-flqCCy2eJVi3vl4-Yrt7zPZSuXfnCrxJ3ClUdalSuXJa5Ff02p7nV0b6ZZKnTgzfX7xt20HlL8vM5cixeA92lK7XufpmJdk6Mv-Gd8Wem3MlNQ6uVemQt9v48mKAH9jdtwWx0kAeyWwH-ZHq1W5vSySLtk0j0UtL2hGOC7p2Vl16J_0-BHhCFYi9oDdw6nXp1jQow7HEw88zpfRJM6B4tKogOzZEo9Bw_mmP4cpXUejMbNkvKhPm5H9x8pxo9oYeRapDvNNfQIg5nm4FGA1DBzy5VCBd5823qTiY6JLdvyDLuiKaumrpqGZWMneMUo9gM9bikXORtaJrZ5U7KmGQq6PWayozmt8pI2RVnVBdvUbcHatqiEqMTQCkbKHCcu1Sbe142xp0w6F7ArWFPRPFO8R-XSNKRU4y9IKKE0DkfbxaSHPpwcKXMlnXefZbz0Ko3R3dOfD1URE741J7Z07UFwKABfUcOvETVwcKHHt9mic9JoSMNWuzChyIJV3ej97OLLRg-EHk7Sj6HfDGYi9JCGzrI8zNb8hYMn9JA0O0IPq6nXjv4TAAD__0dhpsY">