<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/97694>97694</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVX512] Replace x86_avx512_mask_pmov_* register intrinsics with generic expansion
</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>
We already expand basic truncation intrinsics to the trunc+shuffle sequence:
```cpp
static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_cvtepi64_epi8 (__m128i __A)
{
return (__m128i)__builtin_shufflevector(
__builtin_convertvector((__v2di)__A, __v2qi), (__v2qi){0, 0}, 0, 1, 2, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3);
}
```
But the predicate variants are not, as its tricky to correctly merge the predicate select of the lower elements and the zeroing of the upper elements:
```
static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_cvtepi64_epi8 (__m128i __O, __mmask8 __M, __m128i __A)
{
return (__m128i) __builtin_ia32_pmovqb128_mask ((__v2di) __A,
(__v16qi) __O, __M);
}
static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_cvtepi64_epi8 (__mmask8 __M, __m128i __A)
{
return (__m128i) __builtin_ia32_pmovqb128_mask ((__v2di) __A,
(__v16qi) _mm_setzero_si128 (),
__M);
}
```
So this is likely to require some improvements to the DAG backend as well as clang frontend
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVcFu4zYQ_Rr6MthAomRZOuggx3UP7bZAkrZ7IyhqbE9DkQpJKcl-fUFJQbLptsBiL2sYpIZ68ziceRxJ7-lsEGu23bPtYSPHcLGuvvnllnprNq3tnuu_EKR2KLtnwKdBmg5a6UlBcKNRMpA1QCY4Mp6Uh2AhXHB5yfjeX8bTSSN4fBjRKGRZw5IDSxpWJMtfDcOy4oMMpEAIMpoMCgFC9CkvCYQ4_HRs_vj1Thx_E83d3c1tysvFSfS9UFPAgYpc4EAlMF6--jWMV-t-u_3yAOAwjM68ATJeCdGOpAMZsUY8oQrWsZd94BWgrJnQhVdA5Jl4t9A0jF9DtB-iHY31_WLv9klcS9jusMz8GtI48DhkjF-v-2Uv9jcPFcv2L2c-vEv2Yu7HMBdpcNiRkgFhko6kCR6kQzA2RCrpgYKH4EjdP8e6KuscqqCfoUd3xncUHjWqAPY0r2v7iA5QY48zrenm5c_oLJnzC2ochjeof2vjO4XRS3__f-r4falVH3ElCPFxtb9VPG_EQTLjYujt9NCmvJwjgHcaWZhf6vzFb4GlxcOKWwP8-PWifn9yPn81Oz9qOvpeeAxRQsJTysuFqXp1_s9Mfamn29iiyAN50HSPeha3w4eRHIK3PQL1g7PTqt21ox2an6GV6h5NF6_GI2odZ6WlOcPJWRPQdJuuzroqq-QG63THk6RMqzTZXOqqPBXbU1m1J57zZCvLYpcVKcei3ao275IN1TzhebJL8qTM0m1yVbYy57nMqhxPW95WLE-wl6SvtJ76K-vOG_J-xLraFVW-0bJF7ec2zvkaJsuaT2XBOI-d3dXR70M7nj3LE00--FemQEHP34Dmz0_bNOLhBgctFcJTWQg5PW1TvlynWEzBeAMOz-QDurfN_5HCBc5o0JFaPhaerNmMTteXEIb5hvMj48czhcvYXinbM36MYazTh8HZv1EFxo_z6Tzjx-WAU83_CQAA__9qAgOC">