<div dir="ltr"><div>For the second part, I don't think most targets use type overloaded intrinsics. For sure X86 doesn't. So in general they can't be vectorized by just changing the type from scalar to vector. They would need to be remapped to a different intrinsic name. The vectorize would also need to avoid creating a type that the backend isn't prepared to see on a target specific intrinsic.</div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 24, 2020 at 1:34 PM Mark Schimmel via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_4753259013442999106WordSection1">
<p class="MsoNormal"><span style="font-size:12pt">It seems wrong to me that VectorUtils.cpp contains this switch statement:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">/// Return true if all of the intrinsic's arguments and return type are scalars<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">/// for the scalar form of the intrinsic, and vectors for the vector form of the<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">/// intrinsic (except operands that are marked as always being scalar by<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">/// hasVectorInstrinsicScalarOpd).<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">bool llvm::isTriviallyVectorizable(Intrinsic::ID ID) {<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">  switch (ID) {<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">  case Intrinsic::bswap: // Begin integer bit-manipulation.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">  case Intrinsic::bitreverse:<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">First it would be easy to create an attribute for this that is defined in the TD file similar to others (IntrNoMem, IntrSpeculatable, IntrWillReturn, Commutative).<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">Second, it should apply to target intrinsics and allow them to vectorize also.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">// Intrinsic isTriviallyVectorizable<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">def TriviallyVectorizable : IntrinsicProperty;<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">…<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt">Would you be open to a patch for this functionality?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:12pt"><u></u> <u></u></span></p>
</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="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>