<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>