[llvm-dev] Generating C headers from LLVM

Michael Spencer via llvm-dev llvm-dev at lists.llvm.org
Fri Apr 12 10:19:52 PDT 2019

On Fri, Apr 12, 2019 at 3:53 AM Peter Lammich via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi List,
> is there any way to generate proper C header files for functions that
> are defined in LLVM-IR. My current attempts fail when clang does some
> fancy transformations (to adhere to some ABIs ??), e.g., for returning
> a struct.
> For example the declaration
> typedef struct {int64_t a; int64_t b;int64_t c;} test;
> test create_test(void);yields the LLVM code
> %struct.test = type { i64, i64, i64 }
> declare void @create_test(%struct.test* sret) #1
> However, the function is defined in LLVM-IR as
> {i64,i64,i64} @create_test()

Where are you getting this definition from?  Clang outputs what is required
by the target backend to generate the correct ABI.  The mapping from C code
to llvm ir is always target dependent.

- Michael Spencer

> Questions:
> 1) Is there any way to convince clang to generate the "correct" output,
> that fits the given definition in LLVM-IR?
> 2) What other surprises to expect? Is there a "safe fragment" where the
>  obvious C code actually matches the obvious LLVM-IR?
> 3) If 1 does not exist, is there a way to generate "wrapper-functions"
> in LLVM-IR, that map the given functions to what clang expects?
> Thanks in advance for any help,
>   Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190412/db27abce/attachment.html>

More information about the llvm-dev mailing list