LLVM - Dynamicly load Functions via IR?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

LLVM - Dynamicly load Functions via IR?

Tom Stellard via cfe-dev
Hello LLVM-World,

I always thought, that clang is just a normal C/C++ Compiler, but after some research I'm getting a little confused. Do I'm right with the following?

I have a simple C/C++ program and I compile it with clang.

1.) Clang generates me a LLVM IR file
2.) LLVM uses the IR file to generate the.obj file
3.) My linker creates an executebale file from that.

Is this correct? On Stackoverflow (
http://stackoverflow.com/questions/3509215/llvm-jit-and-native) I read:
So how does one use LLVM as a JIT compiler?
You build an application which generates some LLVM IR (in memory), then use the LLVM library to generate native code (still in memory). LLVM hands you back a pointer which you can call afterwards. No clang involved.


So... Is it possible to grab the IR-File clang created and load them into a normal C/C++ written program? Could this program now use the LLVM-Library to create functions from it and let me call them? So this would be like a dll/so?  How could you perform this? What would happen if I'm using a function like printf? So the created code must have a "undefined reference".

Kind regards
Björn
Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789
Geschäftsführer: Hiroshi Kawamura, Dr Hiroshi Nakamura, Markus Bode, Heiko Lampert, Takashi Nagano, Takeshi Fukushima.

_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: LLVM - Dynamicly load Functions via IR?

Tom Stellard via cfe-dev
Hello Björn,



clang is a C/C++ compiler which uses the LLVM backend to generate object code. 
This means you can use clang to create directly the object code or simply emit the LLVM-IR and JIT it.

If you are looking for JIT support using LLVM, please take a look at compiler-RT [1].
You can find a section of the LLVM tutorial [2] dedicated to JIT implementation.

I would also ask you if a JIT is actually what you need for your use-case.
I did something similar to what you want to do (if I understood correctly)
wrapping calls to the compiler/using libclang without using the JIT.
I published my code as a LGPL library on github [3]. Feel free to check it out / contribute.

Cheers,

Stefano Cherubin

[1] https://compiler-rt.llvm.org/ 


From: via cfe-dev <[hidden email]>
To: [hidden email]
Sent: Tuesday, 18 April 2017, 11:40
Subject: [cfe-dev] LLVM - Dynamicly load Functions via IR?

Hello LLVM-World,

I always thought, that clang is just a normal C/C++ Compiler, but after some research I'm getting a little confused. Do I'm right with the following?

I have a simple C/C++ program and I compile it with clang.

1.) Clang generates me a LLVM IR file
2.) LLVM uses the IR file to generate the.obj file
3.) My linker creates an executebale file from that.

Is this correct? On Stackoverflow (
http://stackoverflow.com/questions/3509215/llvm-jit-and-native) I read:
So how does one use LLVM as a JIT compiler?
You build an application which generates some LLVM IR (in memory), then use the LLVM library to generate native code (still in memory). LLVM hands you back a pointer which you can call afterwards. No clang involved.


So... Is it possible to grab the IR-File clang created and load them into a normal C/C++ written program? Could this program now use the LLVM-Library to create functions from it and let me call them? So this would be like a dll/so?  How could you perform this? What would happen if I'm using a function like printf? So the created code must have a "undefined reference".

Kind regards
Björn
Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789
Geschäftsführer: Hiroshi Kawamura, Dr Hiroshi Nakamura, Markus Bode, Heiko Lampert, Takashi Nagano, Takeshi Fukushima.
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev





_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Loading...