<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Adding a mask operand to the existing store instructions seems risky, as lots of existing code would not necessarily preserve/respect them.<div class=""><br class=""></div><div class="">—Owen<br class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 27, 2014, at 12:08 AM, Chandler Carruth <<a href="mailto:chandlerc@google.com" class="">chandlerc@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">It's not clear that these would need to be totally new instructions as opposed to a mask operand to the existing store instruction? I'm curious what Owen is actually imagining here...</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Mon, Oct 27, 2014 at 12:02 AM, Demikhovsky, Elena <span dir="ltr" class=""><<a href="mailto:elena.demikhovsky@intel.com" target="_blank" class="">elena.demikhovsky@intel.com</a>></span> wrote:<br class=""><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" class="">
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">we just follow  a common recommendation to start with intrinsics:<u class=""></u><u class=""></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""><a href="http://llvm.org/docs/ExtendingLLVM.html" target="_blank" class="">http://llvm.org/docs/ExtendingLLVM.html</a><u class=""></u><u class=""></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""><u class=""></u> <u class=""></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""><u class=""></u> <u class=""></u></span></p>
<div class=""><p class="MsoNormal" style="margin-left:36.0pt">
<u class=""></u><span style="font-family:"Calibri","sans-serif";color:#31849b" class=""><span class="">-<span style="font:7.0pt "Times New Roman"" class="">         
</span></span></span><u class=""></u><span dir="LTR" class=""></span><b class=""><i class=""><span style="color:#31849b" class=""> Elena<u class=""></u><u class=""></u></span></i></b></p>
</div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""><u class=""></u> <u class=""></u></span></p>
<div class="">
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm" class=""><p class="MsoNormal"><b class=""><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"" class="">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"" class=""> Owen Anderson [mailto:<a href="mailto:resistor@mac.com" target="_blank" class="">resistor@mac.com</a>]
<br class="">
<b class="">Sent:</b> Sunday, October 26, 2014 23:57<br class="">
<b class="">To:</b> Demikhovsky, Elena<br class="">
<b class="">Cc:</b> <a href="mailto:llvmdev@cs.uiuc.edu" target="_blank" class="">llvmdev@cs.uiuc.edu</a>; <a href="mailto:dag@cray.com" target="_blank" class="">dag@cray.com</a><span class=""><br class="">
<b class="">Subject:</b> Re: [LLVMdev] Adding masked vector load and store intrinsics<u class=""></u><u class=""></u></span></span></p>
</div>
</div><p class="MsoNormal"><u class=""></u> <u class=""></u></p><p class="MsoNormal">What is the motivation for using intrinsics versus adding new instructions?<u class=""></u><u class=""></u></p><div class=""><div class="h5">
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">—Owen<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
<div class="">
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt" class="">
<div class=""><p class="MsoNormal">On Oct 24, 2014, at 4:24 AM, Demikhovsky, Elena <<a href="mailto:elena.demikhovsky@intel.com" target="_blank" class="">elena.demikhovsky@intel.com</a>> wrote:<u class=""></u><u class=""></u></p>
</div><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
<div class="">
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">Hi,</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">We would like to add support for masked vector loads and stores by introducing new target-independent intrinsics. The loop vectorizer will then be enhanced
 to optimize loops containing conditional memory accesses by generating these intrinsics for existing targets such as AVX2 and AVX-512. The vectorizer will first ask the target about availability of masked vector loads and stores. The SLP vectorizer can potentially
 be enhanced to use these intrinsics as well.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">The intrinsics would be legal for all targets; targets that do not support masked vector loads or stores will scalarize them.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">The addressed memory will not be touched for masked-off lanes. In particular, if all lanes are masked off no address will be accessed.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">  call void @llvm.masked.store (i32* %addr, <16 x i32> %data, i32 4, <16 x i1> %mask)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">  %data = call <8 x i32> @llvm.masked.load (i32* %addr, <8 x i32> %passthru, i32 4, <8 x i1> %mask)</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">where %passthru is used to fill the elements of %data that are masked-off (if any; can be zeroinitializer or undef).</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">Comments so far, before we dive into more details?</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">Thank you.</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class="">- Elena and Ayal</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d" class=""> </span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""><u class=""></u><u class=""></u></span></p>
</div>
<div class=""><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"" class=""> <u class=""></u><u class=""></u></span></p>
</div><p class="MsoNormal" style="text-align:start;word-spacing:0px">
<span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class="">---------------------------------------------------------------------<br class="">
Intel Israel (74) Limited<u class=""></u><u class=""></u></span></p><p class="MsoNormal" style="text-align:start;word-spacing:0px">
<span style="font-size:9.0pt;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.<u class=""></u><u class=""></u></span></p><p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class="">_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
</span><a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank" class=""><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class="">LLVMdev@cs.uiuc.edu</span></a><span class=""><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class=""> </span></span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class="">        </span><a href="http://llvm.cs.uiuc.edu/" target="_blank" class=""><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class="">http://llvm.cs.uiuc.edu</span></a><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class=""><br class="">
</span><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank" class=""><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</span></a><u class=""></u><u class=""></u></p>
</div>
</blockquote>
</div><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
</div></div></div><div class=""><div class="h5"><p class="">---------------------------------------------------------------------<br class="">
Intel Israel (74) Limited</p><p 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></div></div>

<br class="">_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:LLVMdev@cs.uiuc.edu" class="">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu/" target="_blank" class="">http://llvm.cs.uiuc.edu</a><br class="">
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br class="">
<br class=""></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></div></body></html>