[CodeGenPrepare] Handle all debug calls in dupRetToEnableTailCallOpts()
[llvm-complete.git] / bindings / ocaml / target / llvm_target.ml
blob0922ebe55345a0c5d6be9e206b4f0e970759e84f
1 (*===-- llvm_target.ml - LLVM OCaml Interface ------------------*- OCaml -*-===*
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 *===----------------------------------------------------------------------===*)
9 module Endian = struct
10 type t =
11 | Big
12 | Little
13 end
15 module CodeGenOptLevel = struct
16 type t =
17 | None
18 | Less
19 | Default
20 | Aggressive
21 end
23 module RelocMode = struct
24 type t =
25 | Default
26 | Static
27 | PIC
28 | DynamicNoPIC
29 end
31 module CodeModel = struct
32 type t =
33 | Default
34 | JITDefault
35 | Small
36 | Kernel
37 | Medium
38 | Large
39 end
41 module CodeGenFileType = struct
42 type t =
43 | AssemblyFile
44 | ObjectFile
45 end
47 exception Error of string
49 let () = Callback.register_exception "Llvm_target.Error" (Error "")
51 module DataLayout = struct
52 type t
54 external of_string : string -> t = "llvm_datalayout_of_string"
55 external as_string : t -> string = "llvm_datalayout_as_string"
56 external byte_order : t -> Endian.t = "llvm_datalayout_byte_order"
57 external pointer_size : t -> int = "llvm_datalayout_pointer_size"
58 external intptr_type : Llvm.llcontext -> t -> Llvm.lltype
59 = "llvm_datalayout_intptr_type"
60 external qualified_pointer_size : int -> t -> int
61 = "llvm_datalayout_qualified_pointer_size"
62 external qualified_intptr_type : Llvm.llcontext -> int -> t -> Llvm.lltype
63 = "llvm_datalayout_qualified_intptr_type"
64 external size_in_bits : Llvm.lltype -> t -> Int64.t
65 = "llvm_datalayout_size_in_bits"
66 external store_size : Llvm.lltype -> t -> Int64.t
67 = "llvm_datalayout_store_size"
68 external abi_size : Llvm.lltype -> t -> Int64.t
69 = "llvm_datalayout_abi_size"
70 external abi_align : Llvm.lltype -> t -> int
71 = "llvm_datalayout_abi_align"
72 external stack_align : Llvm.lltype -> t -> int
73 = "llvm_datalayout_stack_align"
74 external preferred_align : Llvm.lltype -> t -> int
75 = "llvm_datalayout_preferred_align"
76 external preferred_align_of_global : Llvm.llvalue -> t -> int
77 = "llvm_datalayout_preferred_align_of_global"
78 external element_at_offset : Llvm.lltype -> Int64.t -> t -> int
79 = "llvm_datalayout_element_at_offset"
80 external offset_of_element : Llvm.lltype -> int -> t -> Int64.t
81 = "llvm_datalayout_offset_of_element"
82 end
84 module Target = struct
85 type t
87 external default_triple : unit -> string = "llvm_target_default_triple"
88 external first : unit -> t option = "llvm_target_first"
89 external succ : t -> t option = "llvm_target_succ"
90 external by_name : string -> t option = "llvm_target_by_name"
91 external by_triple : string -> t = "llvm_target_by_triple"
92 external name : t -> string = "llvm_target_name"
93 external description : t -> string = "llvm_target_description"
94 external has_jit : t -> bool = "llvm_target_has_jit"
95 external has_target_machine : t -> bool = "llvm_target_has_target_machine"
96 external has_asm_backend : t -> bool = "llvm_target_has_asm_backend"
98 let all () =
99 let rec step elem lst =
100 match elem with
101 | Some target -> step (succ target) (target :: lst)
102 | None -> lst
104 step (first ()) []
107 module TargetMachine = struct
108 type t
110 external create : triple:string -> ?cpu:string -> ?features:string ->
111 ?level:CodeGenOptLevel.t -> ?reloc_mode:RelocMode.t ->
112 ?code_model:CodeModel.t -> Target.t -> t
113 = "llvm_create_targetmachine_bytecode"
114 "llvm_create_targetmachine_native"
115 external target : t -> Target.t
116 = "llvm_targetmachine_target"
117 external triple : t -> string
118 = "llvm_targetmachine_triple"
119 external cpu : t -> string
120 = "llvm_targetmachine_cpu"
121 external features : t -> string
122 = "llvm_targetmachine_features"
123 external data_layout : t -> DataLayout.t
124 = "llvm_targetmachine_data_layout"
125 external add_analysis_passes : [< Llvm.PassManager.any ] Llvm.PassManager.t -> t -> unit
126 = "llvm_targetmachine_add_analysis_passes"
127 external set_verbose_asm : bool -> t -> unit
128 = "llvm_targetmachine_set_verbose_asm"
129 external emit_to_file : Llvm.llmodule -> CodeGenFileType.t -> string ->
130 t -> unit
131 = "llvm_targetmachine_emit_to_file"
132 external emit_to_memory_buffer : Llvm.llmodule -> CodeGenFileType.t ->
133 t -> Llvm.llmemorybuffer
134 = "llvm_targetmachine_emit_to_memory_buffer"