1//===- llvm/IR/Metadata.def - Metadata definitions --------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// Macros for running through all types of metadata. 10// 11//===----------------------------------------------------------------------===// 12 13#if !(defined HANDLE_METADATA || defined HANDLE_METADATA_LEAF || \ 14 defined HANDLE_METADATA_BRANCH || defined HANDLE_MDNODE_LEAF || \ 15 defined HANDLE_MDNODE_LEAF_UNIQUABLE || defined HANDLE_MDNODE_BRANCH || \ 16 defined HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE || \ 17 defined HANDLE_SPECIALIZED_MDNODE_LEAF || \ 18 defined HANDLE_SPECIALIZED_MDNODE_BRANCH) 19#error "Missing macro definition of HANDLE_METADATA*" 20#endif 21 22// Handler for all types of metadata. 23#ifndef HANDLE_METADATA 24#define HANDLE_METADATA(CLASS) 25#endif 26 27// Handler for leaf nodes in the class hierarchy. 28#ifndef HANDLE_METADATA_LEAF 29#define HANDLE_METADATA_LEAF(CLASS) HANDLE_METADATA(CLASS) 30#endif 31 32// Handler for non-leaf nodes in the class hierarchy. 33#ifndef HANDLE_METADATA_BRANCH 34#define HANDLE_METADATA_BRANCH(CLASS) HANDLE_METADATA(CLASS) 35#endif 36 37// Handler for specialized and uniquable leaf nodes under MDNode. Defers to 38// HANDLE_MDNODE_LEAF_UNIQUABLE if it's defined, otherwise to 39// HANDLE_SPECIALIZED_MDNODE_LEAF. 40#ifndef HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE 41#ifdef HANDLE_MDNODE_LEAF_UNIQUABLE 42#define HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(CLASS) \ 43 HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) 44#else 45#define HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(CLASS) \ 46 HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) 47#endif 48#endif 49 50// Handler for leaf nodes under MDNode. 51#ifndef HANDLE_MDNODE_LEAF_UNIQUABLE 52#define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) HANDLE_MDNODE_LEAF(CLASS) 53#endif 54 55// Handler for leaf nodes under MDNode. 56#ifndef HANDLE_MDNODE_LEAF 57#define HANDLE_MDNODE_LEAF(CLASS) HANDLE_METADATA_LEAF(CLASS) 58#endif 59 60// Handler for non-leaf nodes under MDNode. 61#ifndef HANDLE_MDNODE_BRANCH 62#define HANDLE_MDNODE_BRANCH(CLASS) HANDLE_METADATA_BRANCH(CLASS) 63#endif 64 65// Handler for specialized leaf nodes under MDNode. 66#ifndef HANDLE_SPECIALIZED_MDNODE_LEAF 67#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) HANDLE_MDNODE_LEAF(CLASS) 68#endif 69 70// Handler for specialized non-leaf nodes under MDNode. 71#ifndef HANDLE_SPECIALIZED_MDNODE_BRANCH 72#define HANDLE_SPECIALIZED_MDNODE_BRANCH(CLASS) HANDLE_MDNODE_BRANCH(CLASS) 73#endif 74 75HANDLE_METADATA_LEAF(MDString) 76HANDLE_METADATA_BRANCH(ValueAsMetadata) 77HANDLE_METADATA_LEAF(ConstantAsMetadata) 78HANDLE_METADATA_LEAF(LocalAsMetadata) 79HANDLE_METADATA_LEAF(DistinctMDOperandPlaceholder) 80HANDLE_METADATA_LEAF(DIArgList) 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_LEAF(DIAssignID) 115HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode) 116HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacro) 117HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIMacroFile) 118HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DICommonBlock) 119HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIStringType) 120HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGenericSubrange) 121 122#undef HANDLE_METADATA 123#undef HANDLE_METADATA_LEAF 124#undef HANDLE_METADATA_BRANCH 125#undef HANDLE_MDNODE_LEAF 126#undef HANDLE_MDNODE_LEAF_UNIQUABLE 127#undef HANDLE_MDNODE_BRANCH 128#undef HANDLE_SPECIALIZED_MDNODE_LEAF 129#undef HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE 130#undef HANDLE_SPECIALIZED_MDNODE_BRANCH 131