Home | History | Annotate | Download | only in IR
      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