[polly] r247480 - Merge TempScop into Scop

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 12 00:34:12 PDT 2015


Nice!

On 09/11, Michael Kruse via llvm-commits wrote:
> Author: meinersbur
> Date: Fri Sep 11 16:41:48 2015
> New Revision: 247480
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=247480&view=rev
> Log:
> Merge TempScop into Scop
> 
> Summary:
> TempScop is basically a holder for AccFuncMap, the dictionary from BasicBlocks to IRAccess lists. We move the list into polly::Scop and remove the polly::TempScop class.
> 
> There is one small change in behavior: If ScopInfo finds that its AssumedContext is impossible, it bails out by deleting the Scop object. The TempScop::print (invoked with opt -polly-scops -analyze) cannot print the AccFuncMap anymore as it would with a separate TempScop.
> 
> Differential Revision: http://reviews.llvm.org/D12803
> 
> Modified:
>     polly/trunk/include/polly/ScopInfo.h
>     polly/trunk/lib/Analysis/ScopInfo.cpp
> 
> Modified: polly/trunk/include/polly/ScopInfo.h
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopInfo.h?rev=247480&r1=247479&r2=247480&view=diff
> ==============================================================================
> --- polly/trunk/include/polly/ScopInfo.h (original)
> +++ polly/trunk/include/polly/ScopInfo.h Fri Sep 11 16:41:48 2015
> @@ -63,7 +63,6 @@ class IRAccess;
>  class Scop;
>  class ScopStmt;
>  class ScopInfo;
> -class TempScop;
>  class Comparison;
>  class SCEVAffFunc;
>  
> @@ -589,10 +588,10 @@ public:
>    const ScopStmt &operator=(const ScopStmt &) = delete;
>  
>    /// Create the ScopStmt from a BasicBlock.
> -  ScopStmt(Scop &parent, TempScop &tempScop, BasicBlock &bb);
> +  ScopStmt(Scop &parent, BasicBlock &bb);
>  
>    /// Create an overapproximating ScopStmt for the region @p R.
> -  ScopStmt(Scop &parent, TempScop &tempScop, Region &R);
> +  ScopStmt(Scop &parent, Region &R);
>  
>  private:
>    /// Polyhedral description
> @@ -664,14 +663,12 @@ private:
>  
>    /// @brief Create the accesses for instructions in @p Block.
>    ///
> -  /// @param tempScop       The template SCoP.
>    /// @param Block          The basic block for which accesses should be
>    ///                       created.
>    /// @param isApproximated Flag to indicate blocks that might not be executed,
>    ///                       hence for which write accesses need to be modeled as
>    ///                       may-write accesses.
> -  void buildAccesses(TempScop &tempScop, BasicBlock *Block,
> -                     bool isApproximated = false);
> +  void buildAccesses(BasicBlock *Block, bool isApproximated = false);
>  
>    /// @brief Detect and mark reductions in the ScopStmt
>    void checkForReductions();
> @@ -896,6 +893,9 @@ private:
>    /// The underlying Region.
>    Region &R;
>  
> +  // Access function of bbs.
> +  AccFuncMapType &AccFuncMap;
> +
>    /// Flag to indicate that the scheduler actually optimized the SCoP.
>    bool IsOptimized;
>  
> @@ -1001,20 +1001,12 @@ private:
>    /// group to ensure the SCoP is executed in an alias free environment.
>    MinMaxVectorPairVectorTy MinMaxAliasGroups;
>  
> -  /// @brief Scop constructor; used by static createFromTempScop
> -  Scop(Region &R, ScalarEvolution &SE, DominatorTree &DT, isl_ctx *ctx,
> -       unsigned MaxLoopDepth);
> -
> -  /// @brief Initialize this ScopInfo using a TempScop object.
> -  void initFromTempScop(TempScop &TempScop, LoopInfo &LI, ScopDetection &SD,
> -                        AliasAnalysis &AA);
> -
> -  /// Create the static control part with a region, max loop depth of this
> -  /// region and parameters used in this region.
> -  static Scop *createFromTempScop(TempScop &TempScop, LoopInfo &LI,
> -                                  ScalarEvolution &SE, ScopDetection &SD,
> -                                  AliasAnalysis &AA, DominatorTree &DT,
> -                                  isl_ctx *ctx);
> +  /// @brief Scop constructor; invoked from ScopInfo::buildScop.
> +  Scop(Region &R, AccFuncMapType &AccFuncMap, ScalarEvolution &SE,
> +       DominatorTree &DT, isl_ctx *ctx, unsigned MaxLoopDepth);
> +
> +  /// @brief Initialize this ScopInfo .
> +  void init(LoopInfo &LI, ScopDetection &SD, AliasAnalysis &AA);
>  
>    /// @brief Add loop carried constraints to the header blocks of loops.
>    ///
> @@ -1057,10 +1049,9 @@ private:
>    /// it does not need to be represented as a polyhedral statement.
>    ///
>    /// @param BB The basic block to check
> -  /// @param tempScop TempScop returning further information regarding the Scop.
>    ///
>    /// @return True if the basic block is trivial, otherwise false.
> -  static bool isTrivialBB(BasicBlock *BB, TempScop &tempScop);
> +  bool isTrivialBB(BasicBlock *BB);
>  
>    /// @brief Add parameter constraints to @p C that imply a non-empty domain.
>    __isl_give isl_set *addNonEmptyDomainConstraints(__isl_take isl_set *C) const;
> @@ -1084,17 +1075,15 @@ private:
>    ///
>    /// @param BB         The basic block we build the statement for (or null)
>    /// @param R          The region we build the statement for (or null).
> -  /// @param tempScop   The temp SCoP we use as model.
> -  ScopStmt *addScopStmt(BasicBlock *BB, Region *R, TempScop &tempScop);
> +  ScopStmt *addScopStmt(BasicBlock *BB, Region *R);
>  
> -  /// @brief Build Schedule and ScopStmts from a given TempScop.
> +  /// @brief Build Schedule and ScopStmts.
>    ///
>    /// @param R  The current region traversed.
> -  /// @param TS The temporary scop that is translated into an actual scop.
>    /// @param LI The LoopInfo object.
>    /// @param SD The ScopDetection object.
>    void buildSchedule(
> -      Region *R, TempScop &TS, LoopInfo &LI, ScopDetection &SD,
> +      Region *R, LoopInfo &LI, ScopDetection &SD,
>        DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> &LoopSchedules);
>  
>    /// @name Helper function for printing the Scop.
> @@ -1111,6 +1100,34 @@ private:
>  public:
>    ~Scop();
>  
> +  /// @brief Get all access functions in a BasicBlock
> +  ///
> +  /// @param  BB The BasicBlock that containing the access functions.
> +  ///
> +  /// @return All access functions in BB
> +  ///
> +  AccFuncSetType *getAccessFunctions(const BasicBlock *BB) {
> +    AccFuncMapType::iterator at = AccFuncMap.find(BB);
> +    return at != AccFuncMap.end() ? &(at->second) : 0;
> +  }
> +  //@}
> +
> +  /// @brief Print data access information.
> +  ///
> +  /// @param OS The output stream the access functions is printed to.
> +  /// @param SE The ScalarEvolution to help printing more details.
> +  /// @param LI The LoopInfo that help printing the access functions.
> +  void printIRAccesses(raw_ostream &OS, ScalarEvolution *SE,
> +                       LoopInfo *LI) const;
> +
> +  /// @brief Print the access functions and loop bounds in this Scop.
> +  ///
> +  /// @param OS The output stream the access functions is printed to.
> +  /// @param SE The ScalarEvolution that help printing the access functions.
> +  /// @param LI The LoopInfo that help printing the access functions.
> +  void printIRAccessesDetail(raw_ostream &OS, ScalarEvolution *SE, LoopInfo *LI,
> +                             const Region *Reg, unsigned ind) const;
> +
>    ScalarEvolution *getSE() const;
>  
>    /// @brief Get the count of parameters used in this Scop.
> @@ -1370,62 +1387,6 @@ static inline raw_ostream &operator<<(ra
>    return O;
>  }
>  
> -//===---------------------------------------------------------------------===//
> -/// @brief Scop represent with llvm objects.
> -///
> -/// A helper class for remembering the parameter number and the max depth in
> -/// this Scop, and others context.
> -class TempScop {
> -  // The Region.
> -  Region &R;
> -
> -  // Access function of bbs.
> -  AccFuncMapType &AccFuncMap;
> -
> -  friend class ScopInfo;
> -
> -  explicit TempScop(Region &r, AccFuncMapType &accFuncMap)
> -      : R(r), AccFuncMap(accFuncMap) {}
> -
> -public:
> -  ~TempScop();
> -
> -  /// @brief Get the maximum Region contained by this Scop.
> -  ///
> -  /// @return The maximum Region contained by this Scop.
> -  Region &getMaxRegion() const { return R; }
> -
> -  /// @brief Get all access functions in a BasicBlock
> -  ///
> -  /// @param  BB The BasicBlock that containing the access functions.
> -  ///
> -  /// @return All access functions in BB
> -  ///
> -  AccFuncSetType *getAccessFunctions(const BasicBlock *BB) {
> -    AccFuncMapType::iterator at = AccFuncMap.find(BB);
> -    return at != AccFuncMap.end() ? &(at->second) : 0;
> -  }
> -  //@}
> -
> -  /// @brief Print the Temporary Scop information.
> -  ///
> -  /// @param OS The output stream the access functions is printed to.
> -  /// @param SE The ScalarEvolution that help printing Temporary Scop
> -  ///           information.
> -  /// @param LI The LoopInfo that help printing the access functions.
> -  void print(raw_ostream &OS, ScalarEvolution *SE, LoopInfo *LI) const;
> -
> -  /// @brief Print the access functions and loop bounds in this Scop.
> -  ///
> -  /// @param OS The output stream the access functions is printed to.
> -  /// @param SE The ScalarEvolution that help printing the access functions.
> -  /// @param LI The LoopInfo that help printing the access functions.
> -  void printDetail(raw_ostream &OS, ScalarEvolution *SE, LoopInfo *LI,
> -                   const Region *Reg, unsigned ind) const;
> -};
> -
> -typedef std::map<const Region *, TempScop *> TempScopMapType;
> -
>  ///===---------------------------------------------------------------------===//
>  /// @brief Build the Polly IR (Scop and ScopStmt) on a Region.
>  ///
> @@ -1456,9 +1417,6 @@ class ScopInfo : public RegionPass {
>    // zero scev every time when we need it.
>    const SCEV *ZeroOffset;
>  
> -  // The TempScop for this region.
> -  TempScop *TempScopOfRegion;
> -
>    // The Scop
>    Scop *scop;
>    isl_ctx *ctx;
> @@ -1466,15 +1424,14 @@ class ScopInfo : public RegionPass {
>    // Clear the context.
>    void clear();
>  
> -  // Build the temporary information of Region R, where R must be a valid part
> -  // of Scop.
> -  TempScop *buildTempScop(Region &R);
> +  // Build the SCoP for Region @p R.
> +  Scop *buildScop(Region &R, DominatorTree &DT);
>  
>    /// @brief Build an instance of IRAccess from the Load/Store instruction.
>    ///
>    /// @param Inst       The Load/Store instruction that access the memory
>    /// @param L          The parent loop of the instruction
> -  /// @param R          The region on which we are going to build a TempScop
> +  /// @param R          The region on which to build the data access dictionary.
>    /// @param BoxedLoops The set of loops that are overapproximated in @p R.
>    ///
>    /// @return     The IRAccess to describe the access function of the
> @@ -1525,11 +1482,6 @@ public:
>    explicit ScopInfo();
>    ~ScopInfo();
>  
> -  /// @brief Get the temporay Scop information in LLVM IR for this region.
> -  ///
> -  /// @return The Scop information in LLVM IR represent.
> -  TempScop *getTempScop() const;
> -
>    /// @brief Try to build the Polly IR of static control part on the current
>    ///        SESE-Region.
>    ///
> 
> Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=247480&r1=247479&r2=247480&view=diff
> ==============================================================================
> --- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
> +++ polly/trunk/lib/Analysis/ScopInfo.cpp Fri Sep 11 16:41:48 2015
> @@ -738,9 +738,8 @@ void ScopStmt::restrictDomain(__isl_take
>    Domain = NewDomain;
>  }
>  
> -void ScopStmt::buildAccesses(TempScop &tempScop, BasicBlock *Block,
> -                             bool isApproximated) {
> -  AccFuncSetType *AFS = tempScop.getAccessFunctions(Block);
> +void ScopStmt::buildAccesses(BasicBlock *Block, bool isApproximated) {
> +  AccFuncSetType *AFS = Parent.getAccessFunctions(Block);
>    if (!AFS)
>      return;
>  
> @@ -983,7 +982,7 @@ void ScopStmt::collectSurroundingLoops()
>    }
>  }
>  
> -ScopStmt::ScopStmt(Scop &parent, TempScop &tempScop, Region &R)
> +ScopStmt::ScopStmt(Scop &parent, Region &R)
>      : Parent(parent), BB(nullptr), R(&R), Build(nullptr) {
>  
>    BaseName = getIslCompatibleName("Stmt_", R.getNameStr(), "");
> @@ -993,21 +992,21 @@ ScopStmt::ScopStmt(Scop &parent, TempSco
>  
>    BasicBlock *EntryBB = R.getEntry();
>    for (BasicBlock *Block : R.blocks()) {
> -    buildAccesses(tempScop, Block, Block != EntryBB);
> +    buildAccesses(Block, Block != EntryBB);
>      deriveAssumptions(Block);
>    }
>    if (DetectReductions)
>      checkForReductions();
>  }
>  
> -ScopStmt::ScopStmt(Scop &parent, TempScop &tempScop, BasicBlock &bb)
> +ScopStmt::ScopStmt(Scop &parent, BasicBlock &bb)
>      : Parent(parent), BB(&bb), R(nullptr), Build(nullptr) {
>  
>    BaseName = getIslCompatibleName("Stmt_", &bb, "");
>  
>    buildDomain();
>    collectSurroundingLoops();
> -  buildAccesses(tempScop, BB);
> +  buildAccesses(BB);
>    deriveAssumptions(BB);
>    if (DetectReductions)
>      checkForReductions();
> @@ -2085,14 +2084,14 @@ static unsigned getMaxLoopDepthInRegion(
>    return MaxLD - MinLD + 1;
>  }
>  
> -Scop::Scop(Region &R, ScalarEvolution &ScalarEvolution, DominatorTree &DT,
> +Scop::Scop(Region &R, AccFuncMapType &AccFuncMap,
> +           ScalarEvolution &ScalarEvolution, DominatorTree &DT,
>             isl_ctx *Context, unsigned MaxLoopDepth)
> -    : DT(DT), SE(&ScalarEvolution), R(R), IsOptimized(false),
> -      HasSingleExitEdge(R.getExitingBlock()), MaxLoopDepth(MaxLoopDepth),
> -      IslCtx(Context), Affinator(this) {}
> +    : DT(DT), SE(&ScalarEvolution), R(R), AccFuncMap(AccFuncMap),
> +      IsOptimized(false), HasSingleExitEdge(R.getExitingBlock()),
> +      MaxLoopDepth(MaxLoopDepth), IslCtx(Context), Affinator(this) {}
>  
> -void Scop::initFromTempScop(TempScop &TempScop, LoopInfo &LI, ScopDetection &SD,
> -                            AliasAnalysis &AA) {
> +void Scop::init(LoopInfo &LI, ScopDetection &SD, AliasAnalysis &AA) {
>    buildContext();
>  
>    buildDomains(&R, LI, SD, DT);
> @@ -2101,7 +2100,7 @@ void Scop::initFromTempScop(TempScop &Te
>  
>    Loop *L = getLoopSurroundingRegion(R, LI);
>    LoopSchedules[L];
> -  buildSchedule(&R, TempScop, LI, SD, LoopSchedules);
> +  buildSchedule(&R, LI, SD, LoopSchedules);
>    Schedule = LoopSchedules[L].first;
>  
>    realignParams();
> @@ -2111,18 +2110,6 @@ void Scop::initFromTempScop(TempScop &Te
>    buildAliasChecks(AA);
>  }
>  
> -Scop *Scop::createFromTempScop(TempScop &TempScop, LoopInfo &LI,
> -                               ScalarEvolution &SE, ScopDetection &SD,
> -                               AliasAnalysis &AA, DominatorTree &DT,
> -                               isl_ctx *ctx) {
> -  auto &R = TempScop.getMaxRegion();
> -  auto MaxLoopDepth = getMaxLoopDepthInRegion(R, LI, SD);
> -  auto S = new Scop(R, SE, DT, ctx, MaxLoopDepth);
> -  S->initFromTempScop(TempScop, LI, SD, AA);
> -
> -  return S;
> -}
> -
>  Scop::~Scop() {
>    isl_set_free(Context);
>    isl_set_free(AssumedContext);
> @@ -2450,8 +2437,8 @@ bool Scop::restrictDomains(__isl_take is
>  
>  ScalarEvolution *Scop::getSE() const { return SE; }
>  
> -bool Scop::isTrivialBB(BasicBlock *BB, TempScop &tempScop) {
> -  if (tempScop.getAccessFunctions(BB) && !isErrorBlock(*BB))
> +bool Scop::isTrivialBB(BasicBlock *BB) {
> +  if (getAccessFunctions(BB) && !isErrorBlock(*BB))
>      return false;
>  
>    return true;
> @@ -2515,15 +2502,15 @@ mapToDimension(__isl_take isl_union_set
>    return isl_multi_union_pw_aff_from_union_pw_multi_aff(Data.Res);
>  }
>  
> -ScopStmt *Scop::addScopStmt(BasicBlock *BB, Region *R, TempScop &tempScop) {
> +ScopStmt *Scop::addScopStmt(BasicBlock *BB, Region *R) {
>    ScopStmt *Stmt;
>    if (BB) {
> -    Stmts.emplace_back(*this, tempScop, *BB);
> +    Stmts.emplace_back(*this, *BB);
>      Stmt = &Stmts.back();
>      StmtMap[BB] = Stmt;
>    } else {
>      assert(R && "Either basic block or a region expected.");
> -    Stmts.emplace_back(*this, tempScop, *R);
> +    Stmts.emplace_back(*this, *R);
>      Stmt = &Stmts.back();
>      for (BasicBlock *BB : R->blocks())
>        StmtMap[BB] = Stmt;
> @@ -2532,7 +2519,7 @@ ScopStmt *Scop::addScopStmt(BasicBlock *
>  }
>  
>  void Scop::buildSchedule(
> -    Region *R, TempScop &TS, LoopInfo &LI, ScopDetection &SD,
> +    Region *R, LoopInfo &LI, ScopDetection &SD,
>      DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> &LoopSchedules) {
>  
>    ReversePostOrderTraversal<Region *> RTraversal(R);
> @@ -2541,7 +2528,7 @@ void Scop::buildSchedule(
>      if (RN->isSubRegion()) {
>        Region *SubRegion = RN->getNodeAs<Region>();
>        if (!SD.isNonAffineSubRegion(SubRegion, &getRegion())) {
> -        buildSchedule(SubRegion, TS, LI, SD, LoopSchedules);
> +        buildSchedule(SubRegion, LI, SD, LoopSchedules);
>          continue;
>        }
>      }
> @@ -2552,13 +2539,13 @@ void Scop::buildSchedule(
>      LSchedulePair.second += getNumBlocksInRegionNode(RN);
>  
>      BasicBlock *BB = getRegionNodeBasicBlock(RN);
> -    if (RN->isSubRegion() || !isTrivialBB(BB, TS)) {
> +    if (RN->isSubRegion() || !isTrivialBB(BB)) {
>  
>        ScopStmt *Stmt;
>        if (RN->isSubRegion())
> -        Stmt = addScopStmt(nullptr, RN->getNodeAs<Region>(), TS);
> +        Stmt = addScopStmt(nullptr, RN->getNodeAs<Region>());
>        else
> -        Stmt = addScopStmt(BB, nullptr, TS);
> +        Stmt = addScopStmt(BB, nullptr);
>  
>        auto *UDomain = isl_union_set_from_set(Stmt->getDomain());
>        auto *StmtSchedule = isl_schedule_from_domain(UDomain);
> @@ -2593,18 +2580,16 @@ ScopStmt *Scop::getStmtForBasicBlock(Bas
>    return StmtMapIt->second;
>  }
>  
> -//===----------------------------------------------------------------------===//
> -// TempScop implementation
> -TempScop::~TempScop() {}
> -
> -void TempScop::print(raw_ostream &OS, ScalarEvolution *SE, LoopInfo *LI) const {
> +void Scop::printIRAccesses(raw_ostream &OS, ScalarEvolution *SE,
> +                           LoopInfo *LI) const {
>    OS << "Scop: " << R.getNameStr() << "\n";
>  
> -  printDetail(OS, SE, LI, &R, 0);
> +  printIRAccessesDetail(OS, SE, LI, &R, 0);
>  }
>  
> -void TempScop::printDetail(raw_ostream &OS, ScalarEvolution *SE, LoopInfo *LI,
> -                           const Region *CurR, unsigned ind) const {
> +void Scop::printIRAccessesDetail(raw_ostream &OS, ScalarEvolution *SE,
> +                                 LoopInfo *LI, const Region *CurR,
> +                                 unsigned ind) const {
>    // FIXME: Print other details rather than memory accesses.
>    for (const auto &CurBlock : CurR->blocks()) {
>      AccFuncMapType::const_iterator AccSetIt = AccFuncMap.find(CurBlock);
> @@ -2891,8 +2876,9 @@ void ScopInfo::buildAccessFunctions(Regi
>    Accs.insert(Accs.end(), Functions.begin(), Functions.end());
>  }
>  
> -TempScop *ScopInfo::buildTempScop(Region &R) {
> -  TempScop *TScop = new TempScop(R, AccFuncMap);
> +Scop *ScopInfo::buildScop(Region &R, DominatorTree &DT) {
> +  unsigned MaxLoopDepth = getMaxLoopDepthInRegion(R, *LI, *SD);
> +  Scop *S = new Scop(R, AccFuncMap, *SE, DT, ctx, MaxLoopDepth);
>  
>    buildAccessFunctions(R, R);
>  
> @@ -2906,27 +2892,22 @@ TempScop *ScopInfo::buildTempScop(Region
>    if (!R.getExitingBlock())
>      buildAccessFunctions(R, *R.getExit(), nullptr, /* IsExitBlock */ true);
>  
> -  return TScop;
> +  S->init(*LI, *SD, *AA);
> +  return S;
>  }
>  
> -TempScop *ScopInfo::getTempScop() const { return TempScopOfRegion; }
> -
>  void ScopInfo::print(raw_ostream &OS, const Module *) const {
> -  if (TempScopOfRegion)
> -    TempScopOfRegion->print(OS, SE, LI);
> -
> -  if (scop)
> -    scop->print(OS);
> -  else
> +  if (!scop) {
>      OS << "Invalid Scop!\n";
> +    return;
> +  }
> +
> +  scop->printIRAccesses(OS, SE, LI);
> +  scop->print(OS);
>  }
>  
>  void ScopInfo::clear() {
>    AccFuncMap.clear();
> -  if (TempScopOfRegion)
> -    delete TempScopOfRegion;
> -  TempScopOfRegion = nullptr;
> -
>    if (scop) {
>      delete scop;
>      scop = 0;
> @@ -2934,7 +2915,7 @@ void ScopInfo::clear() {
>  }
>  
>  //===----------------------------------------------------------------------===//
> -ScopInfo::ScopInfo() : RegionPass(ID), TempScopOfRegion(nullptr), scop(0) {
> +ScopInfo::ScopInfo() : RegionPass(ID), scop(0) {
>    ctx = isl_ctx_alloc();
>    isl_options_set_on_error(ctx, ISL_ON_ERROR_ABORT);
>  }
> @@ -2969,17 +2950,7 @@ bool ScopInfo::runOnRegion(Region *R, RG
>    DominatorTree &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
>    ZeroOffset = SE->getConstant(TD->getIntPtrType(F->getContext()), 0);
>  
> -  assert(!TempScopOfRegion && "Build the TempScop only once");
> -  TempScopOfRegion = buildTempScop(*R);
> -
> -  // This region is no Scop.
> -  if (!TempScopOfRegion) {
> -    scop = nullptr;
> -    return false;
> -  }
> -
> -  scop =
> -      Scop::createFromTempScop(*TempScopOfRegion, *LI, *SE, *SD, *AA, DT, ctx);
> +  scop = buildScop(*R, DT);
>  
>    DEBUG(scop->print(dbgs()));
>  
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits

-- 

Johannes Doerfert
Researcher / PhD Student

Compiler Design Lab (Prof. Hack)
Saarland University, Computer Science
Building E1.3, Room 4.31

Tel. +49 (0)681 302-57521 : doerfert at cs.uni-saarland.de
Fax. +49 (0)681 302-3065  : http://www.cdl.uni-saarland.de/people/doerfert
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 213 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150912/7fc8bb42/attachment.sig>


More information about the llvm-commits mailing list