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 | cdec581a355b77064c3083eb1999cf4dd3c29d7e (patch) | |
| tree | 980b297dccc4e450fb8d6e92e8dea4e420cf91dc /llvm/lib/VMCore/AsmWriter.cpp | |
| parent | 0d50bddda62ee177b71229bfb6799c7950163097 (diff) | |
| download | bcm5719-llvm-cdec581a355b77064c3083eb1999cf4dd3c29d7e.tar.gz bcm5719-llvm-cdec581a355b77064c3083eb1999cf4dd3c29d7e.zip | |
eliminate another copy of the mdnode printing logic, simplify the
one that remains.
llvm-svn: 92334
Diffstat (limited to 'llvm/lib/VMCore/AsmWriter.cpp')
| -rw-r--r-- | llvm/lib/VMCore/AsmWriter.cpp | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp index 90160fcd22a..b1b806adea7 100644 --- a/llvm/lib/VMCore/AsmWriter.cpp +++ b/llvm/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"; } |

