From 5ec3333d2401eaa1e9454e0eaf60d74889c01fda Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sun, 18 Jan 2015 10:52:23 +0000 Subject: [PATCH] [PM] Update Polly for LLVM r226394 and r226396 which changed some of the block splitting interfaces to accept specific analyses rather than a pass. llvm-svn: 226398 --- polly/lib/CodeGen/BlockGenerators.cpp | 14 ++++++++++++-- polly/lib/CodeGen/IslCodeGeneration.cpp | 4 ++-- polly/lib/CodeGen/LoopGenerators.cpp | 2 +- polly/lib/Support/ScopHelper.cpp | 23 ++++++++++++++++++++--- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/polly/lib/CodeGen/BlockGenerators.cpp b/polly/lib/CodeGen/BlockGenerators.cpp index 05b95e2..208748a 100644 --- a/polly/lib/CodeGen/BlockGenerators.cpp +++ b/polly/lib/CodeGen/BlockGenerators.cpp @@ -238,9 +238,14 @@ void BlockGenerator::copyInstruction(const Instruction *Inst, ValueMapT &BBMap, } void BlockGenerator::copyBB(ValueMapT &GlobalMap, LoopToScevMapT <S) { + auto *DTWP = P->getAnalysisIfAvailable(); + auto *DT = DTWP ? &DTWP->getDomTree() : nullptr; + auto *LIWP = P->getAnalysisIfAvailable(); + auto *LI = LIWP ? &LIWP->getLoopInfo() : nullptr;; + BasicBlock *BB = Statement.getBasicBlock(); BasicBlock *CopyBB = - SplitBlock(Builder.GetInsertBlock(), Builder.GetInsertPoint(), P); + SplitBlock(Builder.GetInsertBlock(), Builder.GetInsertPoint(), DT, LI); CopyBB->setName("polly.stmt." + BB->getName()); Builder.SetInsertPoint(CopyBB->begin()); @@ -572,9 +577,14 @@ void VectorBlockGenerator::copyInstruction(const Instruction *Inst, } void VectorBlockGenerator::copyBB() { + auto *DTWP = P->getAnalysisIfAvailable(); + auto *DT = DTWP ? &DTWP->getDomTree() : nullptr; + auto *LIWP = P->getAnalysisIfAvailable(); + auto *LI = LIWP ? &LIWP->getLoopInfo() : nullptr;; + BasicBlock *BB = Statement.getBasicBlock(); BasicBlock *CopyBB = - SplitBlock(Builder.GetInsertBlock(), Builder.GetInsertPoint(), P); + SplitBlock(Builder.GetInsertBlock(), Builder.GetInsertPoint(), DT, LI); CopyBB->setName("polly.stmt." + BB->getName()); Builder.SetInsertPoint(CopyBB->begin()); diff --git a/polly/lib/CodeGen/IslCodeGeneration.cpp b/polly/lib/CodeGen/IslCodeGeneration.cpp index b80a250..db8712b 100644 --- a/polly/lib/CodeGen/IslCodeGeneration.cpp +++ b/polly/lib/CodeGen/IslCodeGeneration.cpp @@ -698,9 +698,9 @@ void IslNodeBuilder::createIf(__isl_take isl_ast_node *If) { LLVMContext &Context = F->getContext(); BasicBlock *CondBB = - SplitBlock(Builder.GetInsertBlock(), Builder.GetInsertPoint(), P); + SplitBlock(Builder.GetInsertBlock(), Builder.GetInsertPoint(), &DT, &LI); CondBB->setName("polly.cond"); - BasicBlock *MergeBB = SplitBlock(CondBB, CondBB->begin(), P); + BasicBlock *MergeBB = SplitBlock(CondBB, CondBB->begin(), &DT, &LI); MergeBB->setName("polly.merge"); BasicBlock *ThenBB = BasicBlock::Create(Context, "polly.then", F); BasicBlock *ElseBB = BasicBlock::Create(Context, "polly.else", F); diff --git a/polly/lib/CodeGen/LoopGenerators.cpp b/polly/lib/CodeGen/LoopGenerators.cpp index 05ab620..183ce9c 100644 --- a/polly/lib/CodeGen/LoopGenerators.cpp +++ b/polly/lib/CodeGen/LoopGenerators.cpp @@ -92,7 +92,7 @@ Value *polly::createLoop(Value *LB, Value *UB, Value *Stride, Annotator->pushLoop(NewLoop, Parallel); // ExitBB - ExitBB = SplitBlock(BeforeBB, Builder.GetInsertPoint()++, P); + ExitBB = SplitBlock(BeforeBB, Builder.GetInsertPoint()++, &DT, &LI); ExitBB->setName("polly.loop_exit"); // BeforeBB diff --git a/polly/lib/Support/ScopHelper.cpp b/polly/lib/Support/ScopHelper.cpp index 1b7b9a2..bf6ad07 100644 --- a/polly/lib/Support/ScopHelper.cpp +++ b/polly/lib/Support/ScopHelper.cpp @@ -13,6 +13,7 @@ #include "polly/Support/ScopHelper.h" #include "polly/ScopInfo.h" +#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/RegionInfo.h" #include "llvm/Analysis/ScalarEvolution.h" @@ -89,7 +90,13 @@ BasicBlock *polly::createSingleExitEdge(Region *R, Pass *P) { if (R->contains(*PI)) Preds.push_back(*PI); - return SplitBlockPredecessors(BB, Preds, ".region", P); + auto *AA = P->getAnalysisIfAvailable(); + auto *DTWP = P->getAnalysisIfAvailable(); + auto *DT = DTWP ? &DTWP->getDomTree() : nullptr; + auto *LIWP = P->getAnalysisIfAvailable(); + auto *LI = LIWP ? &LIWP->getLoopInfo() : nullptr; + + return SplitBlockPredecessors(BB, Preds, ".region", AA, DT, LI); } static void replaceScopAndRegionEntry(polly::Scop *S, BasicBlock *OldEntry, @@ -110,7 +117,12 @@ BasicBlock *polly::simplifyRegion(Scop *S, Pass *P) { // Create single entry edge if the region has multiple entry edges. if (!EnteringBB) { - NewEntry = SplitBlock(OldEntry, OldEntry->begin(), P); + auto *DTWP = P->getAnalysisIfAvailable(); + auto *DT = DTWP ? &DTWP->getDomTree() : nullptr; + auto *LIWP = P->getAnalysisIfAvailable(); + auto *LI = LIWP ? &LIWP->getLoopInfo() : nullptr; + + NewEntry = SplitBlock(OldEntry, OldEntry->begin(), DT, LI); EnteringBB = OldEntry; } @@ -171,8 +183,13 @@ void polly::splitEntryBlockForAlloca(BasicBlock *EntryBlock, Pass *P) { while (isa(I)) ++I; + auto *DTWP = P->getAnalysisIfAvailable(); + auto *DT = DTWP ? &DTWP->getDomTree() : nullptr; + auto *LIWP = P->getAnalysisIfAvailable(); + auto *LI = LIWP ? &LIWP->getLoopInfo() : nullptr; + // SplitBlock updates DT, DF and LI. - BasicBlock *NewEntry = SplitBlock(EntryBlock, I, P); + BasicBlock *NewEntry = SplitBlock(EntryBlock, I, DT, LI); if (RegionInfoPass *RIP = P->getAnalysisIfAvailable()) RIP->getRegionInfo().splitBlock(NewEntry, EntryBlock); } -- 2.7.4