1 | //===- llvm/IR/Metadata.def - Metadata definitions --------------*- C++ -*-===// |
---|---|
2 | // |
3 | // The LLVM Compiler Infrastructure |
4 | // |
5 | // This file is distributed under the University of Illinois Open Source |
6 | // License. See LICENSE.TXT for details. |
7 | // |
8 | //===----------------------------------------------------------------------===// |
9 | // |
10 | // Macros for running through all types of metadata. |
11 | // |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #if !(defined HANDLE_METADATA || defined HANDLE_METADATA_LEAF || \ |
15 | defined HANDLE_METADATA_BRANCH || defined HANDLE_MDNODE_LEAF || \ |
16 | defined HANDLE_MDNODE_LEAF_UNIQUABLE || defined HANDLE_MDNODE_BRANCH || \ |
17 | defined HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE || \ |
18 | defined HANDLE_SPECIALIZED_MDNODE_LEAF || \ |
19 | defined HANDLE_SPECIALIZED_MDNODE_BRANCH) |
20 | #error "Missing macro definition of HANDLE_METADATA*" |
21 | #endif |
22 | |
23 | // Handler for all types of metadata. |
24 | #ifndef HANDLE_METADATA |
25 | #define HANDLE_METADATA(CLASS) |
26 | #endif |
27 | |
28 | // Handler for leaf nodes in the class hierarchy. |
29 | #ifndef HANDLE_METADATA_LEAF |
30 | #define HANDLE_METADATA_LEAF(CLASS) HANDLE_METADATA(CLASS) |
31 | #endif |
32 | |
33 | // Handler for non-leaf nodes in the class hierarchy. |
34 | #ifndef HANDLE_METADATA_BRANCH |
35 | #define HANDLE_METADATA_BRANCH(CLASS) HANDLE_METADATA(CLASS) |
36 | #endif |
37 | |
38 | // Handler for specialized and uniquable leaf nodes under MDNode. Defers to |
39 | // HANDLE_MDNODE_LEAF_UNIQUABLE if it's defined, otherwise to |
40 | // HANDLE_SPECIALIZED_MDNODE_LEAF. |
41 | #ifndef HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE |
42 | #ifdef HANDLE_MDNODE_LEAF_UNIQUABLE |
43 | #define HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(CLASS) \ |
44 | HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) |
45 | #else |
46 | #define HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(CLASS) \ |
47 | HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) |
48 | #endif |
49 | #endif |
50 | |
51 | // Handler for leaf nodes under MDNode. |
52 | #ifndef HANDLE_MDNODE_LEAF_UNIQUABLE |
53 | #define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) HANDLE_MDNODE_LEAF(CLASS) |
54 | #endif |
55 | |
56 | // Handler for leaf nodes under MDNode. |
57 | #ifndef HANDLE_MDNODE_LEAF |
58 | #define HANDLE_MDNODE_LEAF(CLASS) HANDLE_METADATA_LEAF(CLASS) |
59 | #endif |
60 | |
61 | // Handler for non-leaf nodes under MDNode. |
62 | #ifndef HANDLE_MDNODE_BRANCH |
63 | #define HANDLE_MDNODE_BRANCH(CLASS) HANDLE_METADATA_BRANCH(CLASS) |
64 | #endif |
65 | |
66 | // Handler for specialized leaf nodes under MDNode. |
67 | #ifndef HANDLE_SPECIALIZED_MDNODE_LEAF |
68 | #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) HANDLE_MDNODE_LEAF(CLASS) |
69 | #endif |
70 | |
71 | // Handler for specialized non-leaf nodes under MDNode. |
72 | #ifndef HANDLE_SPECIALIZED_MDNODE_BRANCH |
73 | #define HANDLE_SPECIALIZED_MDNODE_BRANCH(CLASS) HANDLE_MDNODE_BRANCH(CLASS) |
74 | #endif |
75 | |
76 | HANDLE_METADATA_LEAF(MDString) |
77 | HANDLE_METADATA_BRANCH(ValueAsMetadata) |
78 | HANDLE_METADATA_LEAF(ConstantAsMetadata) |
79 | HANDLE_METADATA_LEAF(LocalAsMetadata) |
80 | HANDLE_METADATA_LEAF(DistinctMDOperandPlaceholder) |
81 | HANDLE_MDNODE_BRANCH(MDNode) |
82 | HANDLE_MDNODE_LEAF_UNIQUABLE(MDTuple) |
83 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocation) |
84 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIExpression) |
85 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariableExpression) |
86 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DINode) |
87 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(GenericDINode) |
88 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubrange) |
89 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIEnumerator) |
90 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DIScope) |
91 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DIType) |
92 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIBasicType) |
93 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIDerivedType) |
94 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DICompositeType) |
95 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubroutineType) |
96 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIFile) |
97 | HANDLE_SPECIALIZED_MDNODE_LEAF(DICompileUnit) |
98 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DILocalScope) |
99 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubprogram) |
100 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DILexicalBlockBase) |
101 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILexicalBlock) |
102 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILexicalBlockFile) |
103 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DINamespace) |
104 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIModule) |
105 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DITemplateParameter) |
106 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateTypeParameter) |
107 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateValueParameter) |
108 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DIVariable) |
109 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariable) |
110 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocalVariable) |
111 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILabel) |
112 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIObjCProperty) |
113 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity) |
114 | HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode) |
115 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro) |
116 | HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacroFile) |
117 | |
118 | #undef HANDLE_METADATA |
119 | #undef HANDLE_METADATA_LEAF |
120 | #undef HANDLE_METADATA_BRANCH |
121 | #undef HANDLE_MDNODE_LEAF |
122 | #undef HANDLE_MDNODE_LEAF_UNIQUABLE |
123 | #undef HANDLE_MDNODE_BRANCH |
124 | #undef HANDLE_SPECIALIZED_MDNODE_LEAF |
125 | #undef HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE |
126 | #undef HANDLE_SPECIALIZED_MDNODE_BRANCH |
127 |