<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body>
    <p>I'll comment that I'd love to see someone improve LLVM's lowering
      for wide integers, but this definitely falls into the "interesting
      project" camp, not the "fastest way to make progress" camp.</p>
    <p>Philip<br>
    </p>
    <div class="moz-cite-prefix">On 8/17/20 12:08 PM, Eli Friedman via
      llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:BY5PR02MB709276FE9D2629DBB4A9E2A1CA5F0@BY5PR02MB7092.namprd02.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:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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">If you’re dealing with integers that wide,
          I’d recommend avoiding the builtin IR integers.  There are
          dedicated libraries for wide integers; the most well-known is
          probably GMP.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">-Eli<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div>
          <div style="border:none;border-top:solid #E1E1E1
            1.0pt;padding:3.0pt 0in 0in 0in">
            <p class="MsoNormal"><b>From:</b> llvm-dev
              <a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev-bounces@lists.llvm.org"><llvm-dev-bounces@lists.llvm.org></a> <b>On Behalf Of
              </b>Riyaz Puthiyapurayil via llvm-dev<br>
              <b>Sent:</b> Monday, August 17, 2020 11:54 AM<br>
              <b>To:</b> llvm-dev <a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev@lists.llvm.org"><llvm-dev@lists.llvm.org></a><br>
              <b>Subject:</b> [EXT] [llvm-dev] Code generation option
              for wide integers on x86_64?<o:p></o:p></p>
          </div>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><span style="font-size:14.0pt">Is there an
            existing option in X86_64 target code generator to emit a
            loop for the following code:<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">define i4096
            @add(i4096 %a, i4096 %b)
            <b>alwaysinline</b> {<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">    %c = add
            i4096 %a, %b<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">    ret i4096
            %c<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">}<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt">instead of:<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            %rdi, %rax<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     addq
            96(%rsp), %rsi<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     adcq
            104(%rsp), %rdx<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            %rdx, 8(%rdi)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            %rsi, (%rdi)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     adcq
            112(%rsp), %rcx<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            %rcx, 16(%rdi)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     adcq
            120(%rsp), %r8<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq %r8,
            24(%rdi)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     adcq
            128(%rsp), %r9<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq %r9,
            32(%rdi)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            8(%rsp), %rcx<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     adcq
            136(%rsp), %rcx<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            %rcx, 40(%rdi)<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     movq
            16(%rsp), %rcx<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">           :<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     :<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas">     :<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:14.0pt;font-family:Consolas"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt">What is the
            best strategy for lowering wide integer types/operations on
            x86_64 without causing code blow up? Should we the code run
            through a custom pass that replaces wide operations with a
            library function call (or alternatively a loop) before code
            generation? Is there any existing code that can be reused?<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt">Is there any
            documentation that describe strategies for lowering from
            languages that support arbitrarily wide integers?<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:14.0pt"><o:p> </o:p></span></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>
  </body>
</html>