[LLVMdev] Loop-Unroll optimization

Arushi Aggarwal arushi987 at gmail.com
Tue May 3 17:10:47 PDT 2011


1. You should run the passes in the same opt command, for passes like loops
which is an analysis pass provides results to the following passes.
2. You can pass a -debug flag to opt to see the some debugging info.

3. I tried this
 opt -mem2reg -loops  -loopsimplify -loop-unroll -unroll-count=3 -debug
loop.o -o tt.bc

and got this message.
 Loop Size = 14
  Can't unroll; loop not terminated by a conditional branch.

4. Looking at LoopUnroll.cpp showed a comment that said -loop-rotate helps,
so I used the following

 opt -mem2reg -loops  -loopsimplify -loop-rotate -lcssa -loop-unroll
-unroll-count=3 -debug loop.o -o tt.bc

Getting an unrolled version of the loop.

Arushi



On Tue, May 3, 2011 at 6:50 PM, Manish Gupta <mgupta.iitr at gmail.com> wrote:

> Even after all the sequence of commands below bit-code is not showing any
> effect of loop-unrolling
>
> *manish at manish:~/Test2$ llvm-gcc-4.2 -O2 -emit-llvm Hello.c -c -o Hello.bc
> *
> *manish at manish:~/Test2$ opt-2.8 -loops Hello.bc -o Hello1.bc*
> *manish at manish:~/Test2$ opt-2.8 -loopsimplify Hello1.bc -o Hello2.bc*
> *manish at manish:~/Test2$ opt-2.8 -indvars Hello2.bc -o Hello3.bc*
> *manish at manish:~/Test2$ opt-2.8 -loop-unroll Hello3.bc -o Hello4.bc*
> *manish at manish:~/Test2$ llvm-dis-2.8 Hello4.bc*
>
> My *Hello.c* looks like:
>   for(i=0; i< 1000; i++)
>     {
>       c[i] = a[i] + b[i];
>      }
>
>   printf("%d\n", c[999]);
> -------------------------------------------------
>
> and bit-code in *Hello4.bc*
> bb3:                                              ; preds = %bb3,
> %bb3.preheader
>   %i.17 = phi i32 [ %5, %bb3 ], [ 0, %bb3.preheader ]
>   %scevgep11 = getelementptr [1000 x i32]* %b, i32 0, i32 %i.17
>   %scevgep10 = getelementptr [1000 x i32]* %a, i32 0, i32 %i.17
>   %scevgep = getelementptr [1000 x i32]* %c, i32 0, i32 %i.17
>   %2 = load i32* %scevgep10, align 4
>   %3 = load i32* %scevgep11, align 4
>   %4 = add nsw i32 %3, %2
>   store i32 %4, i32* %scevgep, align 4
>   %5 = add nsw i32 %i.17, 1
>   %exitcond1 = icmp eq i32 %5, 1000
>   br i1 %exitcond1, label %bb5, label %bb3
>
> -----------------------------------------
>
> On Tue, May 3, 2011 at 12:32 PM, Arushi Aggarwal <arushi987 at gmail.com>wrote:
>
>> Hi,
>>
>> You might want to try running -loops -loop-simplify before loop unroll.
>>
>> From loop simplify.cpp
>>
>> This pass performs several transformations to transform natural loops into a00011 // simpler form, which makes subsequent analyses and transformations simpler and00012 // more effective.
>>
>>
>> Arushi
>>
>> On Tue, May 3, 2011 at 2:17 PM, Manish Gupta <mgupta.iitr at gmail.com>wrote:
>>
>>> You mean like
>>>
>>> *llvm-gcc-4.2 -O2 -emit-llvm Hello.c -c -o Hello.bc*
>>>
>>> But still i am not able to observe any effect on bit code by running
>>>
>>> *opt-2.8 -loop-unroll Hello.bc -o Hello_unroll.bc*
>>>
>>> On Tue, May 3, 2011 at 3:58 AM, Zakk <zakk0610 at gmail.com> wrote:
>>>
>>>> Hi, you need to run some optimization passes first. (like -O2)
>>>>
>>>> 2011/5/3 Manish Gupta <mgupta.iitr at gmail.com>
>>>>
>>>>> I just want to try loop-unroll and see corresponding changes in the
>>>>> bitcode file. For that any loop will do. Have you been able to test llvm
>>>>> loop-unroll successfully?
>>>>>
>>>>>
>>>>> On Mon, May 2, 2011 at 10:04 PM, Yuan Pengfei <coolypf at qq.com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> > The loop that I am trying it on is:
>>>>>> > for(i=0; i< 1000; i++)
>>>>>> > {
>>>>>> > c[i] = a[i] + b[i];
>>>>>> > }
>>>>>>
>>>>>> I can't find any benefit unrolling this loop.
>>>>>>
>>>>>> ------------------
>>>>>> Yuan Pengfei
>>>>>> Peking Unversity, China
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Best regards,
>>>> Kuan-Hsu
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110503/7e0b4a9b/attachment.html>


More information about the llvm-dev mailing list