summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/include/polly/CodeGen/IslNodeBuilder.h5
-rw-r--r--polly/include/polly/CodeGen/LoopGenerators.h12
-rw-r--r--polly/include/polly/CodeGen/Utils.h9
-rw-r--r--polly/lib/CodeGen/CodeGeneration.cpp4
-rw-r--r--polly/lib/CodeGen/IslNodeBuilder.cpp4
-rw-r--r--polly/lib/CodeGen/LoopGenerators.cpp4
-rw-r--r--polly/lib/CodeGen/PPCGCodeGeneration.cpp9
-rw-r--r--polly/lib/CodeGen/Utils.cpp7
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:
//
OpenPOWER on IntegriCloud