diff --git a/lib/IR/AsmWriter.cpp b/lib/IR/AsmWriter.cpp index fe6770ea5c6..7d0422d8c0a 100644 --- a/lib/IR/AsmWriter.cpp +++ b/lib/IR/AsmWriter.cpp @@ -1987,6 +1987,10 @@ public: private: void init(); + /// \brief Print out metadata attachments. + void printMetadataAttachments( + const SmallVectorImpl> &MDs); + // printInfoComment - Print a little comment after the instruction indicating // which slot it occupies. void printInfoComment(const Value &V); @@ -2952,24 +2956,31 @@ void AssemblyWriter::printInstruction(const Instruction &I) { // Print Metadata info. SmallVector, 4> InstMD; I.getAllMetadata(InstMD); - if (!InstMD.empty()) { - SmallVector 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 << ", !"; - } - Out << ' '; - WriteAsOperandInternal(Out, InstMD[i].second, &TypePrinter, &Machine, - TheModule); - } - } + printMetadataAttachments(InstMD); + + // Print a nice comment. printInfoComment(I); } +void AssemblyWriter::printMetadataAttachments( + const SmallVectorImpl> &MDs) { + if (MDs.empty()) + return; + + SmallVector MDNames; + TheModule->getMDKindNames(MDNames); + for (const auto &I : MDs) { + unsigned Kind = I.first; + if (Kind < MDNames.size()) { + Out << ", !" << MDNames[Kind]; + } else { + Out << ", !"; + } + Out << ' '; + WriteAsOperandInternal(Out, I.second, &TypePrinter, &Machine, TheModule); + } +} + void AssemblyWriter::writeMDNode(unsigned Slot, const MDNode *Node) { Out << '!' << Slot << " = "; printMDNodeBody(Node);