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);
 }