sig
  module Endian : sig type t = Big | Little end
  module TargetData :
    sig
      type t
      external create : string -> Llvm_target.TargetData.t
        = "llvm_targetdata_create"
      external add :
        Llvm_target.TargetData.t ->
        [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
        = "llvm_targetdata_add"
      external as_string : Llvm_target.TargetData.t -> string
        = "llvm_targetdata_as_string"
      external dispose : Llvm_target.TargetData.t -> unit
        = "llvm_targetdata_dispose"
    end
  external byte_order : Llvm_target.TargetData.t -> Llvm_target.Endian.t
    = "llvm_byte_order"
  external pointer_size : Llvm_target.TargetData.t -> int
    = "llvm_pointer_size"
  external intptr_type : Llvm_target.TargetData.t -> Llvm.lltype
    = "LLVMIntPtrType"
  external size_in_bits : Llvm_target.TargetData.t -> Llvm.lltype -> Int64.t
    = "llvm_size_in_bits"
  external store_size : Llvm_target.TargetData.t -> Llvm.lltype -> Int64.t
    = "llvm_store_size"
  external abi_size : Llvm_target.TargetData.t -> Llvm.lltype -> Int64.t
    = "llvm_abi_size"
  external abi_align : Llvm_target.TargetData.t -> Llvm.lltype -> int
    = "llvm_abi_align"
  external stack_align : Llvm_target.TargetData.t -> Llvm.lltype -> int
    = "llvm_stack_align"
  external preferred_align : Llvm_target.TargetData.t -> Llvm.lltype -> int
    = "llvm_preferred_align"
  external preferred_align_of_global :
    Llvm_target.TargetData.t -> Llvm.llvalue -> int
    = "llvm_preferred_align_of_global"
  external element_at_offset :
    Llvm_target.TargetData.t -> Llvm.lltype -> Int64.t -> int
    = "llvm_element_at_offset"
  external offset_of_element :
    Llvm_target.TargetData.t -> Llvm.lltype -> int -> Int64.t
    = "llvm_offset_of_element"
end