ValueMapper: Only check for cycles if operands change

This is a minor optimization to only check for unresolved operands
inside `mapDistinctNode()` if the operands have actually changed.  This
shouldn't really cause any change in behaviour.  I didn't actually see a
slowdown in a profile, I was just poking around nearby and saw the
opportunity.

llvm-svn: 243866
This commit is contained in:
Duncan P. N. Exon Smith 2015-08-03 03:45:32 +00:00
parent 9ee5b983b5
commit e9c24965a6

View File

@ -227,13 +227,14 @@ static Metadata *mapDistinctNode(const MDNode *Node,
assert(Node->isDistinct() && "Expected distinct node");
MDNode *NewMD = MDNode::replaceWithDistinct(Node->clone());
remap(Node, NewMD, Cycles, VM, Flags, TypeMapper, Materializer);
// Track any cycles beneath this node.
for (Metadata *Op : NewMD->operands())
if (auto *Node = dyn_cast_or_null<MDNode>(Op))
if (!Node->isResolved())
Cycles.push_back(Node);
// Remap the operands. If any change, track those that could be involved in
// uniquing cycles.
if (remap(Node, NewMD, Cycles, VM, Flags, TypeMapper, Materializer))
for (Metadata *Op : NewMD->operands())
if (auto *Node = dyn_cast_or_null<MDNode>(Op))
if (!Node->isResolved())
Cycles.push_back(Node);
return NewMD;
}