diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -9,9 +9,6 @@ // This file implements a trivial dead store elimination that only considers // basic-block local redundant stores. // -// FIXME: This should eventually be extended to be a post-dominator tree -// traversal. Doing so would be pretty trivial. -// //===----------------------------------------------------------------------===// #include "llvm/Transforms/Scalar/DeadStoreElimination.h" @@ -1388,12 +1385,14 @@ MemoryDependenceResults *MD, DominatorTree *DT, const TargetLibraryInfo *TLI) { bool MadeChange = false; - for (BasicBlock &BB : F) + for (auto node = GraphTraits::nodes_begin(DT); + node != GraphTraits::nodes_end(DT); ++node) { + BasicBlock *BB = node->getBlock(); // Only check non-dead blocks. Dead blocks may have strange pointer // cycles that will confuse alias analysis. - if (DT->isReachableFromEntry(&BB)) - MadeChange |= eliminateDeadStores(BB, AA, MD, DT, TLI); - + if (DT->isReachableFromEntry(BB)) + MadeChange |= eliminateDeadStores(*BB, AA, MD, DT, TLI); + } return MadeChange; }