aboutsummaryrefslogtreecommitdiffstats
path: root/lib/VMCore/AsmWriter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-12-31 02:31:59 +0000
committerChris Lattner <sabre@nondot.org>2009-12-31 02:31:59 +0000
commitac6b6066b97517e6f71a0145b430f611783f7dee (patch)
treefa5f16cc9bee11ac676a8e7b2059e17980d3c410 /lib/VMCore/AsmWriter.cpp
parentc1556d0a5aa35e24c7b05e18b6a78241e8d15e83 (diff)
downloadexternal_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.cpp55
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";
}