<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=us-ascii">
<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;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle20
        {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]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">I got no responses to my earlier emails. Since I was stuck, I looked into this further and I tried the following change in my LLVM (4.0.1) sandbox and it seems to address the problem.<o:p></o:p></p>
<p class="MsoNormal">I handled only __multi3 for now but a complete fix would handle other 128-bit functions as well. Further, the guard that I am using (isArch32Bit)… is it appropriate? Should<o:p></o:p></p>
<p class="MsoNormal">I check for something else instead?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-family:Consolas">diff --git a/lib/CodeGen/TargetLoweringBase.cpp b/lib/CodeGen/TargetLoweringBase.cpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">index 003311b..05582fe 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">--- a/lib/CodeGen/TargetLoweringBase.cpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">+++ b/lib/CodeGen/TargetLoweringBase.cpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#0070C0">@@ -83,7 +83,9 @@
</span><span style="font-family:Consolas">static void InitLibcallNames(const char **Names, const Triple &TT) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">   Names[RTLIB::MUL_I16] = "__mulhi3";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">   Names[RTLIB::MUL_I32] = "__mulsi3";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">   Names[RTLIB::MUL_I64] = "__muldi3";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:red">-  Names[RTLIB::MUL_I128] = "__multi3";</span><span style="font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#00B050">+  if (!TT.isArch32Bit()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#00B050">+    Names[RTLIB::MUL_I128] = "__multi3";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#00B050">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">   Names[RTLIB::MULO_I32] = "__mulosi4";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">   Names[RTLIB::MULO_I64] = "__mulodi4";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas">   Names[RTLIB::MULO_I128] = "__muloti4";<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Anyone familiar with this stuff, please comment. I know the above code has changed in the master and I may have to add the following instead:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#00B050">+  if (TT.isArch32Bit()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#00B050">+    Names[RTLIB::MUL_I128] = nullptr;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:Consolas;color:#00B050">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thx.<o:p></o:p></p>
<p class="MsoNormal">/RVP<o:p></o:p></p>
<p class="MsoNormal"><a name="_MailEndCompose"><o:p> </o:p></a></p>
<span style="mso-bookmark:_MailEndCompose"></span>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Riyaz Puthiyapurayil via llvm-dev [mailto:llvm-dev@lists.llvm.org]
<br>
<b>Sent:</b> Thursday, October 5, 2017 3:37 PM<br>
<b>To:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] Bug 20871 -- is there a fix or work around?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is there a switch (other than -O0) that can be used to work around this? Currently, our 32-bit compilation is broken with clang (undefined reference to __multi3) when we changed the type of some variables from unsigned to uint64_t. There
 are some loops in the code that are getting optimized by clang and ending up with calls to __multi3. Somebody wrote in the existing bug report that indvars is responsible for this. Is there a way to turn it off?<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> Riyaz Puthiyapurayil via llvm-dev [<a href="mailto:llvm-dev@lists.llvm.org">mailto:llvm-dev@lists.llvm.org</a>]
<br>
<b>Sent:</b> Wednesday, October 4, 2017 7:04 PM<br>
<b>To:</b> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [llvm-dev] Bug 20871 -- is there a fix or work around?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Looks like I have run into the same issue reported in:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.llvm.org_show-5Fbug.cgi-3Fid-3D20871&d=DwMFAg&c=DPL6_X_6JkXFx7AXWqB0tg&r=mMZWMrEZcvPMLSsEQSah9FOTwza1UudSDkAneN47U9lD3qu6gt3kpnIb4MWV77cM&m=NLVJvRs7gxWXdTlf0AqaZwiKUVL5bOkLiuQT9ROMxsc&s=oqlif07O6_1z_DqqI7ZpFHwvL6Zr0TRl4BJDdUn-o0w&e=">https://bugs.llvm.org/show_bug.cgi?id=20871</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is there a fix or work-around for it? The bug report seems to be still open.<o:p></o:p></p>
</div>
</body>
</html>