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
76HANDLE_METADATA_LEAF(MDString)
77HANDLE_METADATA_BRANCH(ValueAsMetadata)
78HANDLE_METADATA_LEAF(ConstantAsMetadata)
79HANDLE_METADATA_LEAF(LocalAsMetadata)
80HANDLE_METADATA_LEAF(DistinctMDOperandPlaceholder)
81HANDLE_MDNODE_BRANCH(MDNode)
82HANDLE_MDNODE_LEAF_UNIQUABLE(MDTuple)
83HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocation)
84HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIExpression)
85HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariableExpression)
86HANDLE_SPECIALIZED_MDNODE_BRANCH(DINode)
87HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(GenericDINode)
88HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubrange)
89HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIEnumerator)
90HANDLE_SPECIALIZED_MDNODE_BRANCH(DIScope)
91HANDLE_SPECIALIZED_MDNODE_BRANCH(DIType)
92HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIBasicType)
93HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIDerivedType)
94HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DICompositeType)
95HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubroutineType)
96HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIFile)
97HANDLE_SPECIALIZED_MDNODE_LEAF(DICompileUnit)
98HANDLE_SPECIALIZED_MDNODE_BRANCH(DILocalScope)
99HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DISubprogram)
100HANDLE_SPECIALIZED_MDNODE_BRANCH(DILexicalBlockBase)
101HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILexicalBlock)
102HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILexicalBlockFile)
103HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DINamespace)
104HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIModule)
105HANDLE_SPECIALIZED_MDNODE_BRANCH(DITemplateParameter)
106HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateTypeParameter)
107HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DITemplateValueParameter)
108HANDLE_SPECIALIZED_MDNODE_BRANCH(DIVariable)
109HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariable)
110HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocalVariable)
111HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILabel)
112HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIObjCProperty)
113HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity)
114HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode)
115HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro)
116HANDLE_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