IR: Split out writeMDTuple(), NFC

Prepare for more subclasses of `UniquableMDNode` than `MDTuple`.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225732 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-01-12 23:45:31 +00:00
parent df545e8d6c
commit 120c186fde

View File

@ -1249,12 +1249,9 @@ static void WriteConstantInternal(raw_ostream &Out, const Constant *CV,
Out << "<placeholder or erroneous Constant>";
}
static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node,
TypePrinting *TypePrinter,
SlotTracker *Machine,
const Module *Context) {
if (Node->isDistinct())
Out << "distinct ";
static void writeMDTuple(raw_ostream &Out, const MDTuple *Node,
TypePrinting *TypePrinter, SlotTracker *Machine,
const Module *Context) {
Out << "!{";
for (unsigned mi = 0, me = Node->getNumOperands(); mi != me; ++mi) {
const Metadata *MD = Node->getOperand(mi);
@ -1275,6 +1272,27 @@ static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node,
Out << "}";
}
static void WriteMDNodeBodyInternal(raw_ostream &Out, const MDNode *Node,
TypePrinting *TypePrinter,
SlotTracker *Machine,
const Module *Context) {
assert(isa<UniquableMDNode>(Node) && "Expected uniquable MDNode");
auto *Uniquable = cast<UniquableMDNode>(Node);
if (Uniquable->isDistinct())
Out << "distinct ";
switch (Uniquable->getMetadataID()) {
default:
llvm_unreachable("Expected uniquable MDNode");
#define HANDLE_UNIQUABLE_LEAF(CLASS) \
case Metadata::CLASS##Kind: \
write##CLASS(Out, cast<CLASS>(Uniquable), TypePrinter, Machine, Context); \
break;
#include "llvm/IR/Metadata.def"
}
}
// Full implementation of printing a Value as an operand with support for
// TypePrinting, etc.
static void WriteAsOperandInternal(raw_ostream &Out, const Value *V,