Thank you for the response.<br>I have already feared that it will be like this.<br><br>So I will end up to generate interface methods between the C style convention and the Llvm style one. And, when I understood this point right, ending up reinventing the abi lowering wheel, as there is no library support for this.<br><br>--<br>Peter <div class="quote" style="line-height: 1.5"><br><br>-------- Original Message --------<br>Subject: RE: [llvm-dev] Generating C headers from LLVM<br>From: "Cranmer, Joshua" <joshua.cranmer@intel.com><br>To: Peter Lammich <lammich@in.tum.de>,"Doerfert, Johannes      " <jdoerfert@anl.gov>,Michael Spencer <bigcheesegs@gmail.com>,"   llvm-dev@lists.llvm.org" <llvm-dev@lists.llvm.org><br>CC: <br><br><br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> -----Original Message-----<br>> From: llvm-dev [mailto:llvm-dev-bounces@lists.llvm.org] On Behalf Of Peter<br>> Lammich via llvm-dev<br>> Sent: Friday, April 12, 2019 17:35<br>> To: Doerfert, Johannes <jdoerfert@anl.gov>; Michael Spencer<br>> <bigcheesegs@gmail.com><br>> Cc: llvm-dev <llvm-dev@lists.llvm.org><br>> Subject: Re: [llvm-dev] Generating C headers from LLVM<br>> <br>> Given the LLVM-IR definition (say in file test.ll)<br>>   {i64,i64,i64} @create_test() { ... }<br><br>The LLVM IR ABI is not, in general, the same as the C ABI, since there's generally more trickery that gets involved. There have been suggestions in the past to build an ABI lowering library that's not so tightly integrated to Clang, but nothing has come of that yet. In particular, the ABI you get from passing structs around is completely different: a function returning a struct generally maps each element of the struct into a different register (i.e., returning a struct in LLVM IR is essentially declaring that a function returns multiple values--which C doesn't support), whereas the ABI for most targets is to have the caller allocate a struct on the stack and pass the address as the first argument (generally marked sret).<br><br>> I hoped to keep my frontend simple, and that's why it just generates<br>> functions that return structure types. However, I need to call these<br>> functions from clang, ideally without clobbering my frontend with<br>> target-specific calling-convention implementations (Conceptually, those<br>> things belong to the backend!). Note that it is irrelevant for me<br>> whether my functions adhere to some specific ABI, as long as I can call<br>> them from C code compiled with clang.<br><br>Returning a struct in LLVM IR is pretty much the one thing you can do to a function to make it completely uncallable from a C code no matter how many compiler-specific annotations you put on the C code.<br></blockquote></div>