[LLVMdev] Python Backend

Roel Jordans r.jordans at tue.nl
Wed Nov 21 06:38:18 PST 2012


I've sent my earlier ideas to the list.  That post should give a good 
idea on the things I am considering:

http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-August/052858.html

For a patch set, check the following message:

http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-November/056089.html

Cheers,
  Roel


On 21/11/12 15:25, Wojciech Daniło wrote:
> I'm very interested in this patch. Could you, Roel, upload it somewhere
> or maybe put your code to github or something simmilar?
>
> Additional - you're fixing it - could you please provide a little more
> information - what should I read to get more informations about writing
> not hardware but software backend in LLVM? (Of course the code analysis
> is one way, but maybe there is other also).
>
>
> 2012/11/21 Roel Jordans <r.jordans at tue.nl <mailto:r.jordans at tue.nl>>
>
>     Hi,
>
>     I have a version of the old CBackend which is working with the current
>     trunk.
>
>     I am in the progress of rewriting it into a new version but that project
>     is not going as fast as I would hope as I have been distracted by other
>     tasks with higher priority lately.
>
>     Anyway, for those interested, I can provide patches, optionally
>     separated into several parts (core, testing, misc).
>
>     I am afraid that the main patch is larger than the LLVM mailing lists
>     allows me to send over the list directly
>
>     Cheers,
>       Roel
>
>     On 21/11/12 00:46, Wojciech Daniło 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
>         $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
>           uwtablealign  2 {
>             %1 =tail  call  i32  (i8*, ...)* @printf(i8*getelementptr
>           inbounds ([9 xi8]* @.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 <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu
>     http://lists.cs.uiuc.edu/__mailman/listinfo/llvmdev
>     <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>
>
>



More information about the llvm-dev mailing list