[llvm] r225911 - Utils: Extract shouldRemapUniquedNode(), NFC

Duncan P. N. Exon Smith dexonsmith at apple.com
Tue Jan 13 17:08:47 PST 2015


Author: dexonsmith
Date: Tue Jan 13 19:08:47 2015
New Revision: 225911

URL: http://llvm.org/viewvc/llvm-project?rev=225911&view=rev
Log:
Utils: Extract shouldRemapUniquedNode(), NFC

Modified:
    llvm/trunk/lib/Transforms/Utils/ValueMapper.cpp

Modified: llvm/trunk/lib/Transforms/Utils/ValueMapper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/ValueMapper.cpp?rev=225911&r1=225910&r2=225911&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/ValueMapper.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/ValueMapper.cpp Tue Jan 13 19:08:47 2015
@@ -202,6 +202,23 @@ static Metadata *mapDistinctNode(const U
   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 Un
   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,





More information about the llvm-commits mailing list