[IR]PATCH 2/2: Add MDNode::printTree and dumpTree
authorMin-Yih Hsu <minyihh@uci.edu>
Sun, 12 Sep 2021 05:49:06 +0000 (22:49 -0700)
committerMin-Yih Hsu <minyihh@uci.edu>
Sun, 3 Oct 2021 04:19:52 +0000 (21:19 -0700)
commit475de8da011c8ae79c453fa43593ec5b35f52962
tree033b64c07fa9c6bef4007cb967ddb80e4304f1f1
parentb2d078fb0cac9e31eae616211275925a4d858f09
[IR]PATCH 2/2: Add MDNode::printTree and dumpTree

This patch adds the functionalities to print MDNode in tree shape. For
example, instead of printing a MDNode like this:
```
<0x5643e1166888> = !DILocalVariable(name: "foo", arg: 2, scope: <0x5643e11c9740>, file: <0x5643e11c6ec0>, line: 8, type: <0x5643e11ca8e0>, flags: DIFlagPublic | DIFlagFwdDecl, align: 8)
```
The printTree/dumpTree functions can give you:
```
<0x5643e1166888> = !DILocalVariable(name: "foo", arg: 2, scope: <0x5643e11c9740>, file: <0x5643e11c6ec0>, line: 8, type: <0x5643e11ca8e0>, flags: DIFlagPublic | DIFlagFwdDecl, align: 8)
  <0x5643e11c9740> = distinct !DISubprogram(scope: null, spFlags: 0)
  <0x5643e11c6ec0> = distinct !DIFile(filename: "file.c", directory: "/path/to/dir")
  <0x5643e11ca8e0> = distinct !DIDerivedType(tag: DW_TAG_pointer_type, baseType: <0x5643e11668d8>, size: 1, align: 2)
    <0x5643e11668d8> = !DIBasicType(tag: DW_TAG_unspecified_type, name: "basictype")
```
Which is useful when using it in debugger. Where sometimes printing the
whole module to see all MDNodes is too expensive.

Differential Revision: https://reviews.llvm.org/D110113
llvm/include/llvm/IR/Metadata.h
llvm/lib/IR/AsmWriter.cpp
llvm/unittests/IR/MetadataTest.cpp