<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Would someone be willing to review my amended patch? Or recommend someone?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D9822&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=gSqt2PU0ZPv4zwX9XQL9Gi1ykInvGhYrfhOCixADGTs&s=6UAtEvyEZf0gkC_bWE2bKmu-zjDMAVYSNf7ANGSF7K0&e=">http://reviews.llvm.org/D9822</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Sam<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><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"'> Michael Zolotukhin [mailto:mzolotukhin@apple.com] <br><b>Sent:</b> 14 May 2015 18:52<br><b>To:</b> Sam Parker<br><b>Cc:</b> James Molloy; Demikhovsky, Elena; llvm-commits@cs.uiuc.edu<br><b>Subject:</b> Re: [PATCH] improve vectorizers by removing cost of unnecessary truncs and exts.<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Hi Sam,<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>First of all, thanks for working on this much-needed improvement!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Having said that, I’m afraid the current implementation is incorrect (James’ example is a good illustration why). The issue is that getWidestType() looks at the entire loop, while we need to look at some specific zext->use->trunc chains when we’re checking if the cast are redundant in vectorized code. The loop itself could contain other unrelated instructions, which will just spoil the current check by affecting MaxWidth value.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Thanks,<o:p></o:p></p></div><div><p class=MsoNormal>Michael<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>PS: Please upload the patch to phabricator, it’s really convenient to have such discussions there.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal>On May 12, 2015, at 5:05 AM, Sam Parker <<a href="mailto:Sam.Parker@arm.com">Sam.Parker@arm.com</a>> wrote:<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi James,</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I’ve added the two test files for loop- and slp-vectorize. I have also added an additional check so that if the widest type is less than the target ‘VectorTy’, the cost is actually calculated as a cast to a vector of the widest type instead.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers,</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Sam</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span class=apple-converted-space><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> </span></span><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>James Molloy [<a href="mailto:james@jamesmolloy.co.uk"><span style='color:purple'>mailto:james@jamesmolloy.co.uk</span></a>]<span class=apple-converted-space> </span><br><b>Sent:</b><span class=apple-converted-space> </span>11 May 2015 16:34<br><b>To:</b><span class=apple-converted-space> </span>Sam Parker; Demikhovsky, Elena<br><b>Cc:</b><span class=apple-converted-space> </span><a href="mailto:llvm-commits@cs.uiuc.edu"><span style='color:purple'>llvm-commits@cs.uiuc.edu</span></a><br><b>Subject:</b><span class=apple-converted-space> </span>Re: [PATCH] improve vectorizers by removing cost of unnecessary truncs and exts.</span><o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div><p class=MsoNormal>Hi Sam,<br><br>It's a mismodelling, where you'll say something is cheaper than it actually is.<o:p></o:p></p></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>Cheers,<o:p></o:p></p></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>James<o:p></o:p></p></div></div></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div><p class=MsoNormal>On Mon, 11 May 2015 at 15:46 Sam Parker <<a href="mailto:sam.parker@arm.com"><span style='color:purple'>sam.parker@arm.com</span></a>> wrote:<o:p></o:p></p></div><div><div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi James,</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>By not totally sound, do you mean incorrect or that I’m just missing an extra opportunity and I should check that extensions aren’t targeting a larger than necessary bitwidth? As for the test file, I didn’t know if I was supposed to add it along with the patch or not, and will attach it in the next version.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Cheers,</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Sam</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span class=apple-converted-space><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> </span></span><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>James Molloy [mailto:<a href="mailto:james@jamesmolloy.co.uk" target="_blank"><span style='color:purple'>james@jamesmolloy.co.uk</span></a>]<span class=apple-converted-space> </span><br><b>Sent:</b><span class=apple-converted-space> </span>11 May 2015 13:49<br><b>To:</b><span class=apple-converted-space> </span>Demikhovsky, Elena; Sam Parker<br><b>Cc:</b><span class=apple-converted-space> </span><a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank"><span style='color:purple'>llvm-commits@cs.uiuc.edu</span></a><br><b>Subject:</b><span class=apple-converted-space> </span>Re: [PATCH] improve vectorizers by removing cost of unnecessary truncs and exts.</span><o:p></o:p></p></div></div></div><div><div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div><p class=MsoNormal>Hi Sam,<br><br>Thanks for working on this! This has been a running sore in ARM vectorization for a long time now.<o:p></o:p></p></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>Initial comments:<o:p></o:p></p></div></div><div><div><p class=MsoNormal>   * In the future, could you please use Phabricator (<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=gSqt2PU0ZPv4zwX9XQL9Gi1ykInvGhYrfhOCixADGTs&s=6oZcq5F00-X6ya_46FdsYGPbk81X9SAHOQk6v9IJPt4&e=" target="_blank"><span style='color:purple'>http://reviews.llvm.org</span></a>) to upload patches to; it makes it much easier to review.<o:p></o:p></p></div></div><div><div><p class=MsoNormal>   * There are no regression tests included in this patch - did you forget to git add them?<o:p></o:p></p></div></div><div><div><p class=MsoNormal>   * I'm not sure the logic is totally sound. Consider this:<o:p></o:p></p></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>loop:<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  %1 = load i8* %foo<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  %2 = zext i8 %1 to i32<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  %3 = add i32 %2, 42<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  %4 = trunc i32 %3 to i16<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  %5 = add i16 %4, 42<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  store i16* %5, %bar<o:p></o:p></p></div></div><div><div><p class=MsoNormal>  br loop<o:p></o:p></p></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>getWidestType() will return i16. So the first cast is not free, but neither is it a cast to i32, it's a cast to i16.<o:p></o:p></p></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>I'm not exactly sure what Elena's query was; it looks like the implementation here should be architecture-agnostic as it's just modelling changes to the IR (truncate nodes disappear) and the rest is the TTI's responsibility.<o:p></o:p></p></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>Cheers,<o:p></o:p></p></div></div><div><div><p class=MsoNormal> <o:p></o:p></p></div></div><div><div><p class=MsoNormal>James<o:p></o:p></p></div></div></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><div><p class=MsoNormal>On Mon, 11 May 2015 at 12:17 Demikhovsky, Elena <<a href="mailto:elena.demikhovsky@intel.com" target="_blank"><span style='color:purple'>elena.demikhovsky@intel.com</span></a>> wrote:<o:p></o:p></p></div><div><div><div><p class=MsoNormal><span style='color:#1F497D'>+        if (Opcode == Instruction::Trunc) {</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'>+          if (TTI->isTypeLegal(DstVecTy)) {</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'>+            VecCost = 0;</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'>+          }</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'>On AVX-512 the “truncate” is usually one instruction, the VecCost should be 1.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'>On AVX the type may be legal, but “truncate” is more than one instruction.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p></div><div><div style='margin-left:36.0pt'><p class=MsoNormal><span style='color:#31849B'>-</span><span style='font-size:7.0pt;color:#31849B'>         <span class=apple-converted-space> </span></span><b><i><span style='color:#31849B'> Elena</span></i></b><o:p></o:p></p></div></div><div><p class=MsoNormal><span style='color:#1F497D'> </span><o:p></o:p></p></div><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><div><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span class=apple-converted-space><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> </span></span><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'><a href="mailto:llvm-commits-bounces@cs.uiuc.edu" target="_blank"><span style='color:purple'>llvm-commits-bounces@cs.uiuc.edu</span></a><span class=apple-converted-space> </span>[mailto:<a href="mailto:llvm-commits-bounces@cs.uiuc.edu" target="_blank"><span style='color:purple'>llvm-commits-bounces@cs.uiuc.edu</span></a>]<span class=apple-converted-space> </span><b>On Behalf Of<span class=apple-converted-space> </span></b>Sam Parker<br><b>Sent:</b><span class=apple-converted-space> </span>Monday, May 11, 2015 13:57<br><b>To:</b><span class=apple-converted-space> </span><a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank"><span style='color:purple'>llvm-commits@cs.uiuc.edu</span></a><br><b>Subject:</b><span class=apple-converted-space> </span>[PATCH] improve vectorizers by removing cost of unnecessary truncs and exts.</span><o:p></o:p></p></div></div></div></div></div><div><div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Hi,<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>I’ve attached a patch to both the loop vectorizer and slp-vectorizer which checks to see whether truncs and extensions would actually be required if the code was vectorized. This is so that the vectorizers understand that the cost of these instructions is effectively zero if vectorization happens. This is helpful when working on smaller data types, such as i8 and i16, that do not have native support in general purpose registers, but are supported in vector register files.<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Regards,<o:p></o:p></p></div><div><p class=MsoNormal>Sam<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div></div></div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>---------------------------------------------------------------------<br>Intel Israel (74) Limited<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>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.<o:p></o:p></p></div><div><p class=MsoNormal>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank"><span style='color:purple'>llvm-commits@cs.uiuc.edu</span></a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank"><span style='color:purple'>http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</span></a><o:p></o:p></p></div></div></div></div></div><p class=MsoNormal><vectorizer.patch><span style='font-size:9.0pt;font-family:"Helvetica","sans-serif"'>_______________________________________________<br>llvm-commits mailing list<br></span><a href="mailto:llvm-commits@cs.uiuc.edu"><span style='font-size:9.0pt;font-family:"Helvetica","sans-serif";color:purple'>llvm-commits@cs.uiuc.edu</span></a><span style='font-size:9.0pt;font-family:"Helvetica","sans-serif"'><br></span><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits"><span style='font-size:9.0pt;font-family:"Helvetica","sans-serif";color:purple'>http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</span></a><o:p></o:p></p></div></blockquote></div><p class=MsoNormal><o:p> </o:p></p></div></body></html>