123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- /*===-- llvm-c/Target.h - Target Lib C Iface --------------------*- C++ -*-===*/
- /* */
- /* Part of the LLVM Project, under the Apache License v2.0 with LLVM */
- /* Exceptions. */
- /* See https://llvm.org/LICENSE.txt for license information. */
- /* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */
- /* */
- /*===----------------------------------------------------------------------===*/
- /* */
- /* This header declares the C interface to libLLVMTarget.a, which */
- /* implements target information. */
- /* */
- /* Many exotic languages can interoperate with C code but have a harder time */
- /* with C++ due to name mangling. So in addition to C, this interface enables */
- /* tools written in such languages. */
- /* */
- /*===----------------------------------------------------------------------===*/
- #ifndef LLVM_C_TARGET_H
- #define LLVM_C_TARGET_H
- #include "llvm-c/ExternC.h"
- #include "llvm-c/Types.h"
- #include "llvm/Config/llvm-config.h"
- LLVM_C_EXTERN_C_BEGIN
- /**
- * @defgroup LLVMCTarget Target information
- * @ingroup LLVMC
- *
- * @{
- */
- enum LLVMByteOrdering { LLVMBigEndian, LLVMLittleEndian };
- typedef struct LLVMOpaqueTargetData *LLVMTargetDataRef;
- typedef struct LLVMOpaqueTargetLibraryInfotData *LLVMTargetLibraryInfoRef;
- /* Declare all of the target-initialization functions that are available. */
- #define LLVM_TARGET(TargetName) \
- void LLVMInitialize##TargetName##TargetInfo(void);
- #include "llvm/Config/Targets.def"
- #undef LLVM_TARGET /* Explicit undef to make SWIG happier */
- #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target(void);
- #include "llvm/Config/Targets.def"
- #undef LLVM_TARGET /* Explicit undef to make SWIG happier */
- #define LLVM_TARGET(TargetName) \
- void LLVMInitialize##TargetName##TargetMC(void);
- #include "llvm/Config/Targets.def"
- #undef LLVM_TARGET /* Explicit undef to make SWIG happier */
- /* Declare all of the available assembly printer initialization functions. */
- #define LLVM_ASM_PRINTER(TargetName) \
- void LLVMInitialize##TargetName##AsmPrinter(void);
- #include "llvm/Config/AsmPrinters.def"
- #undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
- /* Declare all of the available assembly parser initialization functions. */
- #define LLVM_ASM_PARSER(TargetName) \
- void LLVMInitialize##TargetName##AsmParser(void);
- #include "llvm/Config/AsmParsers.def"
- #undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
- /* Declare all of the available disassembler initialization functions. */
- #define LLVM_DISASSEMBLER(TargetName) \
- void LLVMInitialize##TargetName##Disassembler(void);
- #include "llvm/Config/Disassemblers.def"
- #undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
- /** LLVMInitializeAllTargetInfos - The main program should call this function if
- it wants access to all available targets that LLVM is configured to
- support. */
- static inline void LLVMInitializeAllTargetInfos(void) {
- #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
- #include "llvm/Config/Targets.def"
- #undef LLVM_TARGET /* Explicit undef to make SWIG happier */
- }
- /** LLVMInitializeAllTargets - The main program should call this function if it
- wants to link in all available targets that LLVM is configured to
- support. */
- static inline void LLVMInitializeAllTargets(void) {
- #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
- #include "llvm/Config/Targets.def"
- #undef LLVM_TARGET /* Explicit undef to make SWIG happier */
- }
- /** LLVMInitializeAllTargetMCs - The main program should call this function if
- it wants access to all available target MC that LLVM is configured to
- support. */
- static inline void LLVMInitializeAllTargetMCs(void) {
- #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC();
- #include "llvm/Config/Targets.def"
- #undef LLVM_TARGET /* Explicit undef to make SWIG happier */
- }
- /** LLVMInitializeAllAsmPrinters - The main program should call this function if
- it wants all asm printers that LLVM is configured to support, to make them
- available via the TargetRegistry. */
- static inline void LLVMInitializeAllAsmPrinters(void) {
- #define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
- #include "llvm/Config/AsmPrinters.def"
- #undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
- }
- /** LLVMInitializeAllAsmParsers - The main program should call this function if
- it wants all asm parsers that LLVM is configured to support, to make them
- available via the TargetRegistry. */
- static inline void LLVMInitializeAllAsmParsers(void) {
- #define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser();
- #include "llvm/Config/AsmParsers.def"
- #undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
- }
- /** LLVMInitializeAllDisassemblers - The main program should call this function
- if it wants all disassemblers that LLVM is configured to support, to make
- them available via the TargetRegistry. */
- static inline void LLVMInitializeAllDisassemblers(void) {
- #define LLVM_DISASSEMBLER(TargetName) \
- LLVMInitialize##TargetName##Disassembler();
- #include "llvm/Config/Disassemblers.def"
- #undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
- }
- /** LLVMInitializeNativeTarget - The main program should call this function to
- initialize the native target corresponding to the host. This is useful
- for JIT applications to ensure that the target gets linked in correctly. */
- static inline LLVMBool LLVMInitializeNativeTarget(void) {
- /* If we have a native target, initialize it to ensure it is linked in. */
- #ifdef LLVM_NATIVE_TARGET
- LLVM_NATIVE_TARGETINFO();
- LLVM_NATIVE_TARGET();
- LLVM_NATIVE_TARGETMC();
- return 0;
- #else
- return 1;
- #endif
- }
- /** LLVMInitializeNativeTargetAsmParser - The main program should call this
- function to initialize the parser for the native target corresponding to the
- host. */
- static inline LLVMBool LLVMInitializeNativeAsmParser(void) {
- #ifdef LLVM_NATIVE_ASMPARSER
- LLVM_NATIVE_ASMPARSER();
- return 0;
- #else
- return 1;
- #endif
- }
- /** LLVMInitializeNativeTargetAsmPrinter - The main program should call this
- function to initialize the printer for the native target corresponding to
- the host. */
- static inline LLVMBool LLVMInitializeNativeAsmPrinter(void) {
- #ifdef LLVM_NATIVE_ASMPRINTER
- LLVM_NATIVE_ASMPRINTER();
- return 0;
- #else
- return 1;
- #endif
- }
- /** LLVMInitializeNativeTargetDisassembler - The main program should call this
- function to initialize the disassembler for the native target corresponding
- to the host. */
- static inline LLVMBool LLVMInitializeNativeDisassembler(void) {
- #ifdef LLVM_NATIVE_DISASSEMBLER
- LLVM_NATIVE_DISASSEMBLER();
- return 0;
- #else
- return 1;
- #endif
- }
- /*===-- Target Data -------------------------------------------------------===*/
- /**
- * Obtain the data layout for a module.
- *
- * @see Module::getDataLayout()
- */
- LLVMTargetDataRef LLVMGetModuleDataLayout(LLVMModuleRef M);
- /**
- * Set the data layout for a module.
- *
- * @see Module::setDataLayout()
- */
- void LLVMSetModuleDataLayout(LLVMModuleRef M, LLVMTargetDataRef DL);
- /** Creates target data from a target layout string.
- See the constructor llvm::DataLayout::DataLayout. */
- LLVMTargetDataRef LLVMCreateTargetData(const char *StringRep);
- /** Deallocates a TargetData.
- See the destructor llvm::DataLayout::~DataLayout. */
- void LLVMDisposeTargetData(LLVMTargetDataRef TD);
- /** Adds target library information to a pass manager. This does not take
- ownership of the target library info.
- See the method llvm::PassManagerBase::add. */
- void LLVMAddTargetLibraryInfo(LLVMTargetLibraryInfoRef TLI,
- LLVMPassManagerRef PM);
- /** Converts target data to a target layout string. The string must be disposed
- with LLVMDisposeMessage.
- See the constructor llvm::DataLayout::DataLayout. */
- char *LLVMCopyStringRepOfTargetData(LLVMTargetDataRef TD);
- /** Returns the byte order of a target, either LLVMBigEndian or
- LLVMLittleEndian.
- See the method llvm::DataLayout::isLittleEndian. */
- enum LLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD);
- /** Returns the pointer size in bytes for a target.
- See the method llvm::DataLayout::getPointerSize. */
- unsigned LLVMPointerSize(LLVMTargetDataRef TD);
- /** Returns the pointer size in bytes for a target for a specified
- address space.
- See the method llvm::DataLayout::getPointerSize. */
- unsigned LLVMPointerSizeForAS(LLVMTargetDataRef TD, unsigned AS);
- /** Returns the integer type that is the same size as a pointer on a target.
- See the method llvm::DataLayout::getIntPtrType. */
- LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD);
- /** Returns the integer type that is the same size as a pointer on a target.
- This version allows the address space to be specified.
- See the method llvm::DataLayout::getIntPtrType. */
- LLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, unsigned AS);
- /** Returns the integer type that is the same size as a pointer on a target.
- See the method llvm::DataLayout::getIntPtrType. */
- LLVMTypeRef LLVMIntPtrTypeInContext(LLVMContextRef C, LLVMTargetDataRef TD);
- /** Returns the integer type that is the same size as a pointer on a target.
- This version allows the address space to be specified.
- See the method llvm::DataLayout::getIntPtrType. */
- LLVMTypeRef LLVMIntPtrTypeForASInContext(LLVMContextRef C, LLVMTargetDataRef TD,
- unsigned AS);
- /** Computes the size of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeSizeInBits. */
- unsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty);
- /** Computes the storage size of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeStoreSize. */
- unsigned long long LLVMStoreSizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
- /** Computes the ABI size of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeAllocSize. */
- unsigned long long LLVMABISizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
- /** Computes the ABI alignment of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeABISize. */
- unsigned LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
- /** Computes the call frame alignment of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeABISize. */
- unsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
- /** Computes the preferred alignment of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeABISize. */
- unsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
- /** Computes the preferred alignment of a global variable in bytes for a target.
- See the method llvm::DataLayout::getPreferredAlignment. */
- unsigned LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef TD,
- LLVMValueRef GlobalVar);
- /** Computes the structure element that contains the byte offset for a target.
- See the method llvm::StructLayout::getElementContainingOffset. */
- unsigned LLVMElementAtOffset(LLVMTargetDataRef TD, LLVMTypeRef StructTy,
- unsigned long long Offset);
- /** Computes the byte offset of the indexed struct element for a target.
- See the method llvm::StructLayout::getElementContainingOffset. */
- unsigned long long LLVMOffsetOfElement(LLVMTargetDataRef TD,
- LLVMTypeRef StructTy, unsigned Element);
- /**
- * @}
- */
- LLVM_C_EXTERN_C_END
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|