Revert [GlobalOpt] Pass DTU to removeUnreachableBlocks instead of recomputing.
authorFlorian Hahn <flo@fhahn.com>
Wed, 2 Oct 2019 08:32:25 +0000 (08:32 +0000)
committerFlorian Hahn <flo@fhahn.com>
Wed, 2 Oct 2019 08:32:25 +0000 (08:32 +0000)
This breaks http://lab.llvm.org:8011/builders/sanitizer-windows/builds/52310

This reverts r373430 (git commit 70f70035484ba199a329f9f8d9bd67e37bc2b408)

llvm-svn: 373432

llvm/lib/Transforms/IPO/GlobalOpt.cpp

index dfbb3e7..9c7fd5e 100644 (file)
@@ -2285,10 +2285,14 @@ OptimizeFunctions(Module &M,
     // So, remove unreachable blocks from the function, because a) there's
     // no point in analyzing them and b) GlobalOpt should otherwise grow
     // some more complicated logic to break these cycles.
+    // Removing unreachable blocks might invalidate the dominator so we
+    // recalculate it.
     if (!F->isDeclaration()) {
-      auto &DT = LookupDomTree(*F);
-      DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
-      Changed |= removeUnreachableBlocks(*F, nullptr, &DTU);
+      if (removeUnreachableBlocks(*F)) {
+        auto &DT = LookupDomTree(*F);
+        DT.recalculate(*F);
+        Changed = true;
+      }
     }
 
     Changed |= processGlobal(*F, GetTLI, LookupDomTree);