Anthony Danalis wrote:> Hello,
>
> I'm writing a new function pass, and I'm having trouble with
> getTripCount() in Loop. If I generate the bitcode for the test code
> with no optimization then getTripCount() returns NULL, but if I pass -
> O3 to the front-end then getTripCount() returns fine. My phase calls
> addRequiredID(LoopSimplifyID) from getAnalysisUsage() and I also tried
> putting -mem2reg at the front of the arguments to opt as advised in
> bug 2253 (http://llvm.org/bugs/show_bug.cgi?id=2253), but it still
> behaves the same.
> Am I missing something, or is there a bug associated with
> getTripCount() ?
getTripCount relies on there being a simple equality test for loop exit.
LoopSimplify might not be enough to guarantee that, try -indvars before
your pass. (And if that doesn't work, also try -loop-rotate.)
What indvars does is get the trip count the expensive way, by calling
into ScalarEvolution, and if possible rewrite the loop in a manner that
is trivial and can be picked up by LoopInfo::getTripCount().
There's nothing stopping you from calling into scalar evolutions
directly, if for whatever reason you want to be able to analyze loops in
otherwise unoptimized code.
Nick
>
> thanks,
> Anthony
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>