xref: /aosp_15_r20/external/llvm/bindings/ocaml/target/llvm_target.mli (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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