From 586f7b97b4c643138842bf0c50ba07d6adca728c Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Sat, 23 Apr 2016 04:22:38 +0000 Subject: [PATCH] ValueEnumerator: Use std::find_if, NFC Mehdi's pattern recognition pulled this one out. This is cleaner with std::find_if than with the strange helper function that took an iterator by reference and updated it. llvm-svn: 267271 --- lib/Bitcode/Writer/ValueEnumerator.cpp | 21 ++++++++------------- lib/Bitcode/Writer/ValueEnumerator.h | 10 ---------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/lib/Bitcode/Writer/ValueEnumerator.cpp b/lib/Bitcode/Writer/ValueEnumerator.cpp index 068bf622df1..4de0d261c57 100644 --- a/lib/Bitcode/Writer/ValueEnumerator.cpp +++ b/lib/Bitcode/Writer/ValueEnumerator.cpp @@ -575,11 +575,15 @@ void ValueEnumerator::EnumerateMetadata(unsigned F, const Metadata *MD) { while (!Worklist.empty()) { const MDNode *N = Worklist.back().first; - MDNode::op_iterator &I = Worklist.back().second; - // Enumerate operands until the worklist changes. We need to traverse new - // nodes before visiting the rest of N's operands. - if (const MDNode *Op = enumerateMetadataOperands(F, I, N->op_end())) { + // Enumerate operands until we hit a new node. We need to traverse these + // nodes' operands before visiting the rest of N's operands. + MDNode::op_iterator I = std::find_if( + Worklist.back().second, N->op_end(), + [&](const Metadata *MD) { return enumerateMetadataImpl(F, MD); }); + if (I != N->op_end()) { + auto *Op = cast(*I); + Worklist.back().second = ++I; Worklist.push_back(std::make_pair(Op, Op->op_begin())); continue; } @@ -591,15 +595,6 @@ void ValueEnumerator::EnumerateMetadata(unsigned F, const Metadata *MD) { } } -const MDNode * -ValueEnumerator::enumerateMetadataOperands(unsigned F, MDNode::op_iterator &I, - MDNode::op_iterator E) { - while (I != E) - if (const MDNode *N = enumerateMetadataImpl(F, *I++)) // Always increment I. - return N; - return nullptr; -} - const MDNode *ValueEnumerator::enumerateMetadataImpl(unsigned F, const Metadata *MD) { if (!MD) return nullptr; diff --git a/lib/Bitcode/Writer/ValueEnumerator.h b/lib/Bitcode/Writer/ValueEnumerator.h index 9acb9224212..14407bed03f 100644 --- a/lib/Bitcode/Writer/ValueEnumerator.h +++ b/lib/Bitcode/Writer/ValueEnumerator.h @@ -246,16 +246,6 @@ private: /// function. void incorporateFunctionMetadata(const Function &F); - /// Enumerate operands with the given function tag. - /// - /// Enumerate the Metadata operands between \c I and \c E, returning the - /// first newly-enumerated MDNode without assigning it an ID. - /// - /// \post If a node was found, \c I points just past the node. - /// \post If no node was found, \c I is equal to \c E. - const MDNode *enumerateMetadataOperands(unsigned F, const MDOperand *&I, - const MDOperand *E); - /// Enumerate a single instance of metadata with the given function tag. /// /// If \c MD has already been enumerated, check that \c F matches its