mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
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:
parent
35f8930f4a
commit
586f7b97b4
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user