<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55231>55231</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Failure to recognise masked store pattern
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
Pulled out of Issue #46917
```
__attribute__((noipa)) void
f1 (char *__restrict dst, char *__restrict src1, char *__restrict src2)
{
for (int i = 0; i != 64; i++)
dst[i] = src1[i] >= src2[i] ? src1[i] : dst[i];
}
```
clang -g0 -O3 -march=skx -mprefer-vector-width=512
```
define void @_Z2f1PcS_S_(ptr noalias nocapture noundef %0, ptr noalias nocapture noundef readonly %1, ptr noalias nocapture noundef readonly %2) {
%4 = load <64 x i8>, ptr %1, align 1, !tbaa !6
%5 = load <64 x i8>, ptr %2, align 1, !tbaa !6
%6 = icmp slt <64 x i8> %4, %5
%7 = call <64 x i8> @llvm.masked.load.v64i8.p0(ptr %0, i32 1, <64 x i1> %6, <64 x i8> poison), !tbaa !6
%8 = select <64 x i1> %6, <64 x i8> %7, <64 x i8> %4
store <64 x i8> %8, ptr %0, align 1, !tbaa !6
ret void
}
f1(char*, char*, char*):
vmovdqu64 (%rsi), %zmm0
vpcmpltb (%rdx), %zmm0, %k1
vmovdqu8 (%rdi), %zmm1 {%k1} {z}
vmovdqu8 %zmm1, %zmm0 {%k1}
vmovdqu64 %zmm0, (%rdi)
vzeroupper
retq
```
We could have merged that vmovdqu8 reg-reg move into the final store if we'd recognised that the masked load was for the same pointer / predicate mask.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVU2P2zgM_TXORUhgyx-xDz50mg6w2MMWO4cWvQSyzDjqyJYryZnp_PpSsj1x0sx2NlAgkSIfnyiRrlT9s_w8SAk1UYMl6kD-MmYAEtA4yYpoG4S7IPwQZOE0vLjfM2u1qAYL-31AcxydEj0LaIGDnJSoR8NDhEA5PzKNM7ppMOjHLamNDehHcmPHaB69vUVdiJHS9m5cEHJQzjIXnSWCBPGOhEF855Y0clKWeDGgd34UsxvxLNI7EaQ77-ZDv8qfJhU9q-6vTD4sEDDGTGx3M2lcsq4h6yYk639ism6Z5kcMYR6fUeg1HECvT8Ct0usnUVu3l0b0JlQNB9GBzzMJknD_jR6iz_xh_-Auo7eadIpJwQzOnPV20ICroUM3zEkauvT-t5UGVqtO_nTm0f8zdzdEFpeDqsRnVyqGbOOPWUKeichdgifgOQjCNx3xS7w6WzHm5myBlP4Zib4PKfNIgrc9MdJeonnOo2-aLny23oczKa_tk1DKU7tpmXmEeuP4bU5ZIvJNH043MuddxHTiNSNEU8TsQutxeyWM6nxVvXmQfHy6IPHpvAvUHeSmNplRDb5B-H0_X2Q5fEeWNdhFKziXxdQZpsaAJT6X-_WywAo7F6v7nVp1qn8MyGv8-d6TaiNec5S-tG145dTjLUtbkUun-vnKaVw-RjdD5tfelyEj_-S993bn1i-v530byDsuGCwx_nTuBeUFn0unF9Bq6HvQl3q8lx8328oXIFwNsiZHdgLSgm7wq2CPzJ65a2jW-CcoA8GGq3AfCHYjJqdnIw7kCQK6rdGWq6YTZgZxlmOFjBX8hL3EtW6nN6wF99w7C-593RNsiLXgzI4um1VdxnURF2xlhZVQYtP9mmeuC98zIV0vQiqvAecwI6MeP1agu9WgZXm0tjfuWdF7HI2wx6HacNWi4Cp4mta9Vt-xnlAU7mtocJGmNI5WxzLKaAIpZ9WWQhxW-TantE4hp6ipMh6vJKtAGscwoLRi_BG6GiM6uhS_JbuVKGlIaZiGWCtRTrNNsYUoBsZ5kcZFgQWUhNDisTa-qSjdrHTpaVVDY1yvEcaa8yYzBusQfFIcPhvsUeny378fRKu6lT9B6en_AgZXNSM">