[cfe-dev] Flag for generating LLVM IR from forward declarations

Alex L via cfe-dev cfe-dev at lists.llvm.org
Wed Nov 30 04:12:00 PST 2016


On 30 November 2016 at 11:32, Gianluca Stivan <me at yawnt.com> wrote:

> True,
>
> I was toying with the idea of having a separate step in the pipeline that
> plugs in after AST is turned into a Module[*] which generates frontend code.
> But to do so, I would have to have forward declarations be actually
> emitted, hence my proposal. Otherwise I'd just be iterating over an empty
> set of instructions :)
> My theory is that LLVM IR at that point is going to be way more
> straightforward (just basic types, structs and `declare @..`s) to deal with.
> Could this approach make sense?
>

I see, so are you thinking about basically looking at the LLVM IR with the
C function declarations and generating the calls based on the IR
declarations yourself instead or relying on clang? I suppose that could
work, but I'm not 100% sure that it will be correct in all cases. How will
your front-end deal with functions that take and return C aggregate types?


>
> Cheers,
>
> -yawnt
>
> [*] a Clang plugin? Can they be run over Modules, that is LLVM IR, instead
> of AST?
>
>
> 2016-11-30 10:59 GMT+00:00 Alex L <arphaman at gmail.com>:
>
>>
>>
>> On 30 November 2016 at 09:12, Gianluca Stivan via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>>> Hi everyone,
>>>
>>> I was playing around with the LLVM toolchain and it occurred to me that,
>>> should I decide to target LLVM IR, it would be neat to have Clang generate
>>> declarations from C header files for easier FFI. Someone seems to have had
>>> my same idea [1] [2]. This is kind of the opposite of what other projects
>>> have gone for, where they use libclang to parse header files to achieve the
>>> same result [3].
>>>
>>
>> Sounds like an interesting idea. I how one question though, if you're
>> generating only the C function declarations in LLVM IR, how will your
>> frontend that targets LLVM IR call these declarations? Maybe I'm
>> misunderstanding something, but I don't see how can you generate the calls
>> to these functions without getting clang involved.
>>
>> Cheers,
>> Alex
>>
>>
>>>
>>> Now, forward declaration generation is doable by patching
>>> CodeGenModule.cpp (I kinda have a PoC working locally, except it generates
>>> *all* the forward declarations, instead of just the ones from the header
>>> files I care about)
>>>
>>> Is this something that you guys would be interested in merging into
>>> Clang through a flag? Or what would the proper way to do this be?
>>> I saw there's a `-femit-all-decls`, but it doesn't really emit all
>>> declarations.
>>>
>>> Apologies if this is a dumb idea, kinda new to the whole Clang thing :)!
>>>
>>> Cheers,
>>>
>>> -yawnt
>>>
>>> [1] http://stackoverflow.com/questions/24728901/clang-compiling-
>>> a-c-header-to-llvm-ir-bitcode
>>> [2] http://stackoverflow.com/questions/14032496/how-can-i-co
>>> de-generate-unused-declarations-with-clang?noredirect=1&lq=1
>>> [3] https://github.com/tjfontaine/node-ffi-generate
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20161130/10875e10/attachment.html>


More information about the cfe-dev mailing list