<div dir="ltr"><div dir="ltr"><div dir="ltr"><div><div dir="ltr" class="gmail_signature">On Fri, Apr 12, 2019 at 3:53 AM Peter Lammich via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi List,<br>
<br>
is there any way to generate proper C header files for functions that<br>
are defined in LLVM-IR. My current attempts fail when clang does some<br>
fancy transformations (to adhere to some ABIs ??), e.g., for returning<br>
a struct.<br>
<br>
For example the declaration<br>
<br>
typedef struct {int64_t a; int64_t b;int64_t c;} test;<br>
test create_test(void);yields the LLVM code<br>
<br>
%struct.test = type { i64, i64, i64 }<br>
declare void @create_test(%struct.test* sret) #1<br>
<br>
However, the function is defined in LLVM-IR as<br>
{i64,i64,i64} @create_test()<br></blockquote><div><br></div><div>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.</div><div><br></div><div>- Michael Spencer<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
Questions:<br>
1) Is there any way to convince clang to generate the "correct" output,<br>
that fits the given definition in LLVM-IR?<br>
<br>
2) What other surprises to expect? Is there a "safe fragment" where the<br>
 obvious C code actually matches the obvious LLVM-IR?<br>
<br>
3) If 1 does not exist, is there a way to generate "wrapper-functions"<br>
in LLVM-IR, that map the given functions to what clang expects?<br>
<br>
<br>
Thanks in advance for any help,<br>
  Peter<br><br>
</blockquote></div></div></div>