<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/154287>154287</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Headers][X86] VectorExprEvaluator::VisitCallExpr - allow AVX2/AVX512 per-element shift intrinsics to be used in constexpr
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            good first issue,
            backend:X86,
            clang:headers,
            constexpr
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          RKSimon
      </td>
    </tr>
</table>

<pre>
    Handle the elementwise vector shift intrinsics inside VectorExprEvaluator::VisitCallExpr and add constexpr test coverage, similar to https://github.com/llvm/llvm-project/issues/152524
```
_mm*_sllv_epi8 _mm*_srlv_epi8  _mm*_srav_epi8
_mm*_sllv_epi16 _mm*_srlv_epi16 _mm*_srav_epi16
_mm*_sllv_epi32 _mm*_srlv_epi32 _mm*_srav_epi32
_mm*_sllv_epi64 _mm*_srlv_epi64 _mm*_srav_epi64

_mm*_mask_sllv_epi8  _mm*_mask_srlv_epi8 _mm*_mask_srav_epi8
_mm*_mask_sllv_epi16 _mm*_mask_srlv_epi16 _mm*_mask_srav_epi16
_mm*_mask_sllv_epi32 _mm*_mask_srlv_epi32 _mm*_mask_srav_epi32
_mm*_mask_sllv_epi64 _mm*_mask_srlv_epi64 _mm*_mask_srav_epi64

_mm*_maskz_sllv_epi8  _mm*_maskz_srlv_epi8 _mm*_maskz_srav_epi8
_mm*_maskz_sllv_epi16 _mm*_maskz_srlv_epi16 _mm*_maskz_srav_epi16
_mm*_maskz_sllv_epi32 _mm*_maskz_srlv_epi32 _mm*_maskz_srav_epi32
_mm*_maskz_sllv_epi64 _mm*_maskz_srlv_epi64 _mm*_maskz_srav_epi64
```
for 128/256-512 variants

The shift intrinsics have special case handling for out of bounds (elementwise) shift amounts, for logical shifts if the unsigned amount is greater than or equal to the element bitwidth then the result is 0. For arithmetic shifts, the shift amount is clamped to (bitwidth-1) to splat the sign bit.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyklV9vq0YQxT_N8jKyhQeW4AcefJNrXalvbRXlLRpgDNu7sO7u4rR8-mqJHf-hSJUqRUL6beYM54ScJedU0zMXQn4T8iWiwbfGFr_-8pvqTB-Vpv67-EF9rRl8y8CaO-79h3IMJ668seBadfCgem9V71TlIDxqhtfp-PtfR_v9RHogb6xIdiLZvSqn_DNpHc6A-hqorqEyvfMciGfnoTInttSwwGdwqlOaLHgDrfdHF2RwL3DfKN8O5boyncC91qfLY3W05g-uvMC9cm5gJ3C_kSgxFfFOZPH5J969d53A3bvT-vTOR5XDBdgLuBL6JPOpTfY4dkvoTOZzCT7O3RI6k_lclj7O3RI6k-D0a7Qj9_PGJdxh-2D-TGd-70SuFu9EZnhu_07m6vhOZobnadzJXAO4k5nhxXDGhXTGf49nXMpnXAhoXEhoXIxoXMhoXAhpXExpXIhpXMhpfAjq5v_lYCxsMBe4R5mt5AbhRFZR791nor-3PO-Dlk4M7siVIg0VOYY2FIrqGwh6ZvBgDlCaoa8dCMxvOkbg9qxHnRnCGnyehrRpVEX689CBOkztNPRTmdXn3wbloLFMni34lnowFvjPgXRokps2g1L5D1X7NsB-OrHsBj0JxGvYGwtklW879qo67wxv4r_sXhdWmroj12GFwPyivNoEK96AO2ryn4Oq6cPmdVQXSb1NthRxsXmSUm4xTeOoLdIkq7JU1lWdJOU2y0nKrDykMcoMn_BJRqrAGGWcb7ZxnqRxvJZpUpb5gXlDyCVlIo25I6XXoRXXxjbR1IfFRqaYP0WaStZuqn7ExpgaDsq6YMMNLBAFPgvEkqqf3Nci2b3l2RetNPWNSHYtU83WXfmlxwORL5EtpkYuh8aJNNbKeXd9G6-8nq6eH2cV-SLkt7BGvvzXC2QFpLX5gN3rGwrc717fwnd5ZLu6_HlnX6Q3UDIMjmtQ_fXmiQari_9zw0yhngr8JwAA__-BKn1s">