CodeGeneration: Proberly build the dominator tree
llvm-svn: 153645
diff --git a/polly/lib/CodeGeneration.cpp b/polly/lib/CodeGeneration.cpp
index 3cd9599..69f27c0 100644
--- a/polly/lib/CodeGeneration.cpp
+++ b/polly/lib/CodeGeneration.cpp
@@ -33,6 +33,7 @@
#include "llvm/Module.h"
#include "llvm/ADT/SetVector.h"
+#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/ScalarEvolutionExpander.h"
#include "llvm/Support/CommandLine.h"
@@ -1223,6 +1224,17 @@
}
}
+static void clearDomtree(Function *F, DominatorTree &DT) {
+ DomTreeNode *N = DT.getNode(&F->getEntryBlock());
+ std::vector<BasicBlock*> Nodes;
+ for (po_iterator<DomTreeNode*> I = po_begin(N), E = po_end(N); I != E; ++I)
+ Nodes.push_back(I->getBlock());
+
+ for (std::vector<BasicBlock*>::iterator I = Nodes.begin(), E = Nodes.end();
+ I != E; ++I)
+ DT.eraseNode(*I);
+}
+
void ClastStmtCodeGen::codegenForOpenMP(const clast_for *For) {
Value *Stride, *LB, *UB, *IV;
BasicBlock::iterator LoopBody;
@@ -1251,6 +1263,9 @@
ClastVars.erase(For->iterator);
updateWithValueMap(VMap, /* reverse */ true);
+ clearDomtree((*LoopBody).getParent()->getParent(),
+ P->getAnalysis<DominatorTree>());
+
Builder.SetInsertPoint(AfterLoop);
}