AsmWriter: Split out code for printing Metadata attachments, NFC
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 24 Apr 2015 20:59:52 +0000 (20:59 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 24 Apr 2015 20:59:52 +0000 (20:59 +0000)
Refactor the code for printing `Instruction` metadata attachments so it
can be reused for `Function`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235772 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/AsmWriter.cpp

index fe6770ea5c61d56241493c27364a57ae9788e91f..7d0422d8c0af9f3370139d6a5815a6e8190838f4 100644 (file)
@@ -1987,6 +1987,10 @@ public:
 private:
   void init();
 
 private:
   void init();
 
+  /// \brief Print out metadata attachments.
+  void printMetadataAttachments(
+      const SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs);
+
   // printInfoComment - Print a little comment after the instruction indicating
   // which slot it occupies.
   void printInfoComment(const Value &V);
   // printInfoComment - Print a little comment after the instruction indicating
   // which slot it occupies.
   void printInfoComment(const Value &V);
@@ -2952,22 +2956,29 @@ void AssemblyWriter::printInstruction(const Instruction &I) {
   // Print Metadata info.
   SmallVector<std::pair<unsigned, MDNode *>, 4> InstMD;
   I.getAllMetadata(InstMD);
   // Print Metadata info.
   SmallVector<std::pair<unsigned, MDNode *>, 4> InstMD;
   I.getAllMetadata(InstMD);
-  if (!InstMD.empty()) {
-    SmallVector<StringRef, 8> MDNames;
-    I.getType()->getContext().getMDKindNames(MDNames);
-    for (unsigned i = 0, e = InstMD.size(); i != e; ++i) {
-      unsigned Kind = InstMD[i].first;
-       if (Kind < MDNames.size()) {
-         Out << ", !" << MDNames[Kind];
-       } else {
-         Out << ", !<unknown kind #" << Kind << ">";
-       }
-      Out << ' ';
-      WriteAsOperandInternal(Out, InstMD[i].second, &TypePrinter, &Machine,
-                             TheModule);
+  printMetadataAttachments(InstMD);
+
+  // Print a nice comment.
+  printInfoComment(I);
+}
+
+void AssemblyWriter::printMetadataAttachments(
+    const SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) {
+  if (MDs.empty())
+    return;
+
+  SmallVector<StringRef, 8> MDNames;
+  TheModule->getMDKindNames(MDNames);
+  for (const auto &I : MDs) {
+    unsigned Kind = I.first;
+    if (Kind < MDNames.size()) {
+      Out << ", !" << MDNames[Kind];
+    } else {
+      Out << ", !<unknown kind #" << Kind << ">";
     }
     }
+    Out << ' ';
+    WriteAsOperandInternal(Out, I.second, &TypePrinter, &Machine, TheModule);
   }
   }
-  printInfoComment(I);
 }
 
 void AssemblyWriter::writeMDNode(unsigned Slot, const MDNode *Node) {
 }
 
 void AssemblyWriter::writeMDNode(unsigned Slot, const MDNode *Node) {