diff options
author | Chris Lattner <sabre@nondot.org> | 2009-12-31 02:31:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-12-31 02:31:59 +0000 |
commit | ac6b6066b97517e6f71a0145b430f611783f7dee (patch) | |
tree | fa5f16cc9bee11ac676a8e7b2059e17980d3c410 /lib/VMCore/AsmWriter.cpp | |
parent | c1556d0a5aa35e24c7b05e18b6a78241e8d15e83 (diff) | |
download | external_llvm-ac6b6066b97517e6f71a0145b430f611783f7dee.zip external_llvm-ac6b6066b97517e6f71a0145b430f611783f7dee.tar.gz external_llvm-ac6b6066b97517e6f71a0145b430f611783f7dee.tar.bz2 |
eliminate another copy of the mdnode printing logic, simplify the
one that remains.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92334 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/AsmWriter.cpp')
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 90160fc..b1b806a 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -1074,6 +1074,27 @@ static void WriteConstantInt(raw_ostream &Out, const Constant *CV, Out << "<placeholder or erroneous Constant>"; } +static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node, + TypePrinting *TypePrinter, + SlotTracker *Machine) { + Out << "!{"; + for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) { + const Value *V = Node->getOperand(mi); + if (V == 0) + Out << "null"; + else { + TypePrinter->print(V->getType(), Out); + Out << ' '; + WriteAsOperandInternal(Out, Node->getOperand(mi), + TypePrinter, Machine); + } + if (mi + 1 != me) + Out << ", "; + } + + Out << "}"; +} + /// WriteAsOperand - Write the name of the specified value out to the specified /// ostream. This can be useful when you just want to print int %reg126, not @@ -1111,20 +1132,7 @@ static void WriteAsOperandInternal(raw_ostream &Out, const Value *V, if (const MDNode *N = dyn_cast<MDNode>(V)) { if (N->isFunctionLocal()) { // Print metadata inline, not via slot reference number. - Out << "!{"; - for (unsigned mi = 0, me = N->getNumOperands(); mi != me; ++mi) { - const Value *Val = N->getOperand(mi); - if (!Val) - Out << "null"; - else { - TypePrinter->print(N->getOperand(mi)->getType(), Out); - Out << ' '; - WriteAsOperandInternal(Out, N->getOperand(mi), TypePrinter, Machine); - } - if (mi + 1 != me) - Out << ", "; - } - Out << '}'; + WriteMDNodeBodyInternal(Out, N, TypePrinter, Machine); return; } @@ -1999,24 +2007,7 @@ void AssemblyWriter::writeAllMDNodes() { } void AssemblyWriter::printMDNodeBody(const MDNode *Node) { - Out << "!{"; - for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) { - const Value *V = Node->getOperand(mi); - if (V == 0) - Out << "null"; - else if (const MDNode *N = dyn_cast<MDNode>(V)) { - Out << "metadata !" << Machine.getMetadataSlot(N); - } else { - TypePrinter.print(V->getType(), Out); - Out << ' '; - WriteAsOperandInternal(Out, Node->getOperand(mi), - &TypePrinter, &Machine); - } - if (mi + 1 != me) - Out << ", "; - } - - Out << "}"; + WriteMDNodeBodyInternal(Out, Node, &TypePrinter, &Machine); WriteMDNodeComment(Node, Out); Out << "\n"; } |