<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Has x86 switched to the intrinsics now?<div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 9, 2020, at 10:17 AM, Craig Topper <<a href="mailto:craig.topper@gmail.com" class="">craig.topper@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">That recent X86 bug isn't unique to the intrinsic. We generate the same code from this which uses the shuffle sequence the vectorizers generated before the reduction intrinsics existed.<br class=""><br class=""></div><div class="">declare i64 @llvm.experimental.vector.reduce.or.v2i64(<2 x i64>)·<br class="">declare void @TrapFunc(i64)<br class=""><br class="">define void @parseHeaders(i64 * %ptr) {<br class="">  %vptr = bitcast i64 * %ptr to <2 x i64> *<br class="">  %vload = load <2 x i64>, <2 x i64> * %vptr, align 8<br class=""><br class="">  %b = shufflevector <2 x i64> %vload, <2 x i64> undef, <2 x i32> <i32 1, i32 undef><br class="">  %c = or <2 x i64> %vload, %b<br class="">  %vreduce = extractelement <2 x i64> %c, i32 0<br class=""><br class="">  %vcheck = icmp eq i64 %vreduce, 0<br class="">  br i1 %vcheck, label %ret, label %trap<br class="">trap:<br class="">  %v2 = extractelement <2 x i64> %vload, i32 1<br class="">  call void @TrapFunc(i64 %v2)<br class="">  ret void<br class="">ret:<br class="">  ret void<br class="">}<br class=""></div><br clear="all" class=""><div class=""><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br class=""></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Apr 9, 2020 at 10:04 AM Philip Reames via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">My experience with them so far is that the code generation for these <br class="">
intrinsics is still missing a lot of cases.  Some of them are X86 <br class="">
specific (the target I look at mostly), but many of them have generic forms.<br class="">
<br class="">
As one recent example, consider <br class="">
<a href="https://bugs.llvm.org/show_bug.cgi?id=45378" rel="noreferrer" target="_blank" class="">https://bugs.llvm.org/show_bug.cgi?id=45378</a>.  (There's nothing special <br class="">
about this one other than it was recent.)<br class="">
<br class="">
I'm not necessarily arguing they can't be promoted from experimental, <br class="">
but it would be a much easier case if the code gen was routinely as good <br class="">
or better than the scalar forms.  Or to say that a bit differently, if <br class="">
we could canonicalize to them in the IR without major regression.  <br class="">
Having two ways to represent something in the IR without any agreed upon <br class="">
canonical form is always sub-optimal.<br class="">
<br class="">
Philip<br class="">
<br class="">
On 4/7/20 9:59 PM, Amara Emerson via llvm-dev wrote:<br class="">
> Hi,<br class="">
><br class="">
> It’s been a few years now since I added some intrinsics for doing vector reductions. We’ve been using them exclusively on AArch64, and I’ve seen some traffic a while ago on list for other targets too. Sander did some work last year to refine the semantics after some discussion.<br class="">
><br class="">
> Are we at the point where we can drop the “experimental” from the name? IMO all target should begin to transition to using these as the preferred representation for reductions. But for now, I’m only proposing the naming change.<br class="">
><br class="">
> Cheers,<br class="">
> Amara<br class="">
> _______________________________________________<br class="">
> LLVM Developers mailing list<br class="">
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">
_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">
</blockquote></div>
</div></blockquote></div><br class=""></div></body></html>