Fwiw, I am certainly in Tim'a camp here! Writing a test for that output is doable, and if that's what people want then that's what we'll do. But it's certainly not nice or readable !<br><div class="gmail_quote"><div dir="ltr">On Mon, 14 Dec 2015 at 19:25, Tim Northover 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 14 December 2015 at 11:12, Eric Christopher <<a href="mailto:echristo@gmail.com" target="_blank">echristo@gmail.com</a>> wrote:<br>
> There really is a pretty good separation of concerns and for a lot if not<br>
> most of the tests here all the difference is checking is the arguments,<br>
> keeping track of an alloca and making sure that goes is pretty simple and<br>
> not really hard for a test.<br>
<br>
And the rest! This us the output for a trivial function: vqrdmulh_s16:<br>
<br>
define <4 x i16> @foo(<4 x i16> %l, <4 x i16> %r) #0 {<br>
entry:<br>
  %__p0.addr.i = alloca <4 x i16>, align 8<br>
  %__p1.addr.i = alloca <4 x i16>, align 8<br>
  %__ret.i = alloca <4 x i16>, align 8<br>
  %l.addr = alloca <4 x i16>, align 8<br>
  %r.addr = alloca <4 x i16>, align 8<br>
  store <4 x i16> %l, <4 x i16>* %l.addr, align 8<br>
  store <4 x i16> %r, <4 x i16>* %r.addr, align 8<br>
  %0 = load <4 x i16>, <4 x i16>* %l.addr, align 8<br>
  %1 = load <4 x i16>, <4 x i16>* %r.addr, align 8<br>
  store <4 x i16> %0, <4 x i16>* %__p0.addr.i, align 8<br>
  store <4 x i16> %1, <4 x i16>* %__p1.addr.i, align 8<br>
  %2 = load <4 x i16>, <4 x i16>* %__p0.addr.i, align 8<br>
  %3 = bitcast <4 x i16> %2 to <8 x i8><br>
  %4 = load <4 x i16>, <4 x i16>* %__p1.addr.i, align 8<br>
  %5 = bitcast <4 x i16> %4 to <8 x i8><br>
  %vqrdmulh_v.i = bitcast <8 x i8> %3 to <4 x i16><br>
  %vqrdmulh_v1.i = bitcast <8 x i8> %5 to <4 x i16><br>
  %vqrdmulh_v2.i = call <4 x i16> @llvm.arm.neon.vqrdmulh.v4i16(<4 x<br>
i16> %vqrdmulh_v.i, <4 x i16> %vqrdmulh_v1.i) #2<br>
  %vqrdmulh_v3.i = bitcast <4 x i16> %vqrdmulh_v2.i to <8 x i8><br>
  %6 = bitcast <8 x i8> %vqrdmulh_v3.i to <4 x i16><br>
  store <4 x i16> %6, <4 x i16>* %__ret.i, align 8<br>
  %7 = load <4 x i16>, <4 x i16>* %__ret.i, align 8<br>
  ret <4 x i16> %7<br>
}<br>
<br>
Is that right? Hope so, but I'm buggered if I know. And when anyone<br>
looks at a test based on that they've got to thread 3 datapaths<br>
through about 6 stages each without getting confused to work it out.<br>
Possible, but for the tiny beneficial fuzzies we get from not running<br>
opt, not worth it in my opinion.<br>
<br>
Tim.<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>