From 2d950f36ee1611e57134992f2b9d1f8525c70b44 Mon Sep 17 00:00:00 2001 From: Philip Pfaffe Date: Tue, 4 Apr 2017 10:01:53 +0000 Subject: [PATCH] [Polly][NewPM] Pull references to the legacy PM interface from utilities and helpers Summary: A couple of the utilities used to analyze or build IR make explicit use of the legacy PM on their interface, to access analysis results. This patch removes the legacy PM from the interface, and just passes the required results directly. This shouldn't introduce any function changes, although the API technically allowed to obtain two different analysis results before, one passed by reference and one through the PM. I don't believe that was ever intended, however. Reviewers: grosser, Meinersbur Reviewed By: grosser Subscribers: nemanjai, pollydev, llvm-commits Tags: #polly Differential Revision: https://reviews.llvm.org/D31653 llvm-svn: 299423 --- polly/include/polly/CodeGen/IslNodeBuilder.h | 5 ++--- polly/include/polly/CodeGen/LoopGenerators.h | 12 ++++-------- polly/include/polly/CodeGen/Utils.h | 9 +++++++-- polly/lib/CodeGen/CodeGeneration.cpp | 4 ++-- polly/lib/CodeGen/IslNodeBuilder.cpp | 4 ++-- polly/lib/CodeGen/LoopGenerators.cpp | 4 ++-- polly/lib/CodeGen/PPCGCodeGeneration.cpp | 9 ++++----- polly/lib/CodeGen/Utils.cpp | 7 +++---- 8 files changed, 26 insertions(+), 28 deletions(-) diff --git a/polly/include/polly/CodeGen/IslNodeBuilder.h b/polly/include/polly/CodeGen/IslNodeBuilder.h index 159ee26..28b821b 100644 --- a/polly/include/polly/CodeGen/IslNodeBuilder.h +++ b/polly/include/polly/CodeGen/IslNodeBuilder.h @@ -60,7 +60,7 @@ isl_stat addReferencesFromStmt(const ScopStmt *Stmt, void *UserPtr, class IslNodeBuilder { public: - IslNodeBuilder(PollyIRBuilder &Builder, ScopAnnotator &Annotator, Pass *P, + IslNodeBuilder(PollyIRBuilder &Builder, ScopAnnotator &Annotator, const DataLayout &DL, LoopInfo &LI, ScalarEvolution &SE, DominatorTree &DT, Scop &S, BasicBlock *StartBlock) : S(S), Builder(Builder), Annotator(Annotator), @@ -68,7 +68,7 @@ public: StartBlock), BlockGen(Builder, LI, SE, DT, ScalarMap, EscapeMap, ValueMap, &ExprBuilder, StartBlock), - RegionGen(BlockGen), P(P), DL(DL), LI(LI), SE(SE), DT(DT), + RegionGen(BlockGen), DL(DL), LI(LI), SE(SE), DT(DT), StartBlock(StartBlock) {} virtual ~IslNodeBuilder() = default; @@ -138,7 +138,6 @@ protected: /// The generator used to copy a non-affine region. RegionGenerator RegionGen; - Pass *const P; const DataLayout &DL; LoopInfo &LI; ScalarEvolution &SE; diff --git a/polly/include/polly/CodeGen/LoopGenerators.h b/polly/include/polly/CodeGen/LoopGenerators.h index 023ebbf..5033915 100644 --- a/polly/include/polly/CodeGen/LoopGenerators.h +++ b/polly/include/polly/CodeGen/LoopGenerators.h @@ -50,9 +50,8 @@ using namespace llvm; /// /// @return Value* The newly created induction variable for this loop. Value *createLoop(Value *LowerBound, Value *UpperBound, Value *Stride, - PollyIRBuilder &Builder, Pass *P, LoopInfo &LI, - DominatorTree &DT, BasicBlock *&ExitBlock, - ICmpInst::Predicate Predicate, + PollyIRBuilder &Builder, LoopInfo &LI, DominatorTree &DT, + BasicBlock *&ExitBlock, ICmpInst::Predicate Predicate, ScopAnnotator *Annotator = NULL, bool Parallel = false, bool UseGuard = true); @@ -99,9 +98,9 @@ Value *createLoop(Value *LowerBound, Value *UpperBound, Value *Stride, class ParallelLoopGenerator { public: /// Create a parallel loop generator for the current function. - ParallelLoopGenerator(PollyIRBuilder &Builder, Pass *P, LoopInfo &LI, + ParallelLoopGenerator(PollyIRBuilder &Builder, LoopInfo &LI, DominatorTree &DT, const DataLayout &DL) - : Builder(Builder), P(P), LI(LI), DT(DT), + : Builder(Builder), LI(LI), DT(DT), LongType( Type::getIntNTy(Builder.getContext(), DL.getPointerSizeInBits())), M(Builder.GetInsertBlock()->getParent()->getParent()) {} @@ -131,9 +130,6 @@ private: /// The IR builder we use to create instructions. PollyIRBuilder &Builder; - /// A pass pointer to update analysis information. - Pass *P; - /// The loop info of the current function we need to update. LoopInfo &LI; diff --git a/polly/include/polly/CodeGen/Utils.h b/polly/include/polly/CodeGen/Utils.h index 3be2cfc..65047aa 100644 --- a/polly/include/polly/CodeGen/Utils.h +++ b/polly/include/polly/CodeGen/Utils.h @@ -17,6 +17,9 @@ namespace llvm { class Pass; class Value; class BasicBlock; +class DominatorTree; +class RegionInfo; +class LoopInfo; } // namespace llvm namespace polly { @@ -55,7 +58,9 @@ class Scop; /// @param RTC The runtime condition checked before executing the new SCoP. /// /// @return The 'StartBlock' to which new code can be added. -llvm::BasicBlock *executeScopConditionally(Scop &S, llvm::Pass *P, - llvm::Value *RTC); +llvm::BasicBlock *executeScopConditionally(Scop &S, llvm::Value *RTC, + llvm::DominatorTree &DT, + llvm::RegionInfo &RI, + llvm::LoopInfo &LI); } // namespace polly #endif diff --git a/polly/lib/CodeGen/CodeGeneration.cpp b/polly/lib/CodeGen/CodeGeneration.cpp index 3299b66..835f1d2 100644 --- a/polly/lib/CodeGen/CodeGeneration.cpp +++ b/polly/lib/CodeGen/CodeGeneration.cpp @@ -145,10 +145,10 @@ public: // which may introduce scalar dependences that prevent us from correctly // code generating this scop. BasicBlock *StartBlock = - executeScopConditionally(S, this, Builder.getTrue()); + executeScopConditionally(S, Builder.getTrue(), *DT, *RI, *LI); auto *SplitBlock = StartBlock->getSinglePredecessor(); - IslNodeBuilder NodeBuilder(Builder, Annotator, this, *DL, *LI, *SE, *DT, S, + IslNodeBuilder NodeBuilder(Builder, Annotator, *DL, *LI, *SE, *DT, S, StartBlock); if (PerfMonitoring) { diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp index 1d2f546..739d1f7 100644 --- a/polly/lib/CodeGen/IslNodeBuilder.cpp +++ b/polly/lib/CodeGen/IslNodeBuilder.cpp @@ -498,7 +498,7 @@ void IslNodeBuilder::createForSequential(__isl_take isl_ast_node *For, // omit the GuardBB in front of the loop. bool UseGuardBB = !SE.isKnownPredicate(Predicate, SE.getSCEV(ValueLB), SE.getSCEV(ValueUB)); - IV = createLoop(ValueLB, ValueUB, ValueInc, Builder, P, LI, DT, ExitBlock, + IV = createLoop(ValueLB, ValueUB, ValueInc, Builder, LI, DT, ExitBlock, Predicate, &Annotator, Parallel, UseGuardBB); IDToValue[IteratorID] = IV; @@ -625,7 +625,7 @@ void IslNodeBuilder::createForParallel(__isl_take isl_ast_node *For) { } ValueMapT NewValues; - ParallelLoopGenerator ParallelLoopGen(Builder, P, LI, DT, DL); + ParallelLoopGenerator ParallelLoopGen(Builder, LI, DT, DL); IV = ParallelLoopGen.createParallelLoop(ValueLB, ValueUB, ValueInc, SubtreeValues, NewValues, &LoopBody); diff --git a/polly/lib/CodeGen/LoopGenerators.cpp b/polly/lib/CodeGen/LoopGenerators.cpp index fe7e953..a1c1b71 100644 --- a/polly/lib/CodeGen/LoopGenerators.cpp +++ b/polly/lib/CodeGen/LoopGenerators.cpp @@ -50,7 +50,7 @@ static cl::opt // 'polly.indvar_next' as well as the condition to check if we execute another // iteration of the loop. After the loop has finished, we branch to ExitBB. Value *polly::createLoop(Value *LB, Value *UB, Value *Stride, - PollyIRBuilder &Builder, Pass *P, LoopInfo &LI, + PollyIRBuilder &Builder, LoopInfo &LI, DominatorTree &DT, BasicBlock *&ExitBB, ICmpInst::Predicate Predicate, ScopAnnotator *Annotator, bool Parallel, @@ -360,7 +360,7 @@ Value *ParallelLoopGenerator::createSubFn(Value *Stride, AllocaInst *StructData, Builder.CreateBr(CheckNextBB); Builder.SetInsertPoint(&*--Builder.GetInsertPoint()); - IV = createLoop(LB, UB, Stride, Builder, P, LI, DT, AfterBB, + IV = createLoop(LB, UB, Stride, Builder, LI, DT, AfterBB, ICmpInst::ICMP_SLE, nullptr, true, /* UseGuard */ false); BasicBlock::iterator LoopBody = Builder.GetInsertPoint(); diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp index 6d28a8d..2bd1b42 100644 --- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -143,11 +143,11 @@ static __isl_give isl_id_to_ast_expr *pollyBuildAstExprForStmt( /// @see GPUNodeBuilder::createUser class GPUNodeBuilder : public IslNodeBuilder { public: - GPUNodeBuilder(PollyIRBuilder &Builder, ScopAnnotator &Annotator, Pass *P, + GPUNodeBuilder(PollyIRBuilder &Builder, ScopAnnotator &Annotator, const DataLayout &DL, LoopInfo &LI, ScalarEvolution &SE, DominatorTree &DT, Scop &S, BasicBlock *StartBlock, gpu_prog *Prog) - : IslNodeBuilder(Builder, Annotator, P, DL, LI, SE, DT, S, StartBlock), + : IslNodeBuilder(Builder, Annotator, DL, LI, SE, DT, S, StartBlock), Prog(Prog) { getExprBuilder().setIDToSAI(&IDToSAI); } @@ -1543,7 +1543,6 @@ void GPUNodeBuilder::createKernelFunction(ppcg_kernel *Kernel, BasicBlock *PrevBlock = Builder.GetInsertBlock(); auto EntryBlock = BasicBlock::Create(Builder.getContext(), "entry", FN); - DominatorTree &DT = P->getAnalysis().getDomTree(); DT.addNewBlock(EntryBlock, PrevBlock); Builder.SetInsertPoint(EntryBlock); @@ -2403,9 +2402,9 @@ public: // which may introduce scalar dependences that prevent us from correctly // code generating this scop. BasicBlock *StartBlock = - executeScopConditionally(*S, this, Builder.getTrue()); + executeScopConditionally(*S, Builder.getTrue(), *DT, *RI, *LI); - GPUNodeBuilder NodeBuilder(Builder, Annotator, this, *DL, *LI, *SE, *DT, *S, + GPUNodeBuilder NodeBuilder(Builder, Annotator, *DL, *LI, *SE, *DT, *S, StartBlock, Prog); // TODO: Handle LICM diff --git a/polly/lib/CodeGen/Utils.cpp b/polly/lib/CodeGen/Utils.cpp index 9aa22da..31ec4fc 100644 --- a/polly/lib/CodeGen/Utils.cpp +++ b/polly/lib/CodeGen/Utils.cpp @@ -76,12 +76,11 @@ static BasicBlock *splitEdge(BasicBlock *Prev, BasicBlock *Succ, return MiddleBlock; } -BasicBlock *polly::executeScopConditionally(Scop &S, Pass *P, Value *RTC) { +BasicBlock *polly::executeScopConditionally(Scop &S, Value *RTC, + DominatorTree &DT, RegionInfo &RI, + LoopInfo &LI) { Region &R = S.getRegion(); PollyIRBuilder Builder(S.getEntry()); - DominatorTree &DT = P->getAnalysis().getDomTree(); - RegionInfo &RI = P->getAnalysis().getRegionInfo(); - LoopInfo &LI = P->getAnalysis().getLoopInfo(); // Before: // -- 2.7.4