diff options
-rw-r--r-- | polly/include/polly/CodeGen/IslNodeBuilder.h | 5 | ||||
-rw-r--r-- | polly/include/polly/CodeGen/LoopGenerators.h | 12 | ||||
-rw-r--r-- | polly/include/polly/CodeGen/Utils.h | 9 | ||||
-rw-r--r-- | polly/lib/CodeGen/CodeGeneration.cpp | 4 | ||||
-rw-r--r-- | polly/lib/CodeGen/IslNodeBuilder.cpp | 4 | ||||
-rw-r--r-- | polly/lib/CodeGen/LoopGenerators.cpp | 4 | ||||
-rw-r--r-- | polly/lib/CodeGen/PPCGCodeGeneration.cpp | 9 | ||||
-rw-r--r-- | 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 159ee26a21d..28b821b669e 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 023ebbf9f37..503391569ab 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 3be2cfcaacb..65047aaf77c 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 3299b6662eb..835f1d27dba 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 1d2f546c46b..739d1f7453e 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 fe7e95368c3..a1c1b71941f 100644 --- a/polly/lib/CodeGen/LoopGenerators.cpp +++ b/polly/lib/CodeGen/LoopGenerators.cpp @@ -50,7 +50,7 @@ static cl::opt<int> // '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 6d28a8d0568..2bd1b425811 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<DominatorTreeWrapperPass>().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 9aa22dae829..31ec4fcab4b 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<DominatorTreeWrapperPass>().getDomTree(); - RegionInfo &RI = P->getAnalysis<RegionInfoPass>().getRegionInfo(); - LoopInfo &LI = P->getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); // Before: // |