<div dir="ltr">Hi Jason,<div><br></div><div>I'm part of a team building a C to Rust transpiler (<a href="http://www.c2rust.com" target="_blank">www.c2rust.com</a> has a demo, links to sources, etc.) These slides cover our transpiler design: <a href="https://www.ics.uci.edu/~perl/talk/rustconf18/" target="_blank">https://www.ics.uci.edu/~perl/talk/rustconf18/</a>. The goals you describe sound somewhat different from ours, so I'm not sure how relevant our approach is to your problem but it might provide food for thought nonetheless.</div><div><br></div><div>Cheers,</div><div>Per</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Aug 27, 2018 at 1:55 PM Jason Ott via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello, Eli,<div><br></div><div>Thanks for the response.  I did end up finding the CBackendTarget from LLVM 3.1.</div><div><br></div><div>Most of my uncertainity about the documentation is that I've read:</div><div><a href="https://llvm.org/docs/CommandGuide/llc.html" target="_blank">https://llvm.org/docs/CommandGuide/llc.html</a><br></div><div><a href="https://llvm.org/docs/CodeGenerator.htm" target="_blank">https://llvm.org/docs/CodeGenerator.htm</a><br></div><div><a href="https://llvm.org/docs/WritingAnLLVMBackend.html" target="_blank">https://llvm.org/docs/WritingAnLLVMBackend.html</a><br></div><div><br></div><div>From those, I'm still not sure if llc is as modular as opt -- can I just develop off branch and run llc to load my .so and run my backend that way or do I have to develop on branch? (Effectively, I'm asking if I can develop my targets like one would develop passes.)</div><div>It only references physical targets, hence my uncertainty if LLVM was able to support the virtual targets (my intuition said yes, but there isn only one line int he "Writing an LLVM Backend" documentation that references a support for a "software target" so I wanted to make sure.) Thanks for clearing that up.</div><div><br></div><div>Thanks, for pointing to WebAssmebly.  I briefly looked through that, but it looked as though it had all of the definitions of the Sparc or X86 targets, so I assumed it was overkill and discovered the CBackend.</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Aug 27, 2018 at 1:11 PM Friedman, Eli <<a href="mailto:efriedma@codeaurora.org" target="_blank">efriedma@codeaurora.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 8/27/2018 11:35 AM, Jason Ott via llvm-dev wrote:<br>
> I want to use LLVM as the main component in my compilation process.  <br>
> In doing so, I know I need to convert a high-level language to another <br>
> language (python or a custom syntax.)<br>
><br>
> The architecture I'm targeting is non-traditional hardware: <br>
> microfluidic devices.  Microfluidic devices are a specific class of <br>
> reconfigurable computing; which don't necessarily adhere to a <br>
> traditional Von-Neuamann architecture.  What I'm aiming to do is to <br>
> take my high level language and convert it a language that is accepted <br>
> by one of the synthesizers we have (in python or a custom syntax) <br>
> which will then simulate/execute the given program.<br>
><br>
> The workflow I have is as such:<br>
> High level language -> parsed and converted to C++ -> LLVM -> machine <br>
> code (python or custom syntax.)<br>
><br>
> I'm not 100% sure if I should write a full backend for python and our <br>
> custom syntax.  The documentation here: <br>
> <a href="https://llvm.org/docs/WritingAnLLVMBackend.html" rel="noreferrer" target="_blank">https://llvm.org/docs/WritingAnLLVMBackend.html</a> discusses various <br>
> hardware targets but nothing on software targets.<br>
><br>
> My questions are as such:<br>
> - Is my case the correct use of LLVM?<br>
<br>
"Virtual" targets, which don't target any physical hardware, are pretty <br>
common.  In-tree, we have WebAssembly, NVPTX, and BPF.  It's hard to say <br>
more without knowing more about your target.<br>
<br>
> - Should I be writing an LLVM backend to transpile? (if not would a <br>
> pass suffice?)<br>
<br>
Using the LLVM backend infrastructure gives you a bunch of useful code <br>
like handling for types and operations which aren't natively supported <br>
by your target, calling convention handling, a register allocator <br>
(including PHI elimination), and stack frame layout.  So writing a <br>
backend is probably the easiest approach unless your target IR is very <br>
similar to LLVM IR.<br>
<br>
> - Is there any documentation that I have missed trying to target a <br>
> software architecture?<br>
<br>
In practice, the "virtual" targets look pretty similar to normal <br>
hardware targets.  What specifically are you looking for documentation on?<br>
<br>
-Eli<br>
<br>
-- <br>
Employee of Qualcomm Innovation Center, Inc.<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project<br>
<br>
</blockquote></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">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>
</blockquote></div>