diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-14 01:08:47 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-01-14 01:08:47 +0000 |
| commit | fb9d128ab157243706f1c7f1551286b3fd8ebc24 (patch) | |
| tree | abf34e7acd66431622c6794fd5f706a3f120ebff | |
| parent | 4cb557039dbc6d764fa2b16f811f37e5accf2f0d (diff) | |
| download | bcm5719-llvm-fb9d128ab157243706f1c7f1551286b3fd8ebc24.tar.gz bcm5719-llvm-fb9d128ab157243706f1c7f1551286b3fd8ebc24.zip | |
Utils: Extract shouldRemapUniquedNode(), NFC
llvm-svn: 225911
| -rw-r--r-- | llvm/lib/Transforms/Utils/ValueMapper.cpp | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp index de9db8fed70..d203220675c 100644 --- a/llvm/lib/Transforms/Utils/ValueMapper.cpp +++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp @@ -202,6 +202,23 @@ static Metadata *mapDistinctNode(const UniquableMDNode *Node, return NewMD; } +/// \brief Check whether a uniqued node needs to be remapped. +/// +/// Check whether a uniqued node needs to be remapped (due to any operands +/// changing). +static bool shouldRemapUniquedNode(const UniquableMDNode *Node, + ValueToValueMapTy &VM, RemapFlags Flags, + ValueMapTypeRemapper *TypeMapper, + ValueMaterializer *Materializer) { + // Check all operands to see if any need to be remapped. + for (unsigned I = 0, E = Node->getNumOperands(); I != E; ++I) { + Metadata *Op = Node->getOperand(I); + if (Op != mapMetadataOp(Op, VM, Flags, TypeMapper, Materializer)) + return true; + } + return false; +} + /// \brief Map a uniqued MDNode. /// /// Uniqued nodes may not need to be recreated (they may map to themselves). @@ -216,28 +233,24 @@ static Metadata *mapUniquedNode(const UniquableMDNode *Node, mapToMetadata(VM, Node, Dummy); // Check all operands to see if any need to be remapped. - for (unsigned I = 0, E = Node->getNumOperands(); I != E; ++I) { - Metadata *Op = Node->getOperand(I); - if (Op == mapMetadataOp(Op, VM, Flags, TypeMapper, Materializer)) - continue; - - // Ok, at least one operand needs remapping. - SmallVector<Metadata *, 4> Elts; - Elts.reserve(Node->getNumOperands()); - for (I = 0; I != E; ++I) - Elts.push_back(mapMetadataOp(Node->getOperand(I), VM, Flags, TypeMapper, - Materializer)); - - MDNode *NewMD = MDTuple::get(Node->getContext(), Elts); - Dummy->replaceAllUsesWith(NewMD); + if (!shouldRemapUniquedNode(Node, VM, Flags, TypeMapper, Materializer)) { + // Use an identity mapping. + mapToSelf(VM, Node); MDNode::deleteTemporary(Dummy); - return mapToMetadata(VM, Node, NewMD); + return const_cast<Metadata *>(static_cast<const Metadata *>(Node)); } - // No operands needed remapping. Use an identity mapping. - mapToSelf(VM, Node); + // At least one operand needs remapping. + SmallVector<Metadata *, 4> Elts; + Elts.reserve(Node->getNumOperands()); + for (unsigned I = 0, E = Node->getNumOperands(); I != E; ++I) + Elts.push_back(mapMetadataOp(Node->getOperand(I), VM, Flags, TypeMapper, + Materializer)); + + MDNode *NewMD = MDTuple::get(Node->getContext(), Elts); + Dummy->replaceAllUsesWith(NewMD); MDNode::deleteTemporary(Dummy); - return const_cast<Metadata *>(static_cast<const Metadata *>(Node)); + return mapToMetadata(VM, Node, NewMD); } static Metadata *MapMetadataImpl(const Metadata *MD, ValueToValueMapTy &VM, |

