1*9880d681SAndroid Build Coastguard Worker(*===-- llvm_target.mli - LLVM OCaml Interface -----------------*- OCaml -*-===* 2*9880d681SAndroid Build Coastguard Worker * 3*9880d681SAndroid Build Coastguard Worker * The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker * 5*9880d681SAndroid Build Coastguard Worker * This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker * License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker * 8*9880d681SAndroid Build Coastguard Worker *===----------------------------------------------------------------------===*) 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker(** Target Information. 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker This interface provides an OCaml API for LLVM target information, 13*9880d681SAndroid Build Coastguard Worker the classes in the Target library. *) 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workermodule Endian : sig 16*9880d681SAndroid Build Coastguard Worker type t = 17*9880d681SAndroid Build Coastguard Worker | Big 18*9880d681SAndroid Build Coastguard Worker | Little 19*9880d681SAndroid Build Coastguard Workerend 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workermodule CodeGenOptLevel : sig 22*9880d681SAndroid Build Coastguard Worker type t = 23*9880d681SAndroid Build Coastguard Worker | None 24*9880d681SAndroid Build Coastguard Worker | Less 25*9880d681SAndroid Build Coastguard Worker | Default 26*9880d681SAndroid Build Coastguard Worker | Aggressive 27*9880d681SAndroid Build Coastguard Workerend 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workermodule RelocMode : sig 30*9880d681SAndroid Build Coastguard Worker type t = 31*9880d681SAndroid Build Coastguard Worker | Default 32*9880d681SAndroid Build Coastguard Worker | Static 33*9880d681SAndroid Build Coastguard Worker | PIC 34*9880d681SAndroid Build Coastguard Worker | DynamicNoPIC 35*9880d681SAndroid Build Coastguard Workerend 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workermodule CodeModel : sig 38*9880d681SAndroid Build Coastguard Worker type t = 39*9880d681SAndroid Build Coastguard Worker | Default 40*9880d681SAndroid Build Coastguard Worker | JITDefault 41*9880d681SAndroid Build Coastguard Worker | Small 42*9880d681SAndroid Build Coastguard Worker | Kernel 43*9880d681SAndroid Build Coastguard Worker | Medium 44*9880d681SAndroid Build Coastguard Worker | Large 45*9880d681SAndroid Build Coastguard Workerend 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workermodule CodeGenFileType : sig 48*9880d681SAndroid Build Coastguard Worker type t = 49*9880d681SAndroid Build Coastguard Worker | AssemblyFile 50*9880d681SAndroid Build Coastguard Worker | ObjectFile 51*9880d681SAndroid Build Coastguard Workerend 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker(** {6 Exceptions} *) 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerexception Error of string 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker(** {6 Data Layout} *) 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workermodule DataLayout : sig 60*9880d681SAndroid Build Coastguard Worker type t 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Worker (** [of_string rep] parses the data layout string representation [rep]. 63*9880d681SAndroid Build Coastguard Worker See the constructor [llvm::DataLayout::DataLayout]. *) 64*9880d681SAndroid Build Coastguard Worker val of_string : string -> t 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker (** [as_string dl] is the string representation of the data layout [dl]. 67*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getStringRepresentation]. *) 68*9880d681SAndroid Build Coastguard Worker val as_string : t -> string 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker (** Returns the byte order of a target, either [Endian.Big] or 71*9880d681SAndroid Build Coastguard Worker [Endian.Little]. 72*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::isLittleEndian]. *) 73*9880d681SAndroid Build Coastguard Worker val byte_order : t -> Endian.t 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker (** Returns the pointer size in bytes for a target. 76*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getPointerSize]. *) 77*9880d681SAndroid Build Coastguard Worker val pointer_size : t -> int 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker (** Returns the integer type that is the same size as a pointer on a target. 80*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getIntPtrType]. *) 81*9880d681SAndroid Build Coastguard Worker val intptr_type : Llvm.llcontext -> t -> Llvm.lltype 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker (** Returns the pointer size in bytes for a target in a given address space. 84*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getPointerSize]. *) 85*9880d681SAndroid Build Coastguard Worker val qualified_pointer_size : int -> t -> int 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker (** Returns the integer type that is the same size as a pointer on a target 88*9880d681SAndroid Build Coastguard Worker in a given address space. 89*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getIntPtrType]. *) 90*9880d681SAndroid Build Coastguard Worker val qualified_intptr_type : Llvm.llcontext -> int -> t -> Llvm.lltype 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker (** Computes the size of a type in bits for a target. 93*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getTypeSizeInBits]. *) 94*9880d681SAndroid Build Coastguard Worker val size_in_bits : Llvm.lltype -> t -> Int64.t 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker (** Computes the storage size of a type in bytes for a target. 97*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getTypeStoreSize]. *) 98*9880d681SAndroid Build Coastguard Worker val store_size : Llvm.lltype -> t -> Int64.t 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker (** Computes the ABI size of a type in bytes for a target. 101*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getTypeAllocSize]. *) 102*9880d681SAndroid Build Coastguard Worker val abi_size : Llvm.lltype -> t -> Int64.t 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker (** Computes the ABI alignment of a type in bytes for a target. 105*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getTypeABISize]. *) 106*9880d681SAndroid Build Coastguard Worker val abi_align : Llvm.lltype -> t -> int 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker (** Computes the call frame alignment of a type in bytes for a target. 109*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getTypeABISize]. *) 110*9880d681SAndroid Build Coastguard Worker val stack_align : Llvm.lltype -> t -> int 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker (** Computes the preferred alignment of a type in bytes for a target. 113*9880d681SAndroid Build Coastguard Worker See the method [llvm::DataLayout::getTypeABISize]. *) 114*9880d681SAndroid Build Coastguard Worker val preferred_align : Llvm.lltype -> t -> int 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Worker (** Computes the preferred alignment of a global variable in bytes for 117*9880d681SAndroid Build Coastguard Worker a target. See the method [llvm::DataLayout::getPreferredAlignment]. *) 118*9880d681SAndroid Build Coastguard Worker val preferred_align_of_global : Llvm.llvalue -> t -> int 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker (** Computes the structure element that contains the byte offset for a target. 121*9880d681SAndroid Build Coastguard Worker See the method [llvm::StructLayout::getElementContainingOffset]. *) 122*9880d681SAndroid Build Coastguard Worker val element_at_offset : Llvm.lltype -> Int64.t -> t -> int 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker (** Computes the byte offset of the indexed struct element for a target. 125*9880d681SAndroid Build Coastguard Worker See the method [llvm::StructLayout::getElementContainingOffset]. *) 126*9880d681SAndroid Build Coastguard Worker val offset_of_element : Llvm.lltype -> int -> t -> Int64.t 127*9880d681SAndroid Build Coastguard Workerend 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker(** {6 Target} *) 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workermodule Target : sig 132*9880d681SAndroid Build Coastguard Worker type t 133*9880d681SAndroid Build Coastguard Worker 134*9880d681SAndroid Build Coastguard Worker (** [default_triple ()] returns the default target triple for current 135*9880d681SAndroid Build Coastguard Worker platform. *) 136*9880d681SAndroid Build Coastguard Worker val default_triple : unit -> string 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Worker (** [first ()] returns the first target in the registered targets 139*9880d681SAndroid Build Coastguard Worker list, or [None]. *) 140*9880d681SAndroid Build Coastguard Worker val first : unit -> t option 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker (** [succ t] returns the next target after [t], or [None] 143*9880d681SAndroid Build Coastguard Worker if [t] was the last target. *) 144*9880d681SAndroid Build Coastguard Worker val succ : t -> t option 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker (** [all ()] returns a list of known targets. *) 147*9880d681SAndroid Build Coastguard Worker val all : unit -> t list 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker (** [by_name name] returns [Some t] if a target [t] named [name] is 150*9880d681SAndroid Build Coastguard Worker registered, or [None] otherwise. *) 151*9880d681SAndroid Build Coastguard Worker val by_name : string -> t option 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker (** [by_triple triple] returns a target for a triple [triple], or raises 154*9880d681SAndroid Build Coastguard Worker [Error] if [triple] does not correspond to a registered target. *) 155*9880d681SAndroid Build Coastguard Worker val by_triple : string -> t 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker (** Returns the name of a target. See [llvm::Target::getName]. *) 158*9880d681SAndroid Build Coastguard Worker val name : t -> string 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Worker (** Returns the description of a target. 161*9880d681SAndroid Build Coastguard Worker See [llvm::Target::getDescription]. *) 162*9880d681SAndroid Build Coastguard Worker val description : t -> string 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker (** Returns [true] if the target has a JIT. *) 165*9880d681SAndroid Build Coastguard Worker val has_jit : t -> bool 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker (** Returns [true] if the target has a target machine associated. *) 168*9880d681SAndroid Build Coastguard Worker val has_target_machine : t -> bool 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker (** Returns [true] if the target has an ASM backend (required for 171*9880d681SAndroid Build Coastguard Worker emitting output). *) 172*9880d681SAndroid Build Coastguard Worker val has_asm_backend : t -> bool 173*9880d681SAndroid Build Coastguard Workerend 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker(** {6 Target Machine} *) 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Workermodule TargetMachine : sig 178*9880d681SAndroid Build Coastguard Worker type t 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Worker (** Creates a new target machine. 181*9880d681SAndroid Build Coastguard Worker See [llvm::Target::createTargetMachine]. *) 182*9880d681SAndroid Build Coastguard Worker val create : triple:string -> ?cpu:string -> ?features:string -> 183*9880d681SAndroid Build Coastguard Worker ?level:CodeGenOptLevel.t -> ?reloc_mode:RelocMode.t -> 184*9880d681SAndroid Build Coastguard Worker ?code_model:CodeModel.t -> Target.t -> t 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker (** Returns the Target used in a TargetMachine *) 187*9880d681SAndroid Build Coastguard Worker val target : t -> Target.t 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Worker (** Returns the triple used while creating this target machine. See 190*9880d681SAndroid Build Coastguard Worker [llvm::TargetMachine::getTriple]. *) 191*9880d681SAndroid Build Coastguard Worker val triple : t -> string 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker (** Returns the CPU used while creating this target machine. See 194*9880d681SAndroid Build Coastguard Worker [llvm::TargetMachine::getCPU]. *) 195*9880d681SAndroid Build Coastguard Worker val cpu : t -> string 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker (** Returns the data layout of this target machine. *) 198*9880d681SAndroid Build Coastguard Worker val data_layout : t -> DataLayout.t 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker (** Returns the feature string used while creating this target machine. See 201*9880d681SAndroid Build Coastguard Worker [llvm::TargetMachine::getFeatureString]. *) 202*9880d681SAndroid Build Coastguard Worker val features : t -> string 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker (** Adds the target-specific analysis passes to the pass manager. 205*9880d681SAndroid Build Coastguard Worker See [llvm::TargetMachine::addAnalysisPasses]. *) 206*9880d681SAndroid Build Coastguard Worker val add_analysis_passes : [< Llvm.PassManager.any ] Llvm.PassManager.t -> t -> unit 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker (** Sets the assembly verbosity of this target machine. 209*9880d681SAndroid Build Coastguard Worker See [llvm::TargetMachine::setAsmVerbosity]. *) 210*9880d681SAndroid Build Coastguard Worker val set_verbose_asm : bool -> t -> unit 211*9880d681SAndroid Build Coastguard Worker 212*9880d681SAndroid Build Coastguard Worker (** Emits assembly or object data for the given module to the given 213*9880d681SAndroid Build Coastguard Worker file or raise [Error]. *) 214*9880d681SAndroid Build Coastguard Worker val emit_to_file : Llvm.llmodule -> CodeGenFileType.t -> string -> t -> unit 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker (** Emits assembly or object data for the given module to a fresh memory 217*9880d681SAndroid Build Coastguard Worker buffer or raise [Error]. *) 218*9880d681SAndroid Build Coastguard Worker val emit_to_memory_buffer : Llvm.llmodule -> CodeGenFileType.t -> t -> 219*9880d681SAndroid Build Coastguard Worker Llvm.llmemorybuffer 220*9880d681SAndroid Build Coastguard Workerend 221