<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 10pt; color: #000000'><br><hr id="zwchr"><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><b>From: </b>"Nadav Rotem" <nrotem@apple.com><br><b>To: </b>"Elena Demikhovsky" <elena.demikhovsky@intel.com><br><b>Cc: </b>llvmdev@cs.uiuc.edu, "Duncan P. N. Exon Smith" <dexonsmith@apple.com>, dag@cray.com, "Philip Reames (listmail@philipreames.com)" <listmail@philipreames.com>, "Hal Finkel (hfinkel@anl.gov)" <hfinkel@anl.gov>, "Chandler Carruth (chandlerc@gmail.com)" <chandlerc@gmail.com><br><b>Sent: </b>Tuesday, March 3, 2015 11:38:47 AM<br><b>Subject: </b>Re: Extending Vector GEP - proposal<br><br>
<br class=""><div><blockquote class=""><div class="">On Mar 2, 2015, at 11:30 PM, Demikhovsky, Elena <<a href="mailto:elena.demikhovsky@intel.com" class="" target="_blank">elena.demikhovsky@intel.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="WordSection1" style="page: WordSection1; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class="">><span class="Apple-converted-space"> </span></span>This problem can be solved by sinking the broadcast instruction at codegen-prepare time. <span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class=""></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class="">I considered this option. We currently don’t have target specific optimizations in codegen-prepare time. (Or I’m wrong?)</span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class="">And it will be very X86-directed optimization. Even gather-scatter intrinsics are considered as common for all targets.</span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class=""> </span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class="">And the second reason, why I’d prefer to generate a splat-GEP, is compile-time saving.</span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class=""> I should generate 2 (or more, for each splat element) redundant instructions (broadcast is insert+shuffle), hoist them outside the loop on some stage. Then look for them  on CodeGenPreare pass, sink them back and rebuild the CFG.</span></div></div></div></blockquote><div><br class=""></div><div>Okay. I think that it’s reasonable to add support for GEP with a single base pointer and a vector of indices. </div><div id="DWT3103"><br class=""></div></div></blockquote><br>I agree; the splat case, especially when you're indexing into a structure, seems as though it will be very common.<br><br> -Hal<br><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><div><div></div><blockquote class=""><div class=""><div class="WordSection1" style="page: WordSection1; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class=""></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class=""> </span></div><div class=""><div style="margin: 0cm 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Times New Roman',serif; text-indent: -18pt;" class=""><span style="font-family: Calibri,sans-serif; color: rgb(49, 132, 155);" class=""><span class="">-<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';" class="">         <span class="Apple-converted-space"> </span></span></span></span><span dir="LTR" class=""></span><b class=""><i class=""><span style="color: rgb(49, 132, 155);" class=""> Elena</span></i></b></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif; color: rgb(31, 73, 125);" class=""> </span></div><div class=""><div style="border-style: solid none none; border-top: 1pt solid rgb(181, 196, 223); padding: 3pt 0cm 0cm;" class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><b class=""><span style="font-size: 10pt; font-family: Tahoma,sans-serif;" class="">From:</span></b><span style="font-size: 10pt; font-family: Tahoma,sans-serif;" class=""><span class="Apple-converted-space"> </span>Nadav Rotem [<a href="mailto:nrotem@apple.com" style="color: purple; text-decoration: underline;" class="" target="_blank">mailto:nrotem@apple.com</a>]<span class="Apple-converted-space"> </span><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Monday, March 02, 2015 19:01<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Demikhovsky, Elena<br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:llvmdev@cs.uiuc.edu" style="color: purple; text-decoration: underline;" class="" target="_blank">llvmdev@cs.uiuc.edu</a>; Duncan P. N. Exon Smith;<span class="Apple-converted-space"> </span><a href="mailto:dag@cray.com" style="color: purple; text-decoration: underline;" class="" target="_blank">dag@cray.com</a>; Philip Reames (<a href="mailto:listmail@philipreames.com" style="color: purple; text-decoration: underline;" class="" target="_blank">listmail@philipreames.com</a>); Hal Finkel (<a href="mailto:hfinkel@anl.gov" style="color: purple; text-decoration: underline;" class="" target="_blank">hfinkel@anl.gov</a>); Chandler Carruth (<a href="mailto:chandlerc@gmail.com" style="color: purple; text-decoration: underline;" class="" target="_blank">chandlerc@gmail.com</a>)<br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: Extending Vector GEP - proposal</span></div></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""> </div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class="">I don’t have a strong opinion on this. The current GEP syntax is more restrictive and the single base pointer case can be emulated using a broadcast + vector-gep, that can easily be patten matched at codegen time. The problem with the current syntax is that the ‘broadcast’ instruction can be hoisted outside of loops and this can be a problem with our "one block at a time" codegen implementation. This problem can be solved by sinking the broadcast instruction at codegen-prepare time. </div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""> </div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class="">Is there a strong motivation to prefer one representation over the other?</div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""> </div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""> </div><div class=""><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class="">On Mar 1, 2015, at 2:10 AM, Demikhovsky, Elena <<a href="mailto:elena.demikhovsky@intel.com" style="color: purple; text-decoration: underline;" class="" target="_blank">elena.demikhovsky@intel.com</a>> wrote:</div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""> </div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">Hi,</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">According to the current GEP syntax, vector GEP requires that each index must be a vector with the same number of elements.</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">%A = getelementptr <4 x i8*> %ptrs, <4 x i64> %offsets</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">I propose to lessen this requirement. Let each index be or vector or scalar. All vector indices must have the same number of elements. The scalar value will mean the splat vector value.</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">%A = getelementptr i8* %ptr, <4 x i64> %offsets</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">or</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">%A = getelementptr <4 x i8*> %ptrs, i64 %offset</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">In this case we don’t have to add a “broadcast” before GEP. It is actually will be developer’s decision what form to choose.</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">I plan to use vector GEP in gather/scatter and the “broadcasting” of the scalar value impedes to narrow this operation to the “common base, multiple indices” form in the future.</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">What do you think?</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class="">Thanks.</span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif; text-indent: -18pt;" class=""><span style="font-size: 10pt; font-family: Symbol; color: rgb(49, 132, 155);" class=""><span class="">·<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';" class="">        <span class="Apple-converted-space"> </span></span></span></span><span dir="LTR" class=""></span><b class=""><i class=""><span style="color: rgb(49, 132, 155);" class="">Elena</span></i></b><span style="color: rgb(49, 132, 155);" class=""></span></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""><span style="font-size: 11pt; font-family: Calibri,sans-serif;" class=""> </span></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif; text-align: start; word-spacing: 0px;" class=""><span style="font-size: 9pt; font-family: Helvetica,sans-serif;" class="">---------------------------------------------------------------------<br class="">Intel Israel (74) Limited</span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif; text-align: start; word-spacing: 0px;" class=""><span style="font-size: 9pt; font-family: Helvetica,sans-serif;" class="">This e-mail and any attachments may contain confidential material for<br class="">the sole use of the intended recipient(s). Any review or distribution<br class="">by others is strictly prohibited. If you are not the intended<br class="">recipient, please contact the sender and delete all copies.</span></div></div></blockquote></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman',serif;" class=""> </div></div><p style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class="">---------------------------------------------------------------------<br class="">Intel Israel (74) Limited</p><p style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class="">This e-mail and any attachments may contain confidential material for<br class="">the sole use of the intended recipient(s). Any review or distribution<br class="">by others is strictly prohibited. If you are not the intended<br class="">recipient, please contact the sender and delete all copies.</p></div></blockquote></div><br class=""></blockquote><br><br><br>-- <br><div><span name="x"></span>Hal Finkel<br>Assistant Computational Scientist<br>Leadership Computing Facility<br>Argonne National Laboratory<span name="x"></span><br></div></div></body></html>