[llvm-dev] Legacy Loop Pass Manager question

Bhatu via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 16 09:55:47 PDT 2018


Thanks for the pointers Michael. I'll investigate that and report back with
my findings.

On Thu, 16 Aug 2018, 21:29 Michael Kruse, <llvmdev at meinersbur.de> wrote:

> This usually happens if an analysis required by LoopInfo is not
> preserved. However, LoopDeletion, LoopUnrollAndJam and LoopUnroll's
> getAnalysisUsage all call getLoopAnalysisUsage, which add the same
> pass preservations.
>
> I'd debug and step through the loop manager's code to find what makes
> the cases different.
>
> Michael
>
> Am Do., 9. Aug. 2018 um 04:17 Uhr schrieb Bhatu via llvm-dev
> <llvm-dev at lists.llvm.org>:
> >
> > Hi,
> >
> > If we add multiple loop passes to the pass manager in
> PassManagerBuilder.cpp consecutively without any func/module pass in
> between, I used to think they would belong to the same loop pass manager.
> But it does not seem to be the case.
> >
> > For example for this code snippet
> >   PM.add(createIndVarSimplifyPass());        // Canonicalize indvars
> >   MPM.add(createLoopIdiomPass());             // Recognize idioms like
> memset.
> >   addExtensionsToPM(EP_LateLoopOptimizations, MPM);
> >   MPM.add(createLoopDeletionPass());          // Delete dead loops
> > ..
> >   if (!DisableUnrollLoops)
> >     MPM.add(createSimpleLoopUnrollPass(OptLevel));    // Unroll small
> loops
> >
> > I see -debug-pass=Structure output:
> >         Scalar Evolution Analysis
> >         Loop Pass Manager
> >           Induction Variable Simplification
> >           Recognize loop idioms
> >           Delete dead loops
> >           Unroll loops
> >         MergedLoadStoreMotion
> >
> > Which is in line to what I thought. However for this code snippet:
> >     if (EnableUnrollAndJam) {
> >       // Unroll and Jam. We do this before unroll but need to be in a
> separate
> >       // loop pass manager in order for the outer loop to be processed by
> >       // unroll and jam before the inner loop is unrolled.
> >       MPM.add(createLoopUnrollAndJamPass(OptLevel));
> >     }
> >
> >     MPM.add(createLoopUnrollPass(OptLevel));    // Unroll small loops
> >
> > I see:
> >       Loop-Closed SSA Form Pass
> >       Loop Pass Manager
> >         Unroll and Jam loops
> >       Loop Pass Manager
> >         Unroll loops
> >       Lazy Branch Probability Analysis
> >
> > Here two different loop pass managers were created. What is the
> difference in between these two cases? How was the loop pass manager split
> up in the second case?
> >
> >
> > --
> > Regards
> > Bhatu
> > _______________________________________________
> > LLVM Developers mailing list
> > llvm-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180816/0c1bd425/attachment.html>


More information about the llvm-dev mailing list