<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 8/14/20 6:39 PM, Luo, Yuanke wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:SN6PR11MB3135C1F00F6C3EB6B409DE369A400@SN6PR11MB3135.namprd11.prod.outlook.com">
      
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin-top:0cm;
        margin-right:0cm;
        margin-bottom:8.0pt;
        margin-left:0cm;
        line-height:105%;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:8.0pt;
        margin-left:0cm;
        text-indent:21.0pt;
        line-height:105%;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}</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"><span
            style="font-size:10.5pt;line-height:105%" lang="EN-US"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.5pt;line-height:105%" lang="EN-US"><o:p> </o:p></span></p>
        <div>
          <div style="border:none;border-top:solid #E1E1E1
            1.0pt;padding:3.0pt 0cm 0cm 0cm">
            <p class="MsoNormal"
              style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal">
              <b><span lang="EN-US">From:</span></b><span lang="EN-US">
                Hal Finkel <a class="moz-txt-link-rfc2396E" href="mailto:hfinkel@anl.gov"><hfinkel@anl.gov></a>
                <br>
                <b>Sent:</b> Friday, August 14, 2020 11:27 PM<br>
                <b>To:</b> Luo, Yuanke <a class="moz-txt-link-rfc2396E" href="mailto:yuanke.luo@intel.com"><yuanke.luo@intel.com></a>;
                <a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>; <a class="moz-txt-link-abbreviated" href="mailto:florian_hahn@apple.com">florian_hahn@apple.com</a>; Kaylor,
                Andrew <a class="moz-txt-link-rfc2396E" href="mailto:andrew.kaylor@intel.com"><andrew.kaylor@intel.com></a>; Topper, Craig
                <a class="moz-txt-link-rfc2396E" href="mailto:craig.topper@intel.com"><craig.topper@intel.com></a>; Lu, Hongjiu
                <a class="moz-txt-link-rfc2396E" href="mailto:hongjiu.lu@intel.com"><hongjiu.lu@intel.com></a><br>
                <b>Subject:</b> Re: [llvm-dev] Intel AMX programming
                model discussion.<o:p></o:p></span></p>
          </div>
        </div>
        <p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
        <p><span lang="EN-US"><o:p> </o:p></span></p>
        <div>
          <p class="MsoNormal"><span lang="EN-US">On 8/14/20 8:27 AM,
              Luo, Yuanke via llvm-dev wrote:<o:p></o:p></span></p>
        </div>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <p class="MsoNormal"><span lang="EN-US">Hi,<o:p></o:p></span></p>
          ...<span lang="EN-US"><o:p></o:p></span></blockquote>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <p class="MsoListParagraph"
            style="margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0
            level1 lfo2">
            <!--[if !supportLists]--><span lang="EN-US"><span
                style="mso-list:Ignore">8.<span style="font:7.0pt
                  "Times New Roman"">      
                </span></span></span><!--[endif]--><span lang="EN-US">Register
              allocation<o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US">AMX register is
              special. It needs to be configured before use and the
              config instruction is expensive. To avoid unnecessary tile
              configure, we collect the tile shape information as much
              as possible and combine them into one ldtilecfg
              instruction. The ldtilecfg instruction should dominate any
              AMX instruction that access tile register. On the other
              side, the ldtilecfg should post-dominated the instruction
              that define the tile shape. For tile register spill, it
              should avoid re-config due to the different tile shape,
              the spilled register should be reloaded to the register
              that share the same tile shape. Since tile register
              allocation is special and it may allocate general virtual
              register to configure tile register, we can add a sperate
              pass to do it before general register allocation pass.
              After register allocation, the tile shape information is
              not needed anymore, so we can transform the pseudo AMX
              instruction to real AMX instruction by removing the row
              and column operands.<o:p></o:p></span></p>
        </blockquote>
        <p><span lang="EN-US"><o:p> </o:p></span></p>
        <p><span lang="EN-US">Can you take advantage of our IPRA
            capability so that internal function calls might avoid this
            reconfiguration if the necessary configuration is always
            done in the caller?<o:p></o:p></span></p>
        <p><span lang="EN-US">[Yuanke] I don’t know IPRA capability and
            I am very interesting on it. Would you post some linkage
            that introduce IPRA?</span></p>
      </div>
    </blockquote>
    <p><br>
    </p>
    <p>Interestingly, it looks like some documentation was written but
      never committed: <a href="https://reviews.llvm.org/D23980">https://reviews.llvm.org/D23980</a>
      - in general, if you search for IPRA in LLVM, you'll see the
      relevant pieces. The really short description is that functions
      are emitted in topological order, leaves of the call graph first,
      so that customized clobber register masks can be attached to call
      sites of relevant internal functions.<br>
    </p>
    <p> -Hal</p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:SN6PR11MB3135C1F00F6C3EB6B409DE369A400@SN6PR11MB3135.namprd11.prod.outlook.com">
      <div class="WordSection1">
        <p><span lang="EN-US"><o:p></o:p></span></p>
        <p><span lang="EN-US">How will the implementation of
            __builtin_setjmp/longjmp be affected?<o:p></o:p></span></p>
        <p><span lang="EN-US">[Yuanke] That depends on the ABI. We
            propose all tile register is caller saved, so I think
            setjmp/longjmp is not affected.<o:p></o:p></span></p>
        <p><span lang="EN-US">Thanks again,<o:p></o:p></span></p>
        <p><span lang="EN-US">Hal<o:p></o:p></span></p>
        <p><span lang="EN-US"><o:p> </o:p></span></p>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <p class="MsoListParagraph"
            style="margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0
            level1 lfo2">
            <!--[if !supportLists]--><span lang="EN-US"><span
                style="mso-list:Ignore">9.<span style="font:7.0pt
                  "Times New Roman"">      
                </span></span></span><!--[endif]--><span lang="EN-US">Use
              recommendation <o:p></o:p></span></p>
          <p class="MsoNormal"><span lang="EN-US">Due to the shape
              configure issue, we recommend user to define the tile
              shape at the entry of the function entry and inline
              function as much as possible. The AMX instructions focus
              on computation instead of storage, so global variable for
              tile data is not recommended.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-size:10.5pt;line-height:105%" lang="EN-US"> </span><span
              lang="EN-US"><o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-size:10.5pt;line-height:105%" lang="EN-US">Thanks</span><span
              lang="EN-US"><o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-size:10.5pt;line-height:105%" lang="EN-US">Yuanke</span><span
              lang="EN-US"><o:p></o:p></span></p>
          <p class="MsoNormal"
            style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:normal">
            <span lang="EN-US"><br>
              <br>
              <o:p></o:p></span></p>
          <pre><span lang="EN-US">_______________________________________________<o:p></o:p></span></pre>
          <pre><span lang="EN-US">LLVM Developers mailing list<o:p></o:p></span></pre>
          <pre><span lang="EN-US"><a href="mailto:llvm-dev@lists.llvm.org" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><o:p></o:p></span></pre>
          <pre><span lang="EN-US"><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></span></pre>
        </blockquote>
        <pre><span lang="EN-US">-- <o:p></o:p></span></pre>
        <pre><span lang="EN-US">Hal Finkel<o:p></o:p></span></pre>
        <pre><span lang="EN-US">Lead, Compiler Technology and Programming Languages<o:p></o:p></span></pre>
        <pre><span lang="EN-US">Leadership Computing Facility<o:p></o:p></span></pre>
        <pre><span lang="EN-US">Argonne National Laboratory<o:p></o:p></span></pre>
      </div>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>