Index: lib/Transforms/Scalar/GVN.cpp =================================================================== --- lib/Transforms/Scalar/GVN.cpp +++ lib/Transforms/Scalar/GVN.cpp @@ -2159,15 +2159,10 @@ // split critical edge, and hence may invalidate the RPO/DT iterator. // std::vector BBVect; - BBVect.reserve(256); - // Needed for value numbering with phi construction to work. - ReversePostOrderTraversal RPOT(&F); - for (ReversePostOrderTraversal::rpo_iterator RI = RPOT.begin(), - RE = RPOT.end(); - RI != RE; ++RI) - BBVect.push_back(*RI); + std::copy(po_begin(&F), po_end(&F), std::back_inserter(BBVect)); - for (std::vector::iterator I = BBVect.begin(), E = BBVect.end(); + // Need to go through the vector in reverse. + for (std::vector::reverse_iterator I = BBVect.rbegin(), E = BBVect.rend(); I != E; I++) Changed |= processBlock(*I);