[LLVMdev] Loop transformations using LLVM
Andrew Trick
atrick at apple.com
Fri May 6 17:24:06 PDT 2011
On May 5, 2011, at 5:11 AM, Rotem, Nadav wrote:
> Malveeka,
>
> You can use the LoopInfo analysis to find the induction variable.
>
> http://llvm.org/docs/doxygen/html/classllvm_1_1Loop.html#a72bbf45d2e00971f56bf8cfe4e1df01c
>
> Cheers,
> Nadav
getCanonicalInductionVariable is a good example of finding IVs without iterating over instructions. But you may need to generalize it a bit for your purpose.
A completely general approach to IV analysis is ScalarEvolution. You can query the expression for a loop header phi using ScalarEvolution::getSCEV. If it returns SCEVAddRecExpr with getLoop() == ThisLoop, then you've found an IV. You can build a new IV by replacing the "step" with SCEVAddExpr(1 + OrigStep). To materialize it in IR, you need to use a SCEVExpander. ...probably more complicated than you need.
-Andy
>
>
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of Malveeka Tewari
> Sent: Thursday, May 05, 2011 14:51
> To: llvmdev at cs.uiuc.edu
> Subject: [LLVMdev] Loop transformations using LLVM
>
> Hi
>
> I am trying to write up a transformation for the following code where instead of incrementing the loop variable by 1, I increment it by 2 ie.
>
> for (i=0; i < THRES; i++) {
> //do something
> }
>
> gets transformed to
>
> for (i=0; i < THRES; i+=2) {
> //do something
> }
>
> I am thinking of transforming the llvm bit-code in the following way.
> Iterate over the function for the original code till I get the basicBlock for the for loop, then iterate over the instructions till I get the increment instruction and then add the same increment instruction so that the increment happens twice.
>
> I am still getting familiar with the llvm infrastructure and I am not sure if the above approach is even going to work. It'll be great if someone can suggest a better or more concrete way of doing the above transformation ? Is there already something similar in the source tree that can I look up for ideas ?
>
> Thanks!
> Malveeka
> ---------------------------------------------------------------------
> Intel Israel (74) Limited
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>
> _______________________________________________
> 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