<div dir="ltr">Hi Kuperstein,<div><br></div><div>It seemed that the backend would generate a VMOVAPD and a VPERMILPD. However, it also introduced many spills. I don't quite understand why. </div><div><br></div><div>Best,</div><div>Zhi </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 4, 2015 at 1:15 AM, Kuperstein, Michael M <span dir="ltr"><<a href="mailto:michael.m.kuperstein@intel.com" target="_blank">michael.m.kuperstein@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">The canonical way to do it would be to load into a scalar, and then broadcast the scalar using a shufflevector.
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hopefully, the backend will be smart enough to match this as a single load+broadcast, if the platform has such an instruction.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">(The trick you’re suggesting with getelementptr will probably possible soon, now that gather intrinsics are being introduced, but it probably will create worse
 code, not better.)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Michael<u></u><u></u></span></p>
<p class="MsoNormal"><a name="14d1dff41be89ec4__MailEndCompose"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></a></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a>]
<b>On Behalf Of </b>zhi chen<br>
<b>Sent:</b> Monday, May 04, 2015 10:59<br>
<b>To:</b> LLVM Dev<br>
<b>Subject:</b> [LLVMdev] Load value and broadcast in LLVM<u></u><u></u></span></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="line-height:115%">Is it possible to load a value into a vector register and broadcast it in LLVM?<u></u><u></u></p>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">For example, for the following address %x<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal" style="line-height:115%"> %x = getelementptr inbounds %struct._Ray* %ray, i32 0, i32 0, i32 0<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">instead of loading the value at %x into a scalar register %0:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">%0 = load double* %x, align 4, !tbaa !0<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">I want to load it into a <2 x double> vector register %1 and make both of the two elements in %1 be the value at %x.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">I guess one way to do this is to make getelementptr return a <2 x i32>* address, where the two addresses in <2 X 32> are the same. But I don't know if it is possible to do this in LLVM. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">Any help would be appreciated.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">Best,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%">Zhi<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="line-height:115%"><u></u> <u></u></p>
</div>
</div>
</div></div></div>
<p>---------------------------------------------------------------------<br>
Intel Israel (74) Limited</p>

<p>This e-mail and any attachments may contain confidential material for<br>
the sole use of the intended recipient(s). Any review or distribution<br>
by others is strictly prohibited. If you are not the intended<br>
recipient, please contact the sender and delete all copies.</p></div>

</blockquote></div><br></div>