Merging r260587:
[oota-llvm.git] / include / llvm / IR / Metadata.def
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_MDNODE_BRANCH(MDNode)
81 HANDLE_MDNODE_LEAF_UNIQUABLE(MDTuple)
82 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocation)
83 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIExpression)
84 HANDLE_SPECIALIZED_MDNODE_BRANCH(DINode)
85 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(GenericDINode)
86 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubrange)
87 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIEnumerator)
88 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIScope)
89 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIType)
90 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIBasicType)
91 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIDerivedType)
92 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DICompositeType)
93 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubroutineType)
94 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIFile)
95 HANDLE_SPECIALIZED_MDNODE_LEAF(DICompileUnit)
96 HANDLE_SPECIALIZED_MDNODE_BRANCH(DILocalScope)
97 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubprogram)
98 HANDLE_SPECIALIZED_MDNODE_BRANCH(DILexicalBlockBase)
99 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILexicalBlock)
100 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILexicalBlockFile)
101 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DINamespace)
102 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIModule)
103 HANDLE_SPECIALIZED_MDNODE_BRANCH(DITemplateParameter)
104 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateTypeParameter)
105 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateValueParameter)
106 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIVariable)
107 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariable)
108 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocalVariable)
109 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIObjCProperty)
110 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity)
111 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode)
112 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro)
113 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacroFile)
114
115 #undef HANDLE_METADATA
116 #undef HANDLE_METADATA_LEAF
117 #undef HANDLE_METADATA_BRANCH
118 #undef HANDLE_MDNODE_LEAF
119 #undef HANDLE_MDNODE_LEAF_UNIQUABLE
120 #undef HANDLE_MDNODE_BRANCH
121 #undef HANDLE_SPECIALIZED_MDNODE_LEAF
122 #undef HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE
123 #undef HANDLE_SPECIALIZED_MDNODE_BRANCH