<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=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@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]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">I've been side-tracked by some more bugs in the N32/N64 ABI's but I'm planning to move the #include of MipsGenCallingConv.inc to MipsCCState.cpp. Once that's done, we'll
 only have one copy of these functions. I'm also going to eliminate the use of CustomCallingConv which is the reason Fast ISel and SelectionDAG have different implementations of a couple of them (the FastISel ones are stubs containing llvm_unreachable()).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> llvm-commits-bounces@cs.uiuc.edu [mailto:llvm-commits-bounces@cs.uiuc.edu]
<b>On Behalf Of </b>Eric Christopher<br>
<b>Sent:</b> 14 November 2014 21:19<br>
<b>To:</b> Reid Kleckner; Reed Kotler<br>
<b>Cc:</b> llvm-commits<br>
<b>Subject:</b> Re: [llvm] r221948 - First stage of call lowering for Mips fast-isel<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Thu Nov 13 2014 at 5:36:40 PM Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">On Thu, Nov 13, 2014 at 5:24 PM, reed kotler <<a href="mailto:rkotler@mips.com" target="_blank">rkotler@mips.com</a>> wrote:<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal">On 11/13/2014 05:20 PM, Reid Kleckner wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Looks like you're including that .inc file twice, which is going to duplicate the code. IMO it'd be better to call over from FastISel into a wrapper in ISelLowering if you want to use these.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</blockquote>
<p class="MsoNormal">I think it's a mistake for tablegen to be generating static functions here.<br>
<br>
Why should I have to make a wrapper?<br>
<br>
I've raised this issue before but did not get any response.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Wow. Looks like all the other backends duplicate this code:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">$ git grep '#include.*GenCallingConv.inc' ../lib/Target/<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/AArch64/AArch64FastISel.cpp:#include "AArch64GenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/AArch64/AArch64ISelLowering.cpp:#include "AArch64GenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/ARM/ARMFastISel.cpp:#include "ARMGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/ARM/ARMISelLowering.cpp:#include "ARMGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/MSP430/MSP430ISelLowering.cpp:#include "MSP430GenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/Mips/MipsFastISel.cpp:#include "MipsGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/Mips/MipsISelLowering.cpp:#include "MipsGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/PowerPC/PPCFastISel.cpp:#include "PPCGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/PowerPC/PPCISelLowering.cpp:#include "PPCGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/R600/AMDGPUISelLowering.cpp:#include "AMDGPUGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/Sparc/SparcISelLowering.cpp:#include "SparcGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/SystemZ/SystemZISelLowering.cpp:#include "SystemZGenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/X86/X86FastISel.cpp:#include "X86GenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/X86/X86ISelLowering.cpp:#include "X86GenCallingConv.inc"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">../lib/Target/XCore/XCoreISelLowering.cpp:#include "XCoreGenCallingConv.inc"<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This seems less than ideal. Eric, should we really be doing that? <o:p></o:p></p>
</div>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Ideally no. I mean, we could generate separate CC.inc files for fast-isel? A wrapper seems reasonable as well, but seems like a shame we can't generate the right stuff out of it. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Perhaps the best solution is taking the calling convention bits from being a bunch of static functions in a namespace and encapsulating them into a class in a header that can be extended by the target. I.e. giving it a wrapper by default?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">That's probably what I'd do.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-eric <o:p></o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>