<div dir="ltr">Hi,<div><br></div><div>> <span style="font-size:13.1999998092651px;line-height:19.7999992370605px">Ah, I did not think about it.Instead of restricting it to fast-math I would prefer to have an order such as "add each element of vector, starting from element 0 to n-1, to an accumulated sum which is initialized to zero". Does it make sense?</span></div><div><span style="font-size:13.1999998092651px;line-height:19.7999992370605px"><br></span></div><div><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">That would mean you wouldn't be able to lower it using a lg(n)-shuffles algorithm, as that does it in the wrong order. You'd have to use a linear algorithm which would perform quite poorly. It would also stop horizontal add instructions being used on architectures that support them (I don't know of any that do for FP types - probably for this reason!). I'd probably go with the fast-math version personally.</span></div><div><span style="font-size:13.1999998092651px;line-height:19.7999992370605px"><br></span></div><div><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">></span><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">In that case what should be the return type of intrinsic?</span></div><div><span style="font-size:13.1999998092651px;line-height:19.7999992370605px"><br></span></div><div><span style="font-size:13.1999998092651px;line-height:19.7999992370605px">llvm_any_ty ?</span></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, 7 Jul 2015 at 11:59 Shahid <<a href="mailto:Asghar-ahmad.Shahid@amd.com">Asghar-ahmad.Shahid@amd.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi James,<br>
<br>
Thanks for your comments.I will do the needful. Pls see my response below.<br>
<br>
Regards,<br>
Shahid<br>
<br>
<br>
================<br>
Comment at: docs/LangRef.rst:9593<br>
@@ +9592,3 @@<br>
+      declare <4 x integer> @llvm.hadd.v4i32(<4 x integer> %a)<br>
+      declare <4 x float> @llvm.hadd.v4f32(<4 x float> %a)<br>
+<br>
----------------<br>
jmolloy wrote:<br>
> You need to be very explicit about the behaviour of this intrinsic with floating point arguments. What order, if any, does it perform the adds in? If there is no guaranteed order, it can only be used in fast-math mode.<br>
Ah, I did not think about it.Instead of restricting it to fast-math I would prefer to have an order such as "add each element of vector, starting from element 0 to n-1, to an accumulated sum which is initialized to zero". Does it make sense?<br>
<br>
================<br>
Comment at: include/llvm/IR/Intrinsics.td:599<br>
@@ +598,3 @@<br>
+// Calculate the horizontal/reduction sum across the elements of input vector.<br>
+def int_hadd_int : Intrinsic<[llvm_anyint_ty], [llvm_anyvector_ty], [IntrNoMem]>;<br>
+def int_hadd_float : Intrinsic<[llvm_anyfloat_ty], [llvm_anyvector_ty], [IntrNoMem]>;<br>
----------------<br>
jmolloy wrote:<br>
> Just having one intrinsic here would be good; there's no need for a separate int and float version.<br>
In that case what should be the return type of intrinsic?<br>
<br>
================<br>
Comment at: lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp:712<br>
@@ -707,1 +711,3 @@<br>
+  case ISD::FHADD:<br>
+    return UnrollHADD(Op);<br>
   default:<br>
----------------<br>
jmolloy wrote:<br>
> Can't you just call ExpandHADD() here? or at least share the unroll and expand code?<br>
Yes, probably I can share.<br>
<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10964&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=Fnjs8keTCZkaJNQr8dft5njKQ6ZwglSPAYHM4J0tUr0&s=gh1_S8V24UYJldvAO7TLH7x9laPXPpE_h4OSmDGMaJg&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10964</a><br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>