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
This commit is contained in:
Duncan P. N. Exon Smith
2016-04-23 04:22:38 +00:00
parent 4b1bc647f0
commit d9bbdce715
2 changed files with 8 additions and 23 deletions

View File

@@ -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<MDNode>(*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;