<div dir="ltr">I think it would be possible to build a stripped-down C-with-extensions-only type representation that represents only the types that have interesting ABI implications. This includes several things not present in LLVM IR types: _Complex, union, flexible array members, alignment attributes, etc. We could either then use that library to generate LLVM IR, or embed it in the IR for use at call sites.<div><br></div><div>You can exclude C++ because, for the most part, C++ types are either passed indirectly or as the analogous C struct would be passed. Some work would be needed to support packing fields into base tail padding, but that's not too bad.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 28, 2016 at 1:25 PM, Hal Finkel via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">----- Original Message -----<br>
> From: "Chris Lattner via llvm-dev" <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><br>
> To: "David Chisnall" <<a href="mailto:David.Chisnall@cl.cam.ac.uk">David.Chisnall@cl.cam.ac.uk</a>><br>
> Cc: <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>, "ジョウェットジェームス" <<a href="mailto:b3i4zz1gu1@docomo.ne.jp">b3i4zz1gu1@docomo.ne.jp</a>><br>
> Sent: Friday, October 28, 2016 2:13:06 PM<br>
> Subject: Re: [llvm-dev] What was the IR made for precisely?<br>
><br>
><br>
> > On Oct 28, 2016, at 1:21 AM, David Chisnall<br>
> > <<a href="mailto:David.Chisnall@cl.cam.ac.uk">David.Chisnall@cl.cam.ac.uk</a>> wrote:<br>
> ><br>
> > On 28 Oct 2016, at 02:43, ジョウェットジェームス <<a href="mailto:b3i4zz1gu1@docomo.ne.jp">b3i4zz1gu1@docomo.ne.jp</a>><br>
> > wrote:<br>
> >><br>
> >> I would need to sum up all the rules and ABIs and sizes for all<br>
> >> the targets I need and generate different IR for each, am I<br>
> >> correct?<br>
> ><br>
> > This is a long-known limitation of LLVM IR and there are a lot of<br>
> > proposals to fix it.  It would be great if the LLVM Foundation<br>
> > would fund someone to do the work, as it isn’t a sufficiently high<br>
> > priority for any of the large LLVM consumers and would make a huge<br>
> > difference to the utility of LLVM for a lot of people.<br>
> …<br>
> > I think it would be difficult to do it within the timescale of the<br>
> > GSoC unless the student was already an experienced LLVM developer.<br>
> >  It would likely involve designing some good APIs (difficult!),<br>
> > refactoring a bunch of Clang code, and creating a new LLVM<br>
> > library.  I’ve not seen a GSoC project on this scale succeed in<br>
> > any of the open source projects that I’ve been involved with.  If<br>
> > we had a good design doc and a couple of engaged mentors then it<br>
> > might stand a chance.<br>
><br>
> Is there a specific design that you think would work?  One of the<br>
> major problems with this sort of proposal is that you need the<br>
> entire clang type system to do this, which means it depends on a<br>
> huge chunk of the Clang AST.  At that point, this isn’t a small<br>
> library that clang uses, this is a library layered on top of Clang<br>
> itself.<br>
<br>
</div></div>Given that ABIs are defined in terms of C (and sometimes now C++) language constructs, I think that something like this is the best of all bad options. Really, however, it depends only on the AST and CodeGen, and maybe those (along with 'Basic', etc.) could be made into a separately-compilable library. Along with an easy ASTBuilder for C types and function declarations we should be able to satisfy this use case.<br>
<br>
 -Hal<br>
<span class="im HOEnZb"><br>
><br>
> -Chris<br>
> ______________________________<wbr>_________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
><br>
<br>
</span><span class="HOEnZb"><font color="#888888">--<br>
Hal Finkel<br>
Lead, Compiler Technology and Programming Languages<br>
Leadership Computing Facility<br>
Argonne National Laboratory<br>
</font></span><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</div></div></blockquote></div><br></div>