<div dir="ltr">Maybe we're checking the range too early. Maybe we need to do it during IR emission instead of during semantic analysis.<div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 8, 2018 at 12:59 AM Martin Storsjö via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, 7 Jun 2018, Craig Topper via cfe-commits wrote:<br>
<br>
> Author: ctopper<br>
> Date: Thu Jun  7 10:28:03 2018<br>
> New Revision: 334208<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=334208&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=334208&view=rev</a><br>
> Log:<br>
> [X86] Add back builtins for  _mm_slli_si128/_mm_srli_si128 and similar intrinsics.<br>
><br>
> We still lower them to native shuffle IR, but we do it in CGBuiltin.cpp now. This allows us to check the target feature and ensure the immediate fits in 8 bits.<br>
<br>
FWIW, this change broke building libaom: <br>
<a href="https://bugs.chromium.org/p/aomedia/issues/detail?id=1945" rel="noreferrer" target="_blank">https://bugs.chromium.org/p/aomedia/issues/detail?id=1945</a><br>
<br>
In libaom, there's a macro construct like this:<br>
<br>
  #define v256_shr_n_byte(a, n)                                                 \<br>
    ((n) < 16                                                                   \<br>
         ? _mm256_alignr_epi8(                                                  \<br>
               _mm256_permute2x128_si256(a, a, _MM_SHUFFLE(2, 0, 0, 1)), a, n)  \<br>
         : ((n) > 16                                                            \<br>
                ? _mm256_srli_si256(                                            \<br>
                      _mm256_permute2x128_si256(a, a, _MM_SHUFFLE(2, 0, 0, 1)), \<br>
                      (n)-16)                                                   \<br>
                : _mm256_permute2x128_si256(a, a, _MM_SHUFFLE(2, 0, 0, 1))))<br>
<br>
Since this commit, the compilation errors out due to the _mm256_srli_si256 <br>
with invalid range, even though the toplevel ternary operator won't <br>
actually pick them to be used. Not sure if there's anything to do from the <br>
clang point of view here, I guess it's a tradeoff between having stricter <br>
parameter checks for the intrinsics, vs the convenience of piling them up <br>
in a macro like this in libaom.<br>
<br>
// Martin<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>