<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body>
    <p>Hi David,</p>
    <p>This would be a very useful upgrade to the cost model. <br>
    </p>
    <p>One thing I want to add is that we need to be mindful of the
      cases where the cost is proportional (or inversely proportional)
      to the VF, for instance in the <tt>LoopVectorizationCostModel::selectVectorizationFactor(ElementCount
        MaxVF)</tt>, there is a point where expected cost is divided by
      the VF. I believe there are other places where the instruction
      cost is dependent on the actual number of elements in the vector.
      While this is not a problem for fixed vectors, for scalable
      vectors we need to account for the <tt>vscale</tt> component of
      the VF.  I guess using the polynomial type for the base cost type
      might work.</p>
    <p>Also, for scalable vectors, when making the cost based decision
      of whether to vectorize or not, we will need to consider the
      special case of comparing the scalable vectorization cost with the
      scalar loop cost, which is considered to be a fixed vector cost of
      VF=1. A simple solution might be to always assume that for
      scalable vectors, vectorization is always beneficial. Another
      option might be to assume that the <tt>vscale</tt> value is
      always at least 2, and compare the cost with the scalar loop based
      on that. <br>
    </p>
    <p>Thanks and Regards,</p>
    <p>Vineet</p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 2020-11-05 9:12 p.m., David Sherwood
      via llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:DBBPR08MB46790F60EF0D6AF91012717884EE0@DBBPR08MB4679.eurprd08.prod.outlook.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;
        font-weight:normal;
        font-style:normal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@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]-->
      <div class="WordSection1">
        <p class="MsoNormal">Hi,<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">I'd like to propose a change to our cost
          interfaces so that instead of returning<o:p></o:p></p>
        <p class="MsoNormal">an unsigned value from functions like
          getInstructionCost, getUserCost, etc., we<o:p></o:p></p>
        <p class="MsoNormal">instead return a wrapper class that encodes
          an integer cost along with extra<o:p></o:p></p>
        <p class="MsoNormal">state. The extra state can be used to
          express:<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">1. A cost as infinitely expensive in order
          to prevent certain optimisations<o:p></o:p></p>
        <p class="MsoNormal">taking place. For example, there are
          already examples in LLVM where the cost is<o:p></o:p></p>
        <p class="MsoNormal">set extremely high, but not so high that it
          would cause overflow. This might be to<o:p></o:p></p>
        <p class="MsoNormal">prevent vectorisation in cases where we
          would have to scalarize the operation,<o:p></o:p></p>
        <p class="MsoNormal">which is particularly relevant for scalable
          vectors, where scalarisation is<o:p></o:p></p>
        <p class="MsoNormal">not [yet] available. There isn't currently
          a standard value for something that<o:p></o:p></p>
        <p class="MsoNormal">constitutes very expensive and we can
          replace all the magic numbers with a<o:p></o:p></p>
        <p class="MsoNormal">single invalid state.<o:p></o:p></p>
        <p class="MsoNormal">2. A cost as unknown, where the user is
          simply unable to determine an accurate<o:p></o:p></p>
        <p class="MsoNormal">cost for an operation.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">This new wrapper class would work almost
          seamlessly with existing code as it<o:p></o:p></p>
        <p class="MsoNormal">would contain the full set of operators
          required for arithmetic and comparisons.<o:p></o:p></p>
        <p class="MsoNormal">This is in addition to the ability to
          create invalid costs and query the validity<o:p></o:p></p>
        <p class="MsoNormal">of an existing cost. Once a cost becomes
          invalid or unknown it will remain in that<o:p></o:p></p>
        <p class="MsoNormal">state regardless of any further arithmetic
          performed.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Kind Regards,<o:p></o:p></p>
        <p class="MsoNormal">David Sherwood.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
  
<br>
<br>
WARNING / LEGAL TEXT: This message is intended only for the use of the
individual or entity to which it is addressed and may contain
information which is privileged, confidential, proprietary, or exempt
from disclosure under applicable law. If you are not the intended
recipient or the person responsible for delivering the message to the
intended recipient, you are strictly prohibited from disclosing,
distributing, copying, or in any way using this message. If you have
received this communication in error, please notify the sender and
destroy and delete any copies you may have received.
<br><br>
<a href="http://www.bsc.es/disclaimer">http://www.bsc.es/disclaimer</a>
<br>
</body>
</html>