<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/155395>155395</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] VectorExprEvaluator::VisitCallExpr - add MMX/SSE/AVX PHADD/SUB & HADDPS/D intrinsics to be used in constexpr
</td>
</tr>
<tr>
<th>Labels</th>
<td>
good first issue,
backend:X86,
clang:frontend,
constexpr
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
The HADD/SUB horizontal intrinsics can all be used in constexpr with suitable handling of the __builtin_ia32_phadd/sub* builtins inside VectorExprEvaluator::VisitCallExpr
```
_mm_hadd_pi16 _mm_hadd_epi16 _mm256_hadd_epi16
_mm_hadd_pi32 _mm_hadd_epi32 _mm256_hadd_epi32
_mm_hadds_pi16 _mm_hadds_epi16 _mm256_hadds_epi16
_mm_hsub_pi16 _mm_hsub_epi16 _mm256_hsub_epi16
_mm_hsub_pi32 _mm_hsub_epi32 _mm256_hsub_epi32
_mm_hsubs_pi16 _mm_hsubs_epi16 _mm256_hsubs_epi16
_mm_hadd_pd _mm256_hadd_pd
_mm_hadd_ps _mm256_hadd_ps
_mm_hsub_pd _mm256_hsub_pd
_mm_hsub_ps _mm256_hsub_ps
```
These are elementwise horizontal pairwise so getting the correct src/dst element indices is vital and use a mixture of regular add/sub, fadd/fsub and signed sat add/sub arithmetic
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVF1v6zYM_TXyC9HCpj-aPPjBt6kxYLjAxXpX9C2QLcXmJkuBKPd2-_WDfJPG7vYwIEBAHh2eE4akZKbBal2L8osoD4mcw-h8_duvzzQ5m3RO_VV_HzX80hwOAtvn37_A6Dz97WyQBsgGT5apZ-ilBWkMdBpm1grIQu8sB_1-9vCDwgg8U5Cd0TBKqwzZAdwJwqjheOxmMoHskWSOx_MolRLY8twJbOCCMUQhpeFF98H5p_ezf3qTZpbBeZE3Im9eiCk8SmMiJtJGVOnlkzbHaTrGssczZRV8RPoaYlmtM1tGjhvGz3DNyHFF4K0G_1uEbypXHs_dihajLeuW2TKu1i74ytpHZkXgrcZna6vUytrSA7X5yWe1AXkL8sai2ji6MZeItyDDp7_t-6hZg_QatNGTtuEHsV4P4FmSX3LsYNAhxKmKI9U773UfgH0vsFUcrgWArKJeMxDDG8US0qo4sSBhovcwex3H0uthNtLDahIf4fQzOvHcLaxlcxSwDLd3ID2FcdKB-kTVudrne5noOnsoK0yrXZUmY11WmBdZkVVKVb1K-2yvZVmkJ_WAWHS7IqEaUyzTHVZZlhWY3p9wl6aykA_7B1kW-V4UqZ4kmXtj3qZ754eEmGddZ2WZ78vEyE4bXlYacXBOwYk8B1geCUSBjwKxk_2f2iqRN6-76iPbG2kHkTcn72yI8Adw3eaYKQ-Jr6P4XTcPLIrUEAe-2QkUzHJTHpdy5eF_ri3cxVbC16-v8dg8Pwlsm5dX-LY6PwKr5Rp9exbYHtYnKLj_vD7J7E09hnDmKIitwHagMM7dfe8mgW00ffm6O3v3h-6DwHbpFQtsLz19q_GfAAAA__9uXblo">