diff --git a/llvm/lib/Transforms/Scalar/NewGVN.cpp b/llvm/lib/Transforms/Scalar/NewGVN.cpp --- a/llvm/lib/Transforms/Scalar/NewGVN.cpp +++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp @@ -859,6 +859,7 @@ // Utilities. void cleanupTables(); std::pair assignDFSNumbers(BasicBlock *, unsigned); + unsigned updateDFSNumbers(unsigned); void updateProcessedCount(const Value *V); void verifyMemoryCongruency() const; void verifyIterationSettled(Function &F); @@ -3011,6 +3012,16 @@ return std::make_pair(Start, End); } +unsigned NewGVN::updateDFSNumbers(unsigned ICount) { + for (auto DTN : depth_first(DT->getRootNode())) { + BasicBlock *B = DTN->getBlock(); + const auto &BlockRange = assignDFSNumbers(B, ICount); + BlockInstRange.insert({B, BlockRange}); + ICount += BlockRange.second - BlockRange.first; + } + return ICount; +} + void NewGVN::updateProcessedCount(const Value *V) { #ifndef NDEBUG if (ProcessedCount.count(V) == 0) { @@ -3449,12 +3460,7 @@ } // Now a standard depth first ordering of the domtree is equivalent to RPO. - for (auto DTN : depth_first(DT->getRootNode())) { - BasicBlock *B = DTN->getBlock(); - const auto &BlockRange = assignDFSNumbers(B, ICount); - BlockInstRange.insert({B, BlockRange}); - ICount += BlockRange.second - BlockRange.first; - } + ICount = updateDFSNumbers(ICount); initializeCongruenceClasses(F); TouchedInstructions.resize(ICount);