holdingarea/llvm/llvm-2.7/include/llvm-c/Target.h
branchbug235_bringup_0
changeset 20 d2d6724aef32
child 24 a3f46bb01be2
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     1 /*===-- llvm-c/Target.h - Target Lib C Iface --------------------*- 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 header declares the C interface to libLLVMTarget.a, which             *|
       
    11 |* implements target information.                                             *|
       
    12 |*                                                                            *|
       
    13 |* Many exotic languages can interoperate with C code but have a harder time  *|
       
    14 |* with C++ due to name mangling. So in addition to C, this interface enables *|
       
    15 |* tools written in such languages.                                           *|
       
    16 |*                                                                            *|
       
    17 \*===----------------------------------------------------------------------===*/
       
    18 
       
    19 #ifndef LLVM_C_TARGET_H
       
    20 #define LLVM_C_TARGET_H
       
    21 
       
    22 #include "llvm-c/Core.h"
       
    23 #include "llvm/Config/config.h"
       
    24 
       
    25 #ifdef __cplusplus
       
    26 extern "C" {
       
    27 #endif
       
    28 
       
    29 enum LLVMByteOrdering { LLVMBigEndian, LLVMLittleEndian };
       
    30 
       
    31 typedef struct LLVMOpaqueTargetData *LLVMTargetDataRef;
       
    32 typedef struct LLVMStructLayout *LLVMStructLayoutRef;
       
    33 
       
    34 /* Declare all of the target-initialization functions that are available. */
       
    35 #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##TargetInfo();
       
    36 #include "llvm/Config/Targets.def"
       
    37 #undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
       
    38   
       
    39 #define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target();
       
    40 #include "llvm/Config/Targets.def"
       
    41 #undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
       
    42 
       
    43 /** LLVMInitializeAllTargetInfos - The main program should call this function if
       
    44     it wants access to all available targets that LLVM is configured to
       
    45     support. */
       
    46 static inline void LLVMInitializeAllTargetInfos() {
       
    47 #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
       
    48 #include "llvm/Config/Targets.def"
       
    49 #undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
       
    50 }
       
    51 
       
    52 /** LLVMInitializeAllTargets - The main program should call this function if it
       
    53     wants to link in all available targets that LLVM is configured to
       
    54     support. */
       
    55 static inline void LLVMInitializeAllTargets() {
       
    56 #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
       
    57 #include "llvm/Config/Targets.def"
       
    58 #undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
       
    59 }
       
    60   
       
    61 /** LLVMInitializeNativeTarget - The main program should call this function to
       
    62     initialize the native target corresponding to the host.  This is useful 
       
    63     for JIT applications to ensure that the target gets linked in correctly. */
       
    64 static inline LLVMBool LLVMInitializeNativeTarget() {
       
    65   /* If we have a native target, initialize it to ensure it is linked in. */
       
    66 #ifdef LLVM_NATIVE_ARCH
       
    67 #define DoInit2(TARG) \
       
    68   LLVMInitialize ## TARG ## Info ();          \
       
    69   LLVMInitialize ## TARG ()
       
    70 #define DoInit(T) DoInit2(T)
       
    71   DoInit(LLVM_NATIVE_ARCH);
       
    72   return 0;
       
    73 #undef DoInit
       
    74 #undef DoInit2
       
    75 #else
       
    76   return 1;
       
    77 #endif
       
    78 }  
       
    79 
       
    80 /*===-- Target Data -------------------------------------------------------===*/
       
    81 
       
    82 /** Creates target data from a target layout string.
       
    83     See the constructor llvm::TargetData::TargetData. */
       
    84 LLVMTargetDataRef LLVMCreateTargetData(const char *StringRep);
       
    85 
       
    86 /** Adds target data information to a pass manager. This does not take ownership
       
    87     of the target data.
       
    88     See the method llvm::PassManagerBase::add. */
       
    89 void LLVMAddTargetData(LLVMTargetDataRef, LLVMPassManagerRef);
       
    90 
       
    91 /** Converts target data to a target layout string. The string must be disposed
       
    92     with LLVMDisposeMessage.
       
    93     See the constructor llvm::TargetData::TargetData. */
       
    94 char *LLVMCopyStringRepOfTargetData(LLVMTargetDataRef);
       
    95 
       
    96 /** Returns the byte order of a target, either LLVMBigEndian or
       
    97     LLVMLittleEndian.
       
    98     See the method llvm::TargetData::isLittleEndian. */
       
    99 enum LLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef);
       
   100 
       
   101 /** Returns the pointer size in bytes for a target.
       
   102     See the method llvm::TargetData::getPointerSize. */
       
   103 unsigned LLVMPointerSize(LLVMTargetDataRef);
       
   104 
       
   105 /** Returns the integer type that is the same size as a pointer on a target.
       
   106     See the method llvm::TargetData::getIntPtrType. */
       
   107 LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef);
       
   108 
       
   109 /** Computes the size of a type in bytes for a target.
       
   110     See the method llvm::TargetData::getTypeSizeInBits. */
       
   111 unsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef, LLVMTypeRef);
       
   112 
       
   113 /** Computes the storage size of a type in bytes for a target.
       
   114     See the method llvm::TargetData::getTypeStoreSize. */
       
   115 unsigned long long LLVMStoreSizeOfType(LLVMTargetDataRef, LLVMTypeRef);
       
   116 
       
   117 /** Computes the ABI size of a type in bytes for a target.
       
   118     See the method llvm::TargetData::getTypeAllocSize. */
       
   119 unsigned long long LLVMABISizeOfType(LLVMTargetDataRef, LLVMTypeRef);
       
   120 
       
   121 /** Computes the ABI alignment of a type in bytes for a target.
       
   122     See the method llvm::TargetData::getTypeABISize. */
       
   123 unsigned LLVMABIAlignmentOfType(LLVMTargetDataRef, LLVMTypeRef);
       
   124 
       
   125 /** Computes the call frame alignment of a type in bytes for a target.
       
   126     See the method llvm::TargetData::getTypeABISize. */
       
   127 unsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef, LLVMTypeRef);
       
   128 
       
   129 /** Computes the preferred alignment of a type in bytes for a target.
       
   130     See the method llvm::TargetData::getTypeABISize. */
       
   131 unsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef, LLVMTypeRef);
       
   132 
       
   133 /** Computes the preferred alignment of a global variable in bytes for a target.
       
   134     See the method llvm::TargetData::getPreferredAlignment. */
       
   135 unsigned LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef,
       
   136                                         LLVMValueRef GlobalVar);
       
   137 
       
   138 /** Computes the structure element that contains the byte offset for a target.
       
   139     See the method llvm::StructLayout::getElementContainingOffset. */
       
   140 unsigned LLVMElementAtOffset(LLVMTargetDataRef, LLVMTypeRef StructTy,
       
   141                              unsigned long long Offset);
       
   142 
       
   143 /** Computes the byte offset of the indexed struct element for a target.
       
   144     See the method llvm::StructLayout::getElementContainingOffset. */
       
   145 unsigned long long LLVMOffsetOfElement(LLVMTargetDataRef, LLVMTypeRef StructTy,
       
   146                                        unsigned Element);
       
   147 
       
   148 /** Struct layouts are speculatively cached. If a TargetDataRef is alive when
       
   149     types are being refined and removed, this method must be called whenever a
       
   150     struct type is removed to avoid a dangling pointer in this cache.
       
   151     See the method llvm::TargetData::InvalidateStructLayoutInfo. */
       
   152 void LLVMInvalidateStructLayout(LLVMTargetDataRef, LLVMTypeRef StructTy);
       
   153 
       
   154 /** Deallocates a TargetData.
       
   155     See the destructor llvm::TargetData::~TargetData. */
       
   156 void LLVMDisposeTargetData(LLVMTargetDataRef);
       
   157 
       
   158 
       
   159 #ifdef __cplusplus
       
   160 }
       
   161 
       
   162 namespace llvm {
       
   163   class TargetData;
       
   164 
       
   165   inline TargetData *unwrap(LLVMTargetDataRef P) {
       
   166     return reinterpret_cast<TargetData*>(P);
       
   167   }
       
   168   
       
   169   inline LLVMTargetDataRef wrap(const TargetData *P) {
       
   170     return reinterpret_cast<LLVMTargetDataRef>(const_cast<TargetData*>(P));
       
   171   }
       
   172 }
       
   173 
       
   174 #endif /* defined(__cplusplus) */
       
   175 
       
   176 #endif