[LLVMdev] Python Backend

Rafael Espíndola rafael.espindola at gmail.com
Tue Nov 20 15:56:11 PST 2012


On 20 November 2012 18:46, Wojciech Daniło <wojtek.danilo.ml at gmail.com> wrote:
> Hi!
> I'm trying to write LLVM Python Backend (to generate Python code out of LLVM
> IR)
> I'm still learning LLVM and for now it is very hard to me to even create
> simple taksk. I want you to ask 3 questions:
>
> ----------------------------------------------------------------------------------
> 1)
>  I want to base on some existing code to learn how it was build. I wanted to
> base on CBackend (which is no longer available from LLVM 3.0 up) and of
> course it does not compile with LLVM 3.2 - giving a lot of errors:
> (the code is taken from source of LLVM 3.0 and put into

You might want to look at lib/Target/NVPTX/ for something that uses
the common codegen infrastructure.

> $LLVMSRC/projects/<copy of sample project>/lib/Target/CBackend - I hope this
> is good method to do it)
> http://pastebin.com/dkbJWpgP
> Does anybody have this example working under LLVM3.2? I have found on some
> old mailing lists that CBackend was never working as  it should but it was
> working for some simple examples - I'm looking for somethingl ike that in
> LLVM 3.2.
> If not, what is the best minimal example I can base onto writing my backend?
>
> ----------------------------------------------------------------------------------
> 2)
> Maybe this question I will answer myself by analising some examples you'll
> provide as answer to the first question, but maybe it will worth asking it
> now.
> So I want to know when to generate a class in Python. So far I know, that in
> LLVM there are no classes, only functions, but when using the online LLVM
> generator I can see, that when generating IR from C++ code, the "class"
> keyword is stored inside of name (or something like name) of function:
>
> #include <stdio.h>
> #include <stdlib.h>
> class X{
> public:
> void f();
> };
> void X::f() { printf("inside f");}
> int main() {  X x;  x.f();}
>
> translates into:
>
> [...]
>
> define void @_ZN1X1fEv(%class.X* nocapture %this) nounwind uwtable align 2 {
>   %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x
> i8]* @.str, i64 0, i64 0))
>   ret void
> }
>
> [...]
>
>
> How can I access it inside of my function Pass to get know if it was class
> or not?
>
>
>
> ----------------------------------------------------------------------------------
>
> 3)
>
> Is there any manual that will help me discover all these advanced LLVM
> features needed to write such backend? I have read LLVM Kaleidoscope
> tutorials, some LLVM tutorials from IBM and lot of articles, but I still
> feel that I have not knowledge enough.
>
>
> Thank you :)
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list