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