Skip to content

Commit

Permalink
[Polly][NewPM] Pull references to the legacy PM interface from utilit…
Browse files Browse the repository at this point in the history
…ies 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
  • Loading branch information
pfaffe committed Apr 4, 2017
1 parent 43ba525 commit 2d950f3
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 28 deletions.
5 changes: 2 additions & 3 deletions polly/include/polly/CodeGen/IslNodeBuilder.h
Expand Up @@ -60,15 +60,15 @@ 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),
ExprBuilder(S, Builder, IDToValue, ValueMap, DL, SE, DT, LI,
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;
Expand Down Expand Up @@ -138,7 +138,6 @@ class IslNodeBuilder {
/// The generator used to copy a non-affine region.
RegionGenerator RegionGen;

Pass *const P;
const DataLayout &DL;
LoopInfo &LI;
ScalarEvolution &SE;
Expand Down
12 changes: 4 additions & 8 deletions polly/include/polly/CodeGen/LoopGenerators.h
Expand Up @@ -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);

Expand Down Expand Up @@ -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()) {}
Expand Down Expand Up @@ -131,9 +130,6 @@ class ParallelLoopGenerator {
/// 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;

Expand Down
9 changes: 7 additions & 2 deletions polly/include/polly/CodeGen/Utils.h
Expand Up @@ -17,6 +17,9 @@ namespace llvm {
class Pass;
class Value;
class BasicBlock;
class DominatorTree;
class RegionInfo;
class LoopInfo;
} // namespace llvm

namespace polly {
Expand Down Expand Up @@ -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
4 changes: 2 additions & 2 deletions polly/lib/CodeGen/CodeGeneration.cpp
Expand Up @@ -145,10 +145,10 @@ class CodeGeneration : public ScopPass {
// 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) {
Expand Down
4 changes: 2 additions & 2 deletions polly/lib/CodeGen/IslNodeBuilder.cpp
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions polly/lib/CodeGen/LoopGenerators.cpp
Expand Up @@ -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,
Expand Down Expand Up @@ -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();
Expand Down
9 changes: 4 additions & 5 deletions polly/lib/CodeGen/PPCGCodeGeneration.cpp
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -2403,9 +2402,9 @@ class PPCGCodeGeneration : public ScopPass {
// 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
Expand Down
7 changes: 3 additions & 4 deletions polly/lib/CodeGen/Utils.cpp
Expand Up @@ -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:
//
Expand Down

0 comments on commit 2d950f3

Please sign in to comment.