+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"
+ }
+}
+