<div dir="ltr">LLVM and clang only provide intrinsics for things that cannot be represented in a straightforward way in the LLVM IR. This means for simple things like and/or/xor/add/sub/cmp there are no instrinics. Most shuffles also have to be implemented through the shufflevector IR instruction. This minimizes the number of intrinsics that have to be supported and allows the optimizers to just be aware of the native IR.<div><br></div><div>The clang docs have this to say</div><div><br></div><div>"<span style="color:rgb(51,51,51);font-family:'DejaVu Sans',Arial,Helvetica,sans-serif;font-size:14.4px;line-height:21.6px;text-align:justify">Please note that Clang does not and will not support all of the GCC builtins for vector operations. Instead of using builtins, you should use the functions defined in target-specific header files like </span><tt class="" style="font-size:1em;color:rgb(51,51,51);text-align:justify;background-color:rgb(226,226,226)"><span class=""><xmmintrin.h></span></tt><span style="color:rgb(51,51,51);font-family:'DejaVu Sans',Arial,Helvetica,sans-serif;font-size:14.4px;line-height:21.6px;text-align:justify">, which define portable wrappers for these. Many of the Clang versions of these functions are implemented directly in terms of </span><a class="" href="http://clang.llvm.org/docs/LanguageExtensions.html#langext-vectors" style="font-weight:bold;text-decoration:none;color:rgb(137,38,1);font-family:'DejaVu Sans',Arial,Helvetica,sans-serif;font-size:14.4px;line-height:21.6px;text-align:justify"><em>extended vector support</em></a><span style="color:rgb(51,51,51);font-family:'DejaVu Sans',Arial,Helvetica,sans-serif;font-size:14.4px;line-height:21.6px;text-align:justify"> instead of builtins, in order to reduce the number of builtins that we need to implement."</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 31, 2015 at 2:11 PM, Matthew Stoll <span dir="ltr"><<a href="mailto:stollio@gmail.com" target="_blank">stollio@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for the correction Sanjay; I meant VANDNPS. <div><br></div><div>Thanks Craig. I guess that works. Is there a better way to get access to AVX intrinsics in the future? I am using LLVM to jit AVX code and I need to use the intrinsics directly when there isn't a native LLVM intrinsic. Is there any reason why these aren't exposed to LLVM users when a native LLVM intrinsic doesn't exist?<div><br></div></div><div>- Matt</div></div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 31, 2015 at 1:53 PM Craig Topper <<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I don't think there is an intrinsic. This is supported by native IR by looking for something like (and %a, (xor %b, -1))</div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 31, 2015 at 1:25 PM, Sanjay Patel via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi Matt -<br></div>I think this should either be VPANDN (integer) or VANDNPS (float); there is no "VPANDNPS".<br></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div>On Thu, Dec 31, 2015 at 1:32 PM, Matthew Stoll via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr"><div class="gmail_quote"><div dir="ltr">Hello all -<br></div><div dir="ltr"><div><br><div>I'm trying to find the llvm intrinsic name for the VPANDNPS AVX instruction to be able to call the intrinsic directly (usually something like x86_avx2_xxx). Usually google or a search through the .td files or source turns something up, but I'm stumped with this one. Any help would be much appreciated.</div><div><br></div><div>Thanks -</div><div><br></div><div>Matt</div></div></div></div></div>
<br></div></div>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div></div><div class="gmail_extra">-- <br><div>~Craig</div>
</div></blockquote></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">~Craig</div>
</div>