[llvm] r363287 - [clang][NewPM] Fix broken -O0 test from missing assumptions

Leonard Chan via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 14 22:56:34 PDT 2019


Thanks for bringing this up. I'm not sure how polly works, but *I think* I
found out the root of the problem.

For new pass manager runs, the FunctionAnalysisManagerModuleProxy is
registered in PassBuilder::crossRegisterProxies(). `opt` calls this in
`llvm::runPassPipeline()` but only if the new PM driver is used (which can
be triggered by passing `-passes='...'`). The command in question though
does not seem to be using the new PM, so the problem is that this new PM
pass is being used in a legacy PM run.

After some digging, it seems that the new PM AlwaysInlinerPass (and some
other new PM passes) are created and run in
`polly/trunk/lib/Transform/ScopInliner.cpp` as a part
of ScopInliner::runOnSCC(), which should be a legacy pass.

I'd double check this with Chandler or Philip, but I imagine the correct
thing to do is to instead change some of the body
of ScopInliner::runOnSCC() to 1) use the legacy PM classes (like
AlwaysInlinerLegacyPass), and 2) change ScopInliner to have the
AlwaysInliner as a pass dependency instead of invoking it directly in the
run.

- Leonard

On Fri, Jun 14, 2019 at 9:20 PM Michael Kruse <llvm-commits at meinersbur.de>
wrote:

> This made two regression tests in Polly crash:
>
> Debug\bin\opt.exe  -polly-process-unprofitable  -polly-remarks-minimal
>  -polly-use-llvm-names
>
> -polly-import-jscop-dir=C:\Users\meinersbur\src\llvm\tools\polly\test\ScopInliner
>  -polly-codegen-verify  -polly-detect-full-functions
> -polly-scop-inliner  -polly-scops -analyze
> -polly-invariant-load-hoisting
> Assertion failed: AnalysisPasses.count(PassT::ID()) && "This analysis
> pass was not registered prior to being queried", file
> C:\Users\meinersbur\src\llvm\include\llvm/IR/PassManager.h, line 778
>
> with PassT being FunctionAnalysisManagerModuleProxy. Where is this
> pass supposed to be registered?
>
> Michael
>
>
> Am Do., 13. Juni 2019 um 13:15 Uhr schrieb Leonard Chan via
> llvm-commits <llvm-commits at lists.llvm.org>:
> >
> > Author: leonardchan
> > Date: Thu Jun 13 11:18:40 2019
> > New Revision: 363287
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=363287&view=rev
> > Log:
> > [clang][NewPM] Fix broken -O0 test from missing assumptions
> >
> > Add an AssumptionCache callback to the InlineFuntionInfo used for the
> > AlwaysInlinerPass to match codegen of the AlwaysInlinerLegacyPass to
> generate
> > llvm.assume. This fixes CodeGen/builtin-movdir.c when new PM is enabled
> by
> > default.
> >
> > Differential Revision: https://reviews.llvm.org/D63170
> >
> > Modified:
> >     llvm/trunk/lib/Transforms/IPO/AlwaysInliner.cpp
> >
> > Modified: llvm/trunk/lib/Transforms/IPO/AlwaysInliner.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/AlwaysInliner.cpp?rev=363287&r1=363286&r2=363287&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Transforms/IPO/AlwaysInliner.cpp (original)
> > +++ llvm/trunk/lib/Transforms/IPO/AlwaysInliner.cpp Thu Jun 13 11:18:40
> 2019
> > @@ -31,8 +31,17 @@ using namespace llvm;
> >
> >  #define DEBUG_TYPE "inline"
> >
> > -PreservedAnalyses AlwaysInlinerPass::run(Module &M,
> ModuleAnalysisManager &) {
> > -  InlineFunctionInfo IFI;
> > +PreservedAnalyses AlwaysInlinerPass::run(Module &M,
> > +                                         ModuleAnalysisManager &MAM) {
> > +  // Add inline assumptions during code generation.
> > +  FunctionAnalysisManager &FAM =
> > +      MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
> > +  std::function<AssumptionCache &(Function &)> GetAssumptionCache =
> > +      [&](Function &F) -> AssumptionCache & {
> > +    return FAM.getResult<AssumptionAnalysis>(F);
> > +  };
> > +  InlineFunctionInfo IFI(/*cg=*/nullptr, &GetAssumptionCache);
> > +
> >    SmallSetVector<CallSite, 16> Calls;
> >    bool Changed = false;
> >    SmallVector<Function *, 16> InlinedFunctions;
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190614/e6961785/attachment.html>


More information about the llvm-commits mailing list