sig
  type llmodule
  type lltype
  type lltypehandle
  type llvalue
  type llbasicblock
  type llbuilder
  type llmoduleprovider
  type llmemorybuffer
  module TypeKind :
    sig
      type t =
          Void
        | Float
        | Double
        | X86fp80
        | Fp128
        | Ppc_fp128
        | Label
        | Integer
        | Function
        | Struct
        | Array
        | Pointer
        | Opaque
        | Vector
    end
  module Linkage :
    sig
      type t =
          External
        | Link_once
        | Weak
        | Appending
        | Internal
        | Dllimport
        | Dllexport
        | External_weak
        | Ghost
    end
  module Visibility : sig type t = Default | Hidden | Protected end
  module CallConv :
    sig
      val c : int
      val fast : int
      val cold : int
      val x86_stdcall : int
      val x86_fastcall : int
    end
  module Icmp :
    sig type t = Eq | Ne | Ugt | Uge | Ult | Ule | Sgt | Sge | Slt | Sle end
  module Fcmp :
    sig
      type t =
          False
        | Oeq
        | Ogt
        | Oge
        | Olt
        | Ole
        | One
        | Ord
        | Uno
        | Ueq
        | Ugt
        | Uge
        | Ult
        | Ule
        | Une
        | True
    end
  type ('a, 'b) llpos = At_end of '| Before of 'b
  type ('a, 'b) llrev_pos = At_start of '| After of 'b
  exception IoError of string
  external create_module : string -> Llvm.llmodule = "llvm_create_module"
  external dispose_module : Llvm.llmodule -> unit = "llvm_dispose_module"
  external target_triple : Llvm.llmodule -> string = "llvm_target_triple"
  external set_target_triple : string -> Llvm.llmodule -> unit
    = "llvm_set_target_triple"
  external data_layout : Llvm.llmodule -> string = "llvm_data_layout"
  external set_data_layout : string -> Llvm.llmodule -> unit
    = "llvm_set_data_layout"
  external define_type_name : string -> Llvm.lltype -> Llvm.llmodule -> bool
    = "llvm_add_type_name"
  external delete_type_name : string -> Llvm.llmodule -> unit
    = "llvm_delete_type_name"
  external dump_module : Llvm.llmodule -> unit = "llvm_dump_module"
  external classify_type : Llvm.lltype -> Llvm.TypeKind.t
    = "llvm_classify_type"
  val string_of_lltype : Llvm.lltype -> string
  val i1_type : Llvm.lltype
  val i8_type : Llvm.lltype
  val i16_type : Llvm.lltype
  val i32_type : Llvm.lltype
  val i64_type : Llvm.lltype
  external integer_type : int -> Llvm.lltype = "llvm_integer_type"
  external integer_bitwidth : Llvm.lltype -> int = "llvm_integer_bitwidth"
  val float_type : Llvm.lltype
  val double_type : Llvm.lltype
  val x86fp80_type : Llvm.lltype
  val fp128_type : Llvm.lltype
  val ppc_fp128_type : Llvm.lltype
  external function_type : Llvm.lltype -> Llvm.lltype array -> Llvm.lltype
    = "llvm_function_type"
  external var_arg_function_type :
    Llvm.lltype -> Llvm.lltype array -> Llvm.lltype
    = "llvm_var_arg_function_type"
  external is_var_arg : Llvm.lltype -> bool = "llvm_is_var_arg"
  external return_type : Llvm.lltype -> Llvm.lltype = "LLVMGetReturnType"
  external param_types : Llvm.lltype -> Llvm.lltype array
    = "llvm_param_types"
  external struct_type : Llvm.lltype array -> Llvm.lltype
    = "llvm_struct_type"
  external packed_struct_type : Llvm.lltype array -> Llvm.lltype
    = "llvm_packed_struct_type"
  external element_types : Llvm.lltype -> Llvm.lltype array
    = "llvm_element_types"
  external is_packed : Llvm.lltype -> bool = "llvm_is_packed"
  external array_type : Llvm.lltype -> int -> Llvm.lltype = "llvm_array_type"
  external pointer_type : Llvm.lltype -> Llvm.lltype = "llvm_pointer_type"
  external qualified_pointer_type : Llvm.lltype -> int -> Llvm.lltype
    = "llvm_qualified_pointer_type"
  external vector_type : Llvm.lltype -> int -> Llvm.lltype
    = "llvm_vector_type"
  external element_type : Llvm.lltype -> Llvm.lltype = "LLVMGetElementType"
  external array_length : Llvm.lltype -> int = "llvm_array_length"
  external address_space : Llvm.lltype -> int = "llvm_address_space"
  external vector_size : Llvm.lltype -> int = "llvm_vector_size"
  external opaque_type : unit -> Llvm.lltype = "llvm_opaque_type"
  val void_type : Llvm.lltype
  val label_type : Llvm.lltype
  external handle_to_type : Llvm.lltype -> Llvm.lltypehandle
    = "llvm_handle_to_type"
  external type_of_handle : Llvm.lltypehandle -> Llvm.lltype
    = "llvm_type_of_handle"
  external refine_type : Llvm.lltype -> Llvm.lltype -> unit
    = "llvm_refine_type"
  external type_of : Llvm.llvalue -> Llvm.lltype = "llvm_type_of"
  external value_name : Llvm.llvalue -> string = "llvm_value_name"
  external set_value_name : string -> Llvm.llvalue -> unit
    = "llvm_set_value_name"
  external dump_value : Llvm.llvalue -> unit = "llvm_dump_value"
  external is_constant : Llvm.llvalue -> bool = "llvm_is_constant"
  external const_null : Llvm.lltype -> Llvm.llvalue = "LLVMConstNull"
  external const_all_ones : Llvm.lltype -> Llvm.llvalue = "LLVMConstAllOnes"
  external undef : Llvm.lltype -> Llvm.llvalue = "LLVMGetUndef"
  external is_null : Llvm.llvalue -> bool = "llvm_is_null"
  external is_undef : Llvm.llvalue -> bool = "llvm_is_undef"
  external const_int : Llvm.lltype -> int -> Llvm.llvalue = "llvm_const_int"
  external const_of_int64 : Llvm.lltype -> Int64.t -> bool -> Llvm.llvalue
    = "llvm_const_of_int64"
  external const_float : Llvm.lltype -> float -> Llvm.llvalue
    = "llvm_const_float"
  external const_string : string -> Llvm.llvalue = "llvm_const_string"
  external const_stringz : string -> Llvm.llvalue = "llvm_const_stringz"
  external const_array : Llvm.lltype -> Llvm.llvalue array -> Llvm.llvalue
    = "llvm_const_array"
  external const_struct : Llvm.llvalue array -> Llvm.llvalue
    = "llvm_const_struct"
  external const_packed_struct : Llvm.llvalue array -> Llvm.llvalue
    = "llvm_const_packed_struct"
  external const_vector : Llvm.llvalue array -> Llvm.llvalue
    = "llvm_const_vector"
  external size_of : Llvm.lltype -> Llvm.llvalue = "LLVMSizeOf"
  external const_neg : Llvm.llvalue -> Llvm.llvalue = "LLVMConstNeg"
  external const_not : Llvm.llvalue -> Llvm.llvalue = "LLVMConstNot"
  external const_add : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstAdd"
  external const_sub : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstSub"
  external const_mul : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstMul"
  external const_udiv : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstUDiv"
  external const_sdiv : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstSDiv"
  external const_fdiv : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstFDiv"
  external const_urem : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstURem"
  external const_srem : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstSRem"
  external const_frem : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstFRem"
  external const_and : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstAnd"
  external const_or : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstOr"
  external const_xor : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstXor"
  external const_icmp :
    Llvm.Icmp.t -> Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "llvm_const_icmp"
  external const_fcmp :
    Llvm.Fcmp.t -> Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "llvm_const_fcmp"
  external const_shl : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstShl"
  external const_lshr : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstLShr"
  external const_ashr : Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstAShr"
  external const_gep : Llvm.llvalue -> Llvm.llvalue array -> Llvm.llvalue
    = "llvm_const_gep"
  external const_trunc : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstTrunc"
  external const_sext : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstSExt"
  external const_zext : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstZExt"
  external const_fptrunc : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstFPTrunc"
  external const_fpext : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstFPExt"
  external const_uitofp : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstUIToFP"
  external const_sitofp : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstSIToFP"
  external const_fptoui : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstFPToUI"
  external const_fptosi : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstFPToSI"
  external const_ptrtoint : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstPtrToInt"
  external const_inttoptr : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstIntToPtr"
  external const_bitcast : Llvm.llvalue -> Llvm.lltype -> Llvm.llvalue
    = "LLVMConstBitCast"
  external const_select :
    Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstSelect"
  external const_extractelement :
    Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue = "LLVMConstExtractElement"
  external const_insertelement :
    Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstInsertElement"
  external const_shufflevector :
    Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue -> Llvm.llvalue
    = "LLVMConstShuffleVector"
  external global_parent : Llvm.llvalue -> Llvm.llmodule
    = "LLVMGetGlobalParent"
  external is_declaration : Llvm.llvalue -> bool = "llvm_is_declaration"
  external linkage : Llvm.llvalue -> Llvm.Linkage.t = "llvm_linkage"
  external set_linkage : Llvm.Linkage.t -> Llvm.llvalue -> unit
    = "llvm_set_linkage"
  external section : Llvm.llvalue -> string = "llvm_section"
  external set_section : string -> Llvm.llvalue -> unit = "llvm_set_section"
  external visibility : Llvm.llvalue -> Llvm.Visibility.t = "llvm_visibility"
  external set_visibility : Llvm.Visibility.t -> Llvm.llvalue -> unit
    = "llvm_set_visibility"
  external alignment : Llvm.llvalue -> int = "llvm_alignment"
  external set_alignment : int -> Llvm.llvalue -> unit = "llvm_set_alignment"
  external declare_global :
    Llvm.lltype -> string -> Llvm.llmodule -> Llvm.llvalue
    = "llvm_declare_global"
  external define_global :
    string -> Llvm.llvalue -> Llvm.llmodule -> Llvm.llvalue
    = "llvm_define_global"
  external lookup_global : string -> Llvm.llmodule -> Llvm.llvalue option
    = "llvm_lookup_global"
  external delete_global : Llvm.llvalue -> unit = "llvm_delete_global"
  external global_begin :
    Llvm.llmodule -> (Llvm.llmodule, Llvm.llvalue) Llvm.llpos
    = "llvm_global_begin"
  external global_succ :
    Llvm.llvalue -> (Llvm.llmodule, Llvm.llvalue) Llvm.llpos
    = "llvm_global_succ"
  val iter_globals : (Llvm.llvalue -> unit) -> Llvm.llmodule -> unit
  val fold_left_globals :
    ('-> Llvm.llvalue -> 'a) -> '-> Llvm.llmodule -> 'a
  external global_end :
    Llvm.llmodule -> (Llvm.llmodule, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_global_end"
  external global_pred :
    Llvm.llvalue -> (Llvm.llmodule, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_global_pred"
  val rev_iter_globals : (Llvm.llvalue -> unit) -> Llvm.llmodule -> unit
  val fold_right_globals :
    (Llvm.llvalue -> '-> 'a) -> Llvm.llmodule -> '-> 'a
  external is_global_constant : Llvm.llvalue -> bool
    = "llvm_is_global_constant"
  external set_global_constant : bool -> Llvm.llvalue -> unit
    = "llvm_set_global_constant"
  external has_initializer : Llvm.llvalue -> bool = "llvm_has_initializer"
  external global_initializer : Llvm.llvalue -> Llvm.llvalue
    = "LLVMGetInitializer"
  external set_initializer : Llvm.llvalue -> Llvm.llvalue -> unit
    = "llvm_set_initializer"
  external remove_initializer : Llvm.llvalue -> unit
    = "llvm_remove_initializer"
  external is_thread_local : Llvm.llvalue -> bool = "llvm_is_thread_local"
  external set_thread_local : bool -> Llvm.llvalue -> unit
    = "llvm_set_thread_local"
  external declare_function :
    string -> Llvm.lltype -> Llvm.llmodule -> Llvm.llvalue
    = "llvm_declare_function"
  external define_function :
    string -> Llvm.lltype -> Llvm.llmodule -> Llvm.llvalue
    = "llvm_define_function"
  external lookup_function : string -> Llvm.llmodule -> Llvm.llvalue option
    = "llvm_lookup_function"
  external delete_function : Llvm.llvalue -> unit = "llvm_delete_function"
  external function_begin :
    Llvm.llmodule -> (Llvm.llmodule, Llvm.llvalue) Llvm.llpos
    = "llvm_function_begin"
  external function_succ :
    Llvm.llvalue -> (Llvm.llmodule, Llvm.llvalue) Llvm.llpos
    = "llvm_function_succ"
  val iter_functions : (Llvm.llvalue -> unit) -> Llvm.llmodule -> unit
  val fold_left_functions :
    ('-> Llvm.llvalue -> 'a) -> '-> Llvm.llmodule -> 'a
  external function_end :
    Llvm.llmodule -> (Llvm.llmodule, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_function_end"
  external function_pred :
    Llvm.llvalue -> (Llvm.llmodule, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_function_pred"
  val rev_iter_functions : (Llvm.llvalue -> unit) -> Llvm.llmodule -> unit
  val fold_right_functions :
    (Llvm.llvalue -> '-> 'a) -> Llvm.llmodule -> '-> 'a
  external is_intrinsic : Llvm.llvalue -> bool = "llvm_is_intrinsic"
  external function_call_conv : Llvm.llvalue -> int
    = "llvm_function_call_conv"
  external set_function_call_conv : int -> Llvm.llvalue -> unit
    = "llvm_set_function_call_conv"
  external collector : Llvm.llvalue -> string option = "llvm_collector"
  external set_collector : string option -> Llvm.llvalue -> unit
    = "llvm_set_collector"
  external params : Llvm.llvalue -> Llvm.llvalue array = "llvm_params"
  external param : Llvm.llvalue -> int -> Llvm.llvalue = "llvm_param"
  external param_parent : Llvm.llvalue -> Llvm.llvalue = "LLVMGetParamParent"
  external param_begin :
    Llvm.llvalue -> (Llvm.llvalue, Llvm.llvalue) Llvm.llpos
    = "llvm_param_begin"
  external param_succ :
    Llvm.llvalue -> (Llvm.llvalue, Llvm.llvalue) Llvm.llpos
    = "llvm_param_succ"
  val iter_params : (Llvm.llvalue -> unit) -> Llvm.llvalue -> unit
  val fold_left_params :
    ('-> Llvm.llvalue -> 'a) -> '-> Llvm.llvalue -> 'a
  external param_end :
    Llvm.llvalue -> (Llvm.llvalue, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_param_end"
  external param_pred :
    Llvm.llvalue -> (Llvm.llvalue, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_param_pred"
  val rev_iter_params : (Llvm.llvalue -> unit) -> Llvm.llvalue -> unit
  val fold_right_params :
    (Llvm.llvalue -> '-> 'a) -> Llvm.llvalue -> '-> 'a
  external basic_blocks : Llvm.llvalue -> Llvm.llbasicblock array
    = "llvm_basic_blocks"
  external entry_block : Llvm.llvalue -> Llvm.llbasicblock
    = "LLVMGetEntryBasicBlock"
  external delete_block : Llvm.llbasicblock -> unit = "llvm_delete_block"
  external append_block : string -> Llvm.llvalue -> Llvm.llbasicblock
    = "llvm_append_block"
  external insert_block : string -> Llvm.llbasicblock -> Llvm.llbasicblock
    = "llvm_insert_block"
  external block_parent : Llvm.llbasicblock -> Llvm.llvalue
    = "LLVMGetBasicBlockParent"
  external block_begin :
    Llvm.llvalue -> (Llvm.llvalue, Llvm.llbasicblock) Llvm.llpos
    = "llvm_block_begin"
  external block_succ :
    Llvm.llbasicblock -> (Llvm.llvalue, Llvm.llbasicblock) Llvm.llpos
    = "llvm_block_succ"
  val iter_blocks : (Llvm.llbasicblock -> unit) -> Llvm.llvalue -> unit
  val fold_left_blocks :
    ('-> Llvm.llbasicblock -> 'a) -> '-> Llvm.llvalue -> 'a
  external block_end :
    Llvm.llvalue -> (Llvm.llvalue, Llvm.llbasicblock) Llvm.llrev_pos
    = "llvm_block_end"
  external block_pred :
    Llvm.llbasicblock -> (Llvm.llvalue, Llvm.llbasicblock) Llvm.llrev_pos
    = "llvm_block_pred"
  val rev_iter_blocks : (Llvm.llbasicblock -> unit) -> Llvm.llvalue -> unit
  val fold_right_blocks :
    (Llvm.llbasicblock -> '-> 'a) -> Llvm.llvalue -> '-> 'a
  external value_of_block : Llvm.llbasicblock -> Llvm.llvalue
    = "LLVMBasicBlockAsValue"
  external value_is_block : Llvm.llvalue -> bool = "llvm_value_is_block"
  external block_of_value : Llvm.llvalue -> Llvm.llbasicblock
    = "LLVMValueAsBasicBlock"
  external instr_parent : Llvm.llvalue -> Llvm.llbasicblock
    = "LLVMGetInstructionParent"
  external instr_begin :
    Llvm.llbasicblock -> (Llvm.llbasicblock, Llvm.llvalue) Llvm.llpos
    = "llvm_instr_begin"
  external instr_succ :
    Llvm.llvalue -> (Llvm.llbasicblock, Llvm.llvalue) Llvm.llpos
    = "llvm_instr_succ"
  val iter_instrs : (Llvm.llvalue -> unit) -> Llvm.llbasicblock -> unit
  val fold_left_instrs :
    ('-> Llvm.llvalue -> 'a) -> '-> Llvm.llbasicblock -> 'a
  external instr_end :
    Llvm.llbasicblock -> (Llvm.llbasicblock, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_instr_end"
  external instr_pred :
    Llvm.llvalue -> (Llvm.llbasicblock, Llvm.llvalue) Llvm.llrev_pos
    = "llvm_instr_pred"
  val fold_right_instrs :
    (Llvm.llvalue -> '-> 'a) -> Llvm.llbasicblock -> '-> 'a
  external instruction_call_conv : Llvm.llvalue -> int
    = "llvm_instruction_call_conv"
  external set_instruction_call_conv : int -> Llvm.llvalue -> unit
    = "llvm_set_instruction_call_conv"
  external add_incoming :
    Llvm.llvalue * Llvm.llbasicblock -> Llvm.llvalue -> unit
    = "llvm_add_incoming"
  external incoming : Llvm.llvalue -> (Llvm.llvalue * Llvm.llbasicblock) list
    = "llvm_incoming"
  external builder : unit -> Llvm.llbuilder = "llvm_builder"
  val builder_at :
    (Llvm.llbasicblock, Llvm.llvalue) Llvm.llpos -> Llvm.llbuilder
  val builder_before : Llvm.llvalue -> Llvm.llbuilder
  val builder_at_end : Llvm.llbasicblock -> Llvm.llbuilder
  external position_builder :
    (Llvm.llbasicblock, Llvm.llvalue) Llvm.llpos -> Llvm.llbuilder -> unit
    = "llvm_position_builder"
  val position_before : Llvm.llvalue -> Llvm.llbuilder -> unit
  val position_at_end : Llvm.llbasicblock -> Llvm.llbuilder -> unit
  external insertion_block : Llvm.llbuilder -> Llvm.llbasicblock
    = "llvm_insertion_block"
  external build_ret_void : Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_ret_void"
  external build_ret : Llvm.llvalue -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_ret"
  external build_br : Llvm.llbasicblock -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_br"
  external build_cond_br :
    Llvm.llvalue ->
    Llvm.llbasicblock -> Llvm.llbasicblock -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_cond_br"
  external build_switch :
    Llvm.llvalue ->
    Llvm.llbasicblock -> int -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_switch"
  external build_invoke :
    Llvm.llvalue ->
    Llvm.llvalue array ->
    Llvm.llbasicblock ->
    Llvm.llbasicblock -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_invoke_bc" "llvm_build_invoke_nat"
  external build_unwind : Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_unwind"
  external build_unreachable : Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_unreachable"
  external build_add :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_add"
  external build_sub :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_sub"
  external build_mul :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_mul"
  external build_udiv :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_udiv"
  external build_sdiv :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_sdiv"
  external build_fdiv :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_fdiv"
  external build_urem :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_urem"
  external build_srem :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_srem"
  external build_frem :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_frem"
  external build_shl :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_shl"
  external build_lshr :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_lshr"
  external build_ashr :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_ashr"
  external build_and :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_and"
  external build_or :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_or"
  external build_xor :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_xor"
  external build_neg :
    Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_neg"
  external build_not :
    Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_not"
  external build_malloc :
    Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_malloc"
  external build_array_malloc :
    Llvm.lltype -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_array_malloc"
  external build_alloca :
    Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_alloca"
  external build_array_alloca :
    Llvm.lltype -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_array_alloca"
  external build_free : Llvm.llvalue -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_free"
  external build_load :
    Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_load"
  external build_store :
    Llvm.llvalue -> Llvm.llvalue -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_store"
  external build_gep :
    Llvm.llvalue ->
    Llvm.llvalue array -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_gep"
  external build_trunc :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_trunc"
  external build_zext :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_zext"
  external build_sext :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_sext"
  external build_fptoui :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_fptoui"
  external build_fptosi :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_fptosi"
  external build_uitofp :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_uitofp"
  external build_sitofp :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_sitofp"
  external build_fptrunc :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_fptrunc"
  external build_fpext :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_fpext"
  external build_ptrtoint :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_prttoint"
  external build_inttoptr :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_inttoptr"
  external build_bitcast :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_bitcast"
  external build_icmp :
    Llvm.Icmp.t ->
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_icmp"
  external build_fcmp :
    Llvm.Fcmp.t ->
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_fcmp"
  external build_phi :
    (Llvm.llvalue * Llvm.llbasicblock) list ->
    string -> Llvm.llbuilder -> Llvm.llvalue = "llvm_build_phi"
  external build_call :
    Llvm.llvalue ->
    Llvm.llvalue array -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_call"
  external build_select :
    Llvm.llvalue ->
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_select"
  external build_va_arg :
    Llvm.llvalue -> Llvm.lltype -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_va_arg"
  external build_extractelement :
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_extractelement"
  external build_insertelement :
    Llvm.llvalue ->
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_insertelement"
  external build_shufflevector :
    Llvm.llvalue ->
    Llvm.llvalue -> Llvm.llvalue -> string -> Llvm.llbuilder -> Llvm.llvalue
    = "llvm_build_shufflevector"
  module ModuleProvider :
    sig
      external create : Llvm.llmodule -> Llvm.llmoduleprovider
        = "LLVMCreateModuleProviderForExistingModule"
      external dispose : Llvm.llmoduleprovider -> unit
        = "llvm_dispose_module_provider"
    end
  module MemoryBuffer :
    sig
      external of_file : string -> Llvm.llmemorybuffer
        = "llvm_memorybuffer_of_file"
      external of_stdin : unit -> Llvm.llmemorybuffer
        = "llvm_memorybuffer_of_stdin"
      external dispose : Llvm.llmemorybuffer -> unit
        = "llvm_memorybuffer_dispose"
    end
  module PassManager :
    sig
      type 'a t
      type any = [ `Function | `Module ]
      external create : unit -> [ `Module ] Llvm.PassManager.t
        = "llvm_passmanager_create"
      external create_function :
        Llvm.llmoduleprovider -> [ `Function ] Llvm.PassManager.t
        = "LLVMCreateFunctionPassManager"
      external run_module :
        Llvm.llmodule -> [ `Module ] Llvm.PassManager.t -> bool
        = "llvm_passmanager_run_module"
      external initialize : [ `Function ] Llvm.PassManager.t -> bool
        = "llvm_passmanager_initialize"
      external run_function :
        Llvm.llvalue -> [ `Function ] Llvm.PassManager.t -> bool
        = "llvm_passmanager_run_function"
      external finalize : [ `Function ] Llvm.PassManager.t -> bool
        = "llvm_passmanager_finalize"
      external dispose : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
        = "llvm_passmanager_dispose"
    end
end