<div dir="ltr">Hi Johannes,<div><br></div><div>No, runFunction isn't particularly useable at the moment. So far we've been encouraging people to use getSymbolAddress and call functions directly, handling argument and return marshaling themselves.</div><div><br></div><div>Given that runFunction is calling in to LLVM generated code, I think it makes sense to add some utilities to the execution engine library (rather than rely on libffi) to make marshaling/un-marshaling easier.  Given a function prototype T1 foo(T2, T3, ...), a utility could create new IR along these lines:</div><div><br></div><div><font face="monospace, monospace">declare T1 foo(T2, T3, ...);</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">T1 r;</font></div><div><font face="monospace, monospace">T2 arg1;</font></div><div><font face="monospace, monospace">T3 arg2;</font></div><div><font face="monospace, monospace">...<br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">void foo_helper() {</font></div><div><font face="monospace, monospace">  x1 = load arg1;</font></div><div><font face="monospace, monospace">  x2 = load arg2;</font></div><div><font face="monospace, monospace">  ...</font></div><div><font face="monospace, monospace">  x0 = call foo(x1, x2, ...);</font></div><div><font face="monospace, monospace">  store x0, r;</font></div><div><font face="monospace, monospace">}</font></div><div><br></div><div>For primitive types all that would be needed is to copy the values into the globals, invoke the helper, then read the return value back out.</div><div><br></div><div>Would something like this satisfy your use case?</div><div><br></div><div>Cheers,</div><div>Lang.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 18, 2015 at 6:46 AM, Mueller-Roemer, Johannes Sebastian 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 lang="DE" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span lang="EN-US">I noticed that runFunction (for MCJIT) is very limited. At the same time the interpreter already has a fairly generic way of calling functions from a pointer and a Function * (for description) using libffi. Would it make
 sense to pull that functionality out into a small support library and using it in MCJIT? As is runFunction isn’t particularly usable.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span>--<u></u><u></u></span></p>
<p class="MsoNormal"><span>Johannes S. Mueller-Roemer, MSc<u></u><u></u></span></p>
<p class="MsoNormal"><span>Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Fraunhofer-Institut für Graphische Datenverarbeitung IGD<u></u><u></u></span></p>
<p class="MsoNormal"><span>Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany<u></u><u></u></span></p>
<p class="MsoNormal"><span>Tel <a href="tel:%2B49%206151%20155-606" value="+496151155606" target="_blank">+49 6151 155-606</a>  |  Fax <a href="tel:%2B49%206151%20155-139" value="+496151155139" target="_blank">+49 6151 155-139</a><u></u><u></u></span></p>
<p class="MsoNormal"><span><a href="mailto:johannes.mueller-roemer@igd.fraunhofer.de" target="_blank">johannes.mueller-roemer@igd.fraunhofer.de</a>  |  <a href="http://www.igd.fraunhofer.de" target="_blank">www.igd.fraunhofer.de</a><u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

<br>_______________________________________________<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/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>