[llvm-dev] question about llvm partial unrolling/runtime unrolling

Frances Tzeng via llvm-dev llvm-dev at lists.llvm.org
Fri Oct 16 09:19:25 PDT 2015


Hi Hal,

I did

opt.exe -S -debug -loop-unroll -unroll-runtime=true -unroll-count=4
 csShader.ll

and it prints out:

Args: opt.exe -S -debug -loop-unroll -unroll-runtime=true -unroll-count=4
csShader.ll

Loop Unroll: F[build_cs_5_0] Loop %loop_entry
  Loop Size = 82
  partially unrolling with count: 1


Thanks,
Frances



On Thu, Oct 15, 2015 at 9:35 PM, Hal Finkel <hfinkel at anl.gov> wrote:

>
> ------------------------------
>
> *From: *"Frances Tzeng via llvm-dev" <llvm-dev at lists.llvm.org>
> *To: *llvm-dev at lists.llvm.org
> *Sent: *Monday, October 12, 2015 6:13:25 PM
> *Subject: *[llvm-dev] question about llvm partial unrolling/runtime
> unrolling
>
> Hi,
>
> I am trying to do loop unrolling with loops that don't have constant loop
> counter. It is highly appreciated if anyone can help me on this.
>
>
> What I want to do is to turn
>
>     loop (n)
>     {
>       <loop body>
>     }
>
> into
>
>     loop (n/4)
>     {
>       <loop body>
>       <loop body>
>       <loop body>
>       <loop body>
>     }
>     loop (n%4)
>     {
>       <loop body>
>     }
>
> I set allowPartial and Runtime to both 1 (
> llvm::createLoopUnrollPass(Threshold, count, 1, 1) )
> Also overload the UnrollingPreferences structure to gives values to all
> the Partial* members, but the loop still doesn't unroll.
>
> The unrolling process hits this code in LoopUnrollRuntime.cpp
>
>   // Only unroll loops with a computable trip count and the trip count
> needs
>   // to be an int value (allowing a pointer type is a TODO item)
>   const SCEV *BECountSC = SE->getBackedgeTakenCount(L);
>   if (isa<SCEVCouldNotCompute>(BECountSC) ||
>       !BECountSC->getType()->isIntegerTy())
>     return false;
>
> BECountSC=0xcccccccc and returns false here.
>
> Based on the comments it looks like I still need a constant loop counter.
> Is there a way to unroll with non-constant loop counter as in the example
> above?
>
> Computable is not the same as constant. With runtime loop unrolling
> enabled, you can certainly unroll a loop with a runtime trip count. If you
> run with -debug=loop-unroll, what does it say regarding your loop?
>
>  -Hal
>
>
> Thanks,
> Frances
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151016/02f0690c/attachment.html>


More information about the llvm-dev mailing list