LLVM Source-to-Source transformation

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

LLVM Source-to-Source transformation

Kamals-2
Hi,

I plan to use LLVM for some compiler transformation.

My requirement is that I require a source to source transformation. I need
to parse the given program and look for loops. Then I need to create
another source file where I can use this source information like the
iteration bounds and the loop body into the new file. I was looking at the
LoopExtract pass in LLVM passes. However, it enables to extract only loop
body. I need some more information like variables used and array dimension
in loop body and convert it to source level.
Can this be done using llvm? Can I get some pointers on this.

My problem can be analogous viewed as adding OpenMP pragmas for auto
parallelization.

Regarsd,
Kamal

_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Reply | Threaded
Open this post in threaded view
|

Re: LLVM Source-to-Source transformation

Chris Lattner

On Dec 15, 2007, at 9:31 AM, [hidden email] wrote:

> Hi,
>
> I plan to use LLVM for some compiler transformation.
>
> My requirement is that I require a source to source transformation.  
> I need
> to parse the given program and look for loops. Then I need to create
> another source file where I can use this source information like the
> iteration bounds and the loop body into the new file. I was looking  
> at the
> LoopExtract pass in LLVM passes. However, it enables to extract only  
> loop
> body. I need some more information like variables used and array  
> dimension
> in loop body and convert it to source level.
> Can this be done using llvm? Can I get some pointers on this.

There are two routes you can take here:

1. You can do this in clang as a source to source transformation.  The  
good thing about this is that it makes it very trivial to do thing at  
the C level of for loops etc, and makes it really easy to rewrite the  
source.  OTOH, clang doesn't have as much analysis infrastructure as  
the LLVM level, and it doesn't support C++ yet.

2. You can do this at the LLVM level, which gives you a lot of  
analysis and transformation tools.  However, it doesn't give you a  
good way to pretty print back source code.  You can get "working" C  
code, but it is hideously ugly, not something you want to look at.

-Chris
_______________________________________________
LLVM Developers mailing list
[hidden email]         http://llvm.cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev