//===-- gen/metadata.h - LDC-specific LLVM metadata definitions -*- C++ -*-===// // // LDC – the LLVM D compiler // // This file is distributed under the BSD-style LDC license. See the LICENSE // file for details. // //===----------------------------------------------------------------------===// // // Defines the types of LLVM metadata used for D-specific optimization passes. // //===----------------------------------------------------------------------===// #if USE_METADATA #ifndef LDC_GEN_METADATA_H #define LDC_GEN_METADATA_H // MDNode was moved into its own header, and contains Value*s #if LDC_LLVM_VER >= 303 #include "llvm/IR/Metadata.h" #else #include "llvm/Metadata.h" #endif typedef llvm::Value MDNodeField; #define METADATA_LINKAGE_TYPE llvm::GlobalValue::WeakODRLinkage // *** Metadata for TypeInfo instances *** #define TD_PREFIX "llvm.ldc.typeinfo." /// The fields in the metadata node for a TypeInfo instance. /// (Its name will be TD_PREFIX ~ ) enum TypeDataFields { TD_Confirm, /// The TypeInfo this node is for. TD_Type, /// A value of the LLVM type corresponding to this D type // Must be kept last: TD_NumFields /// The number of fields in TypeInfo metadata }; // *** Metadata for ClassInfo instances *** #define CD_PREFIX "llvm.ldc.classinfo." /// The fields in the metadata node for a ClassInfo instance. /// (Its name will be CD_PREFIX ~ ) enum ClassDataFields { CD_BodyType, /// A value of the LLVM type corresponding to the class body. CD_Finalize, /// True if this class (or a base class) has a destructor. CD_CustomDelete,/// True if this class has an overridden delete operator. // Must be kept last CD_NumFields /// The number of fields in ClassInfo metadata }; #endif #endif // USE_METADATA