• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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(DIObjCProperty)
112HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity)
113HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode)
114HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro)
115HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacroFile)
116
117#undef HANDLE_METADATA
118#undef HANDLE_METADATA_LEAF
119#undef HANDLE_METADATA_BRANCH
120#undef HANDLE_MDNODE_LEAF
121#undef HANDLE_MDNODE_LEAF_UNIQUABLE
122#undef HANDLE_MDNODE_BRANCH
123#undef HANDLE_SPECIALIZED_MDNODE_LEAF
124#undef HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE
125#undef HANDLE_SPECIALIZED_MDNODE_BRANCH
126