[polly] r215121 - Make used analysis passes explicit

Johannes Doerfert jdoerfert at codeaurora.org
Thu Aug 7 15:20:59 PDT 2014


Attached a fix but I can't test it until I get home.

If somebody could check if this compiles we could apply it earlier.

-----Original Message-----
From: llvm-commits-bounces at cs.uiuc.edu
[mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Johannes Doerfert
Sent: Thursday, August 07, 2014 10:15 AM
To: llvm-commits at cs.uiuc.edu
Subject: [polly] r215121 - Make used analysis passes explicit

Author: jdoerfert
Date: Thu Aug  7 12:14:54 2014
New Revision: 215121

URL: http://llvm.org/viewvc/llvm-project?rev=215121&view=rev
Log:
Make used analysis passes explicit

  Use the explicit analysis if possible, only for splitBlock we will
continue
  to use the Pass * argument. This change allows us to remove the
getAnalysis
  calls from the code generation.

Modified:
    polly/trunk/include/polly/CodeGen/BlockGenerators.h
    polly/trunk/include/polly/CodeGen/LoopGenerators.h
    polly/trunk/lib/CodeGen/BlockGenerators.cpp
    polly/trunk/lib/CodeGen/IslCodeGeneration.cpp
    polly/trunk/lib/CodeGen/LoopGenerators.cpp

Modified: polly/trunk/include/polly/CodeGen/BlockGenerators.h
URL:
http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/CodeGen/BlockG
enerators.h?rev=215121&r1=215120&r2=215121&view=diff
============================================================================
==
--- polly/trunk/include/polly/CodeGen/BlockGenerators.h (original)
+++ polly/trunk/include/polly/CodeGen/BlockGenerators.h Thu Aug  7 
+++ 12:14:54 2014
@@ -67,22 +67,23 @@ class BlockGenerator {
 public:
   /// @brief Generate a new BasicBlock for a ScopStmt.
   ///
-  /// @param Builder     The LLVM-IR Builder used to generate the
statement. The
-  ///                    code is generated at the location, the Builder
points
-  ///                    to.
-  /// @param Stmt        The statement to code generate.
-  /// @param GlobalMap   A map that defines for certain Values referenced
from
-  ///                    the original code new Values they should be
replaced
-  ///                    with.
-  /// @param P           A reference to the pass this function is called
from.
-  ///                    The pass is needed to update other analysis.
+  /// @param Builder   The LLVM-IR Builder used to generate the statement.
The
+  ///                  code is generated at the location, the Builder
points to.
+  /// @param Stmt      The statement to code generate.
+  /// @param GlobalMap A map that defines for certain Values referenced
from the
+  ///                  original code new Values they should be replaced
with.
+  /// @param P         A reference to the pass this function is called
from.
+  ///                  The pass is needed to update other analysis.
+  /// @param LI        The loop info for the current function
+  /// @param SE        The scalar evolution info for the current function
   /// @param Build       The AST build with the new schedule.
   /// @param ExprBuilder An expression builder to generate new access
functions.
   static void generate(PollyIRBuilder &Builder, ScopStmt &Stmt,
                        ValueMapT &GlobalMap, LoopToScevMapT &LTS, Pass *P,
+                       LoopInfo &LI, ScalarEvolution &SE,
                        __isl_keep isl_ast_build *Build = nullptr,
                        IslExprBuilder *ExprBuilder = nullptr) {
-    BlockGenerator Generator(Builder, Stmt, P, Build, ExprBuilder);
+    BlockGenerator Generator(Builder, Stmt, P, LI, SE, Build, 
+ ExprBuilder);
     Generator.copyBB(GlobalMap, LTS);
   }
 
@@ -90,12 +91,14 @@ protected:
   PollyIRBuilder &Builder;
   ScopStmt &Statement;
   Pass *P;
+  LoopInfo &LI;
   ScalarEvolution &SE;
   isl_ast_build *Build;
   IslExprBuilder *ExprBuilder;
 
-  BlockGenerator(PollyIRBuilder &B, ScopStmt &Stmt, Pass *P,
-                 __isl_keep isl_ast_build *Build, IslExprBuilder
*ExprBuilder);
+  BlockGenerator(PollyIRBuilder &B, ScopStmt &Stmt, Pass *P, LoopInfo &LI,
+                 ScalarEvolution &SE, __isl_keep isl_ast_build *Build,
+                 IslExprBuilder *ExprBuilder);
 
   /// @brief Get the new version of a Value.
   ///
@@ -204,11 +207,15 @@ public:
   ///                   loop containing the statemenet.
   /// @param P          A reference to the pass this function is called
from.
   ///                   The pass is needed to update other analysis.
+  /// @param LI        The loop info for the current function
+  /// @param SE        The scalar evolution info for the current function
   static void generate(PollyIRBuilder &B, ScopStmt &Stmt,
                        VectorValueMapT &GlobalMaps,
                        std::vector<LoopToScevMapT> &VLTS,
-                       __isl_keep isl_map *Schedule, Pass *P) {
-    VectorBlockGenerator Generator(B, GlobalMaps, VLTS, Stmt, Schedule, P);
+                       __isl_keep isl_map *Schedule, Pass *P, LoopInfo &LI,
+                       ScalarEvolution &SE) {
+    VectorBlockGenerator Generator(B, GlobalMaps, VLTS, Stmt, Schedule, P,
LI,
+                                   SE);
     Generator.copyBB();
   }
 
@@ -244,7 +251,8 @@ private:
 
   VectorBlockGenerator(PollyIRBuilder &B, VectorValueMapT &GlobalMaps,
                        std::vector<LoopToScevMapT> &VLTS, ScopStmt &Stmt,
-                       __isl_keep isl_map *Schedule, Pass *P);
+                       __isl_keep isl_map *Schedule, Pass *P, LoopInfo &LI,
+                       ScalarEvolution &SE);
 
   int getVectorWidth();
 

Modified: polly/trunk/include/polly/CodeGen/LoopGenerators.h
URL:
http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/CodeGen/LoopGe
nerators.h?rev=215121&r1=215120&r2=215121&view=diff
============================================================================
==
--- polly/trunk/include/polly/CodeGen/LoopGenerators.h (original)
+++ polly/trunk/include/polly/CodeGen/LoopGenerators.h Thu Aug  7 
+++ 12:14:54 2014
@@ -36,6 +36,8 @@ using namespace llvm;
 /// @param Builder    The builder used to create the loop.
 /// @param P          A pointer to the pass that uses this function. It is
used
 ///                   to update analysis information.
+/// @param LI         The loop info for the current function
+/// @param DT         The dominator tree we need to update
 /// @param ExitBlock  The block the loop will exit to.
 /// @param Predicate  The predicate used to generate the upper loop bound.
 /// @param Annotator  This function can (optionally) take a LoopAnnotator
which @@ -43,7 +45,8 @@ using namespace llvm;
 /// @param Parallel   If this loop should be marked parallel in the
Annotator.
 /// @return Value*    The newly created induction variable for this loop.
 Value *createLoop(Value *LowerBound, Value *UpperBound, Value *Stride,
-                  PollyIRBuilder &Builder, Pass *P, BasicBlock *&ExitBlock,
+                  PollyIRBuilder &Builder, Pass *P, LoopInfo &LI,
+                  DominatorTree &DT, BasicBlock *&ExitBlock,
                   ICmpInst::Predicate Predicate,
                   LoopAnnotator *Annotator = NULL, bool Parallel = false);
 

Modified: polly/trunk/lib/CodeGen/BlockGenerators.cpp
URL:
http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/BlockGenerators.
cpp?rev=215121&r1=215120&r2=215121&view=diff
============================================================================
==
--- polly/trunk/lib/CodeGen/BlockGenerators.cpp (original)
+++ polly/trunk/lib/CodeGen/BlockGenerators.cpp Thu Aug  7 12:14:54 2014
@@ -67,10 +67,11 @@ bool polly::canSynthesize(const Instruct  }
 
 BlockGenerator::BlockGenerator(PollyIRBuilder &B, ScopStmt &Stmt, Pass *P,
+                               LoopInfo &LI, ScalarEvolution &SE,
                                isl_ast_build *Build,
                                IslExprBuilder *ExprBuilder)
-    : Builder(B), Statement(Stmt), P(P),
SE(P->getAnalysis<ScalarEvolution>()),
-      Build(Build), ExprBuilder(ExprBuilder) {}
+    : Builder(B), Statement(Stmt), P(P), LI(LI), SE(SE), Build(Build),
+      ExprBuilder(ExprBuilder) {}
 
 Value *BlockGenerator::lookupAvailableValue(const Value *Old, ValueMapT
&BBMap,
                                             ValueMapT &GlobalMap) const {
@@ -209,7 +210,7 @@ Value *BlockGenerator::generateLocationA
 }
 
 Loop *BlockGenerator::getLoopForInst(const llvm::Instruction *Inst) {
-  return P->getAnalysis<LoopInfo>().getLoopFor(Inst->getParent());
+  return LI.getLoopFor(Inst->getParent());
 }
 
 Value *BlockGenerator::generateScalarLoad(const LoadInst *Load, @@ -282,14
+283,12 @@ void BlockGenerator::copyBB(ValueMapT &G
     copyInstruction(&Inst, BBMap, GlobalMap, LTS);  }
 
-VectorBlockGenerator::VectorBlockGenerator(PollyIRBuilder &B,
-                                           VectorValueMapT &GlobalMaps,
-                                           std::vector<LoopToScevMapT>
&VLTS,
-                                           ScopStmt &Stmt,
-                                           __isl_keep isl_map *Schedule,
-                                           Pass *P)
-    : BlockGenerator(B, Stmt, P, nullptr, nullptr), GlobalMaps(GlobalMaps),
-      VLTS(VLTS), Schedule(Schedule) {
+VectorBlockGenerator::VectorBlockGenerator(
+    PollyIRBuilder &B, VectorValueMapT &GlobalMaps,
+    std::vector<LoopToScevMapT> &VLTS, ScopStmt &Stmt,
+    __isl_keep isl_map *Schedule, Pass *P, LoopInfo &LI, ScalarEvolution
&SE)
+    : BlockGenerator(B, Stmt, P, LI, SE, nullptr, nullptr),
+      GlobalMaps(GlobalMaps), VLTS(VLTS), Schedule(Schedule) {
   assert(GlobalMaps.size() > 1 && "Only one vector lane found");
   assert(Schedule && "No statement domain provided");  }

Modified: polly/trunk/lib/CodeGen/IslCodeGeneration.cpp
URL:
http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/IslCodeGeneratio
n.cpp?rev=215121&r1=215120&r2=215121&view=diff
============================================================================
==
--- polly/trunk/lib/CodeGen/IslCodeGeneration.cpp (original)
+++ polly/trunk/lib/CodeGen/IslCodeGeneration.cpp Thu Aug  7 12:14:54 
+++ 2014
@@ -58,9 +58,10 @@ using namespace llvm;
 
 class IslNodeBuilder {
 public:
-  IslNodeBuilder(PollyIRBuilder &Builder, LoopAnnotator &Annotator, Pass
*P)
+  IslNodeBuilder(PollyIRBuilder &Builder, LoopAnnotator &Annotator, Pass
*P,
+                 LoopInfo &LI, ScalarEvolution &SE, DominatorTree &DT)
       : Builder(Builder), Annotator(Annotator), ExprBuilder(Builder,
IDToValue),
-        P(P) {}
+        P(P), LI(LI), SE(SE), DT(DT) {}
 
   /// @brief Add the mappings from array id's to array llvm::Value's.
   void addMemoryAccesses(Scop &S);
@@ -73,6 +74,9 @@ private:
   LoopAnnotator &Annotator;
   IslExprBuilder ExprBuilder;
   Pass *P;
+  LoopInfo &LI;
+  ScalarEvolution &SE;
+  DominatorTree &DT;
 
   // This maps an isl_id* to the Value* it has in the generated program.
For now
   // on, the only isl_ids that are stored here are the newly calculated
loop @@ -239,7 +243,7 @@ void IslNodeBuilder::createUserVector(__
   isl_map *S = isl_map_from_union_map(Schedule);
 
   createSubstitutionsVector(Expr, Stmt, VectorMap, VLTS, IVS, IteratorID);
-  VectorBlockGenerator::generate(Builder, *Stmt, VectorMap, VLTS, S, P);
+  VectorBlockGenerator::generate(Builder, *Stmt, VectorMap, VLTS, S, P, 
+ LI, SE);
 
   isl_map_free(S);
   isl_id_free(Id);
@@ -350,8 +354,8 @@ void IslNodeBuilder::createForSequential
   if (MaxType != ValueInc->getType())
     ValueInc = Builder.CreateSExt(ValueInc, MaxType);
 
-  IV = createLoop(ValueLB, ValueUB, ValueInc, Builder, P, ExitBlock,
Predicate,
-                  &Annotator, Parallel);
+  IV = createLoop(ValueLB, ValueUB, ValueInc, Builder, P, LI, DT,
ExitBlock,
+                  Predicate, &Annotator, Parallel);
   IDToValue[IteratorID] = IV;
 
   create(Body);
@@ -395,12 +399,10 @@ void IslNodeBuilder::createIf(__isl_take
   BasicBlock *ThenBB = BasicBlock::Create(Context, "polly.then", F);
   BasicBlock *ElseBB = BasicBlock::Create(Context, "polly.else", F);
 
-  DominatorTree &DT =
P->getAnalysis<DominatorTreeWrapperPass>().getDomTree();
   DT.addNewBlock(ThenBB, CondBB);
   DT.addNewBlock(ElseBB, CondBB);
   DT.changeImmediateDominator(MergeBB, CondBB);
 
-  LoopInfo &LI = P->getAnalysis<LoopInfo>();
   Loop *L = LI.getLoopFor(CondBB);
   if (L) {
     L->addBasicBlockToLoop(ThenBB, LI.getBase()); @@ -490,7 +492,7 @@ void
IslNodeBuilder::createUser(__isl_ta
   Stmt = (ScopStmt *)isl_id_get_user(Id);
 
   createSubstitutions(Expr, Stmt, VMap, LTS);
-  BlockGenerator::generate(Builder, *Stmt, VMap, LTS, P,
+  BlockGenerator::generate(Builder, *Stmt, VMap, LTS, P, LI, SE,
                            IslAstInfo::getBuild(User), &ExprBuilder);
 
   isl_ast_node_free(User);
@@ -529,7 +531,7 @@ void IslNodeBuilder::create(__isl_take i  }
 
 void IslNodeBuilder::addParameters(__isl_take isl_set *Context) {
-  SCEVExpander Rewriter(P->getAnalysis<ScalarEvolution>(), "polly");
+  SCEVExpander Rewriter(SE, "polly");
 
   for (unsigned i = 0; i < isl_set_dim(Context, isl_dim_param); ++i) {
     isl_id *Id;
@@ -567,7 +569,10 @@ public:
   IslCodeGeneration() : ScopPass(ID) {}
 
   bool runOnScop(Scop &S) {
+    LoopInfo &LI = getAnalysis<LoopInfo>();
     IslAstInfo &AstInfo = getAnalysis<IslAstInfo>();
+    ScalarEvolution &SE = getAnalysis<ScalarEvolution>();
+    DominatorTree &DT = 
+ getAnalysis<DominatorTreeWrapperPass>().getDomTree();
 
     assert(!S.getRegion().isTopLevelRegion() &&
            "Top level regions are not supported"); @@ -581,7 +586,7 @@
public:
                            polly::IRInserter(Annotator));
     Builder.SetInsertPoint(StartBlock->begin());
 
-    IslNodeBuilder NodeBuilder(Builder, Annotator, this);
+    IslNodeBuilder NodeBuilder(Builder, Annotator, this, LI, SE, DT);
 
     Builder.SetInsertPoint(StartBlock->getSinglePredecessor()->begin());
     NodeBuilder.addMemoryAccesses(S);

Modified: polly/trunk/lib/CodeGen/LoopGenerators.cpp
URL:
http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/LoopGenerators.c
pp?rev=215121&r1=215120&r2=215121&view=diff
============================================================================
==
--- polly/trunk/lib/CodeGen/LoopGenerators.cpp (original)
+++ polly/trunk/lib/CodeGen/LoopGenerators.cpp Thu Aug  7 12:14:54 2014
@@ -47,11 +47,10 @@ using namespace polly;  // TODO: We currently always
create the GuardBB. If we can prove the loop is
 //       always executed at least once, we can get rid of this branch.
 Value *polly::createLoop(Value *LB, Value *UB, Value *Stride,
-                         PollyIRBuilder &Builder, Pass *P, BasicBlock
*&ExitBB,
+                         PollyIRBuilder &Builder, Pass *P, LoopInfo &LI,
+                         DominatorTree &DT, BasicBlock *&ExitBB,
                          ICmpInst::Predicate Predicate,
                          LoopAnnotator *Annotator, bool Parallel) {
-  DominatorTree &DT =
P->getAnalysis<DominatorTreeWrapperPass>().getDomTree();
-  LoopInfo &LI = P->getAnalysis<LoopInfo>();
   Function *F = Builder.GetInsertBlock()->getParent();
   LLVMContext &Context = F->getContext();
 
@@ -321,7 +320,8 @@ Value *OMPGenerator::createSubfunction(V
 
   Builder.CreateBr(CheckNextBB);
   Builder.SetInsertPoint(--Builder.GetInsertPoint());
-  IV = createLoop(LowerBound, UpperBound, Stride, Builder, P, AfterBB,
+  LoopInfo &LI = P->getAnalysis<LoopInfo>();  IV = 
+ createLoop(LowerBound, UpperBound, Stride, Builder, P, LI, DT, 
+ AfterBB,
                   ICmpInst::ICMP_SLE);
 
   BasicBlock::iterator LoopBody = Builder.GetInsertPoint();


_______________________________________________
llvm-commits mailing list
llvm-commits at cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
An embedded message was scrubbed...
From: <llvm.buildmaster at lab.llvm.org>
Subject: buildbot failure in LLVM on polly-amd64-linux
Date: Thu, 7 Aug 2014 10:31:39 -0700
Size: 2118
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140807/4aee0b07/attachment.mht>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-Broken-build-after-r215121.patch
Type: application/octet-stream
Size: 3422 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140807/4aee0b07/attachment.obj>


More information about the llvm-commits mailing list