1/*===-- llvm-c/Support.h - C Interface Types declarations ---------*- 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|* This file defines types used by the the C interface to LLVM. *| 11|* *| 12\*===----------------------------------------------------------------------===*/ 13 14#ifndef LLVM_C_TYPES_H 15#define LLVM_C_TYPES_H 16 17#include "llvm/Support/DataTypes.h" 18 19#ifdef __cplusplus 20extern "C" { 21#endif 22 23/** 24 * @defgroup LLVMCSupportTypes Types and Enumerations 25 * 26 * @{ 27 */ 28 29typedef int LLVMBool; 30 31/* Opaque types. */ 32 33/** 34 * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore 35 * parameters must be passed as base types. Despite the declared types, most 36 * of the functions provided operate only on branches of the type hierarchy. 37 * The declared parameter names are descriptive and specify which type is 38 * required. Additionally, each type hierarchy is documented along with the 39 * functions that operate upon it. For more detail, refer to LLVM's C++ code. 40 * If in doubt, refer to Core.cpp, which performs parameter downcasts in the 41 * form unwrap<RequiredType>(Param). 42 */ 43 44/** 45 * Used to pass regions of memory through LLVM interfaces. 46 * 47 * @see llvm::MemoryBuffer 48 */ 49typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef; 50 51/** 52 * The top-level container for all LLVM global data. See the LLVMContext class. 53 */ 54typedef struct LLVMOpaqueContext *LLVMContextRef; 55 56/** 57 * The top-level container for all other LLVM Intermediate Representation (IR) 58 * objects. 59 * 60 * @see llvm::Module 61 */ 62typedef struct LLVMOpaqueModule *LLVMModuleRef; 63 64/** 65 * Each value in the LLVM IR has a type, an LLVMTypeRef. 66 * 67 * @see llvm::Type 68 */ 69typedef struct LLVMOpaqueType *LLVMTypeRef; 70 71/** 72 * Represents an individual value in LLVM IR. 73 * 74 * This models llvm::Value. 75 */ 76typedef struct LLVMOpaqueValue *LLVMValueRef; 77 78/** 79 * Represents a basic block of instructions in LLVM IR. 80 * 81 * This models llvm::BasicBlock. 82 */ 83typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef; 84 85/** 86 * Represents an LLVM basic block builder. 87 * 88 * This models llvm::IRBuilder. 89 */ 90typedef struct LLVMOpaqueBuilder *LLVMBuilderRef; 91 92/** 93 * Interface used to provide a module to JIT or interpreter. 94 * This is now just a synonym for llvm::Module, but we have to keep using the 95 * different type to keep binary compatibility. 96 */ 97typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef; 98 99/** @see llvm::PassManagerBase */ 100typedef struct LLVMOpaquePassManager *LLVMPassManagerRef; 101 102/** @see llvm::PassRegistry */ 103typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef; 104 105/** 106 * Used to get the users and usees of a Value. 107 * 108 * @see llvm::Use */ 109typedef struct LLVMOpaqueUse *LLVMUseRef; 110 111/** 112 * Used to represent an attributes. 113 * 114 * @see llvm::Attribute 115 */ 116typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef; 117 118/** 119 * @see llvm::DiagnosticInfo 120 */ 121typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef; 122 123/** 124 * @} 125 */ 126 127#ifdef __cplusplus 128} 129#endif 130 131#endif 132