<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">This looks to be a reasonable proposal. However native instructions that support such masked ld/st may have a high latency ? Also, it would be good to state some workloads where
 this will have a positive impact.<br>
<br>
-dibyendu </font><br>
 <br>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<font style="font-size:10.0pt;font-family:"Tahoma","sans-serif""><b>From</b>: Demikhovsky, Elena [mailto:elena.demikhovsky@intel.com]
<br>
<b>Sent</b>: Friday, October 24, 2014 06:24 AM Central Standard Time<br>
<b>To</b>: llvmdev@cs.uiuc.edu <llvmdev@cs.uiuc.edu> <br>
<b>Cc</b>: dag@cray.com <dag@cray.com> <br>
<b>Subject</b>: [LLVMdev] Adding masked vector load and store intrinsics <br>
</font> <br>
</div>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div><font color="#1F497D">Hi,</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">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.</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">The intrinsics would be legal for all targets; targets that do not support masked vector loads or stores will scalarize them.</font></div>
<div><font color="#1F497D">The addressed memory will not be touched for masked-off lanes. In particular, if all lanes are masked off no address will be accessed.</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">  call void @llvm.masked.store (i32* %addr, <16 x i32> %data, i32 4, <16 x i1> %mask)</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">  %data = call <8 x i32> @llvm.masked.load (i32* %addr, <8 x i32> %passthru, i32 4, <8 x i1> %mask)</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">where %passthru is used to fill the elements of %data that are masked-off (if any; can be zeroinitializer or undef).</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">Comments so far, before we dive into more details?</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">Thank you.</font></div>
<div><font color="#1F497D"> </font></div>
<div><font color="#1F497D">- Elena and Ayal</font></div>
<div><font color="#1F497D"> </font></div>
<div> </div>
</span></font>
<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>
</body>
</html>