[llvm-dev] General question - better descriped.

mayuyu.io via llvm-dev llvm-dev at lists.llvm.org
Thu Jun 20 12:55:11 PDT 2019


I’m still kinda lost, some example would help.
Anyway I’ll try my best here. If the core code(functions) are predefined and is written in C++,I’d say re-use libClang to compile them into Bitcode/LLVM IR, then perform your own linking/inlining procedures, add function calls etc to sort of “pipe” everything together. Basically:
- Setting up a libClang’s CompilerInstance with headers and stuff.
- Emit a new C++ source code from the user’s input and use your CompilerInstance to run EmitLLVMOnlyAction. (See this article http://fdiv.net/2012/08/15/compiling-code-clang-api for a hands-on walkthrough. See the Compile a .c file into a Module part)
- Some IR level transformation if you need to.

In this way you should be able to tackle the problem without hacking with libClang or anything, if my understanding is correct. Also for any libClang related question, cfe-dev is a more suitable place.

Zhang

> 在 2019年6月20日,20:32,Steven Truppe <workbench at gmx.at> 写道:
> 
> I explain it in more detail:
> 
> I'm writing an application that works completely with nodes (think about
> a node like a function with parameters and in and output slots. there
> will be type-nodes like vec3f, int, float, etc. and operation nodes (the
> functions that are predefined). So as far as i know i need clang to
> parse and create an AST from the nodes (which have access to the
> predefined functions and variables). The nodes that are create with a
> GUI and the user can connect those nodes to create higher order
> functions. (if you know houdini you might know the system i'm trying to
> create).
> 
> And the code should be C++ (for the predefined functions and the
> operator nodes). So no own language just parse and execute in realtime a
> self created AST (with predefined functions that must be available for
> the code that every operator node has included. More like a graphical
> interface to let the use create it's own AST and then run it in realtime
> (so the user don' t need programming skills and can create smaller
> applications only with the graphical interface.
> 
> 
> I was not able to find a clang book, only for llvm and they don't go
> into much detail when it comes to clang.
> 
> 
> I hope someone here can point me in the right direction (name of a clang
> book or links to the documentation that i need to get things done.
> 
> 
> best regards.
> 
> Steven Truppe
> 
> 
> 
> 
>> On 20.06.19 20:52, mayuyu.io wrote:
>> As far as I understand it you are basically trying to create your own domain specific language for scientific computation?
>> Clang seems to kinda match what you need but I don’t think it’s able to support function definition in another function which sounds like something you’d need. Your best approach would be using some lexer/parser generate tool to code your own compiler frontend (GREAT DEAL OF WORK) or hack up libClang a bit. Alternatively there are a bunch of readily usable LLVM based languages like Halide that are designed for generating efficient tensor computation code so changing your workflow a bit to re-use those libraries/frameworks is probably a better idea, in my humble opinion. Unless I’m missing something obvious here.
>> 
>> Zhang
>> 
>>> 在 2019年6月20日,19:01,Steven Truppe via llvm-dev <llvm-dev at lists.llvm.org> 写道:
>>> 
>>> Hi everyone,
>>> 
>>> i'm currently trying to write an application that let you "code" with
>>> nodes. (think of a node like a function that has input and output slots
>>> that can get connected).
>>> 
>>> 
>>> I need a few functions that are predefined and can be used in the code
>>> (so i want to parse and create an AST for those functions/variables and
>>> then i need to parse C++ code (one node has c++ code that should be
>>> executed. So in the end i've nodes that are for types, then one for
>>> operations (the functions).
>>> 
>>> 
>>> The code from the nodes must be able to run the code from it's node with
>>> the parameters i pass to the node's slots or in the node itself and i
>>> need it to be able to create own functions that must be available in the
>>> code of the nodes.
>>> 
>>> 
>>> so for example i've a typenode that declares and defines variables, for
>>> example vec3f for 3d vector types.
>>> 
>>> 
>>> Now my question would be: Where should i start reading or is there a
>>> special article how to achive what i want ?? As far as i know i need
>>> clang to parse my own functions so he knows about my types and my
>>> functions (one for each operation nodes and the structure declarations).
>>> this creates one AST for each type/function). then i need to build an
>>> AST for my own nodes that must be interpreted and compiled with llvm and
>>> then run the code at runtime.
>>> 
>>> 
>>> I hope one of you guys can point me in the right direction because i'm
>>> completely new to clang and llvm (but i found a book about "learning
>>> llvm basic libaries that helps a bit but they do not talk much about
>>> clang (so i only know the basics about llvm and have not much of a clue
>>> about clang.
>>> 
>>> 
>>> best regards,
>>> 
>>> Steven Truppe
>>> 
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> 
>> 
>> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190620/c1c435cb/attachment.html>


More information about the llvm-dev mailing list