Frances Tzeng via llvm-dev
2015-Oct-12 23:13 UTC
[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?
Thanks,
Frances
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20151012/fca35421/attachment.html>
Hal Finkel via llvm-dev
2015-Oct-16 04:35 UTC
[llvm-dev] question about llvm partial unrolling/runtime unrolling
----- Original Message -----> 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/20151015/965744d4/attachment.html>
Frances Tzeng via llvm-dev
2015-Oct-16 16:19 UTC
[llvm-dev] question about llvm partial unrolling/runtime unrolling
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>
Reasonably Related Threads
- question about llvm partial unrolling/runtime unrolling
- [LLVMdev] How to call some transformation passes (LoopRotate and LoopUnroll) from my own pass
- Loop Unrolling Fail in Simple Vectorized loop
- Loop Unrolling Fail in Simple Vectorized loop
- Loop Unrolling Fail in Simple Vectorized loop