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(DIObjCProperty) 112 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity) 113 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode) 114 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro) 115 HANDLE_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