Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/bindings/ocaml/llvm/llvm.ml
Show First 20 Lines • Show All 435 Lines • ▼ Show 20 Lines | external data_layout: llmodule -> string | ||||
= "llvm_data_layout" | = "llvm_data_layout" | ||||
external set_data_layout: string -> llmodule -> unit | external set_data_layout: string -> llmodule -> unit | ||||
= "llvm_set_data_layout" | = "llvm_set_data_layout" | ||||
external dump_module : llmodule -> unit = "llvm_dump_module" | external dump_module : llmodule -> unit = "llvm_dump_module" | ||||
external print_module : string -> llmodule -> unit = "llvm_print_module" | external print_module : string -> llmodule -> unit = "llvm_print_module" | ||||
external string_of_llmodule : llmodule -> string = "llvm_string_of_llmodule" | external string_of_llmodule : llmodule -> string = "llvm_string_of_llmodule" | ||||
external set_module_inline_asm : llmodule -> string -> unit | external set_module_inline_asm : llmodule -> string -> unit | ||||
= "llvm_set_module_inline_asm" | = "llvm_set_module_inline_asm" | ||||
external module_context : llmodule -> llcontext = "LLVMGetModuleContext" | external module_context : llmodule -> llcontext = "llvm_get_module_context" | ||||
jberdine: Missed wrapping this function to decode args and encode result. | |||||
external get_module_identifier : llmodule -> string | external get_module_identifier : llmodule -> string | ||||
= "llvm_get_module_identifier" | = "llvm_get_module_identifier" | ||||
external set_module_identifer : llmodule -> string -> unit | external set_module_identifer : llmodule -> string -> unit | ||||
= "llvm_set_module_identifier" | = "llvm_set_module_identifier" | ||||
external get_module_flag : llmodule -> string -> llmetadata option | external get_module_flag : llmodule -> string -> llmetadata option | ||||
Show All 25 Lines | |||||
external fp128_type : llcontext -> lltype = "llvm_fp128_type" | external fp128_type : llcontext -> lltype = "llvm_fp128_type" | ||||
external ppc_fp128_type : llcontext -> lltype = "llvm_ppc_fp128_type" | external ppc_fp128_type : llcontext -> lltype = "llvm_ppc_fp128_type" | ||||
(*--... Operations on function types .......................................--*) | (*--... Operations on function types .......................................--*) | ||||
external function_type : lltype -> lltype array -> lltype = "llvm_function_type" | external function_type : lltype -> lltype array -> lltype = "llvm_function_type" | ||||
external var_arg_function_type : lltype -> lltype array -> lltype | external var_arg_function_type : lltype -> lltype array -> lltype | ||||
= "llvm_var_arg_function_type" | = "llvm_var_arg_function_type" | ||||
external is_var_arg : lltype -> bool = "llvm_is_var_arg" | external is_var_arg : lltype -> bool = "llvm_is_var_arg" | ||||
external return_type : lltype -> lltype = "LLVMGetReturnType" | external return_type : lltype -> lltype = "llvm_return_type" | ||||
external param_types : lltype -> lltype array = "llvm_param_types" | external param_types : lltype -> lltype array = "llvm_param_types" | ||||
(*--... Operations on struct types .........................................--*) | (*--... Operations on struct types .........................................--*) | ||||
external struct_type : llcontext -> lltype array -> lltype = "llvm_struct_type" | external struct_type : llcontext -> lltype array -> lltype = "llvm_struct_type" | ||||
external packed_struct_type : llcontext -> lltype array -> lltype | external packed_struct_type : llcontext -> lltype array -> lltype | ||||
= "llvm_packed_struct_type" | = "llvm_packed_struct_type" | ||||
external struct_name : lltype -> string option = "llvm_struct_name" | external struct_name : lltype -> string option = "llvm_struct_name" | ||||
external named_struct_type : llcontext -> string -> lltype = | external named_struct_type : llcontext -> string -> lltype = | ||||
Show All 10 Lines | |||||
external subtypes : lltype -> lltype array = "llvm_subtypes" | external subtypes : lltype -> lltype array = "llvm_subtypes" | ||||
external array_type : lltype -> int -> lltype = "llvm_array_type" | external array_type : lltype -> int -> lltype = "llvm_array_type" | ||||
external pointer_type : llcontext -> lltype = "llvm_pointer_type" | external pointer_type : llcontext -> lltype = "llvm_pointer_type" | ||||
external qualified_pointer_type : llcontext -> int -> lltype | external qualified_pointer_type : llcontext -> int -> lltype | ||||
= "llvm_qualified_pointer_type" | = "llvm_qualified_pointer_type" | ||||
external vector_type : lltype -> int -> lltype = "llvm_vector_type" | external vector_type : lltype -> int -> lltype = "llvm_vector_type" | ||||
external element_type : lltype -> lltype = "LLVMGetElementType" | external element_type : lltype -> lltype = "llvm_get_element_type" | ||||
Missed wrapping this function to decode args and encode result. jberdine: Missed wrapping this function to decode args and encode result. | |||||
external array_length : lltype -> int = "llvm_array_length" | external array_length : lltype -> int = "llvm_array_length" | ||||
external address_space : lltype -> int = "llvm_address_space" | external address_space : lltype -> int = "llvm_address_space" | ||||
external vector_size : lltype -> int = "llvm_vector_size" | external vector_size : lltype -> int = "llvm_vector_size" | ||||
(*--... Operations on other types ..........................................--*) | (*--... Operations on other types ..........................................--*) | ||||
external void_type : llcontext -> lltype = "llvm_void_type" | external void_type : llcontext -> lltype = "llvm_void_type" | ||||
external label_type : llcontext -> lltype = "llvm_label_type" | external label_type : llcontext -> lltype = "llvm_label_type" | ||||
external x86_mmx_type : llcontext -> lltype = "llvm_x86_mmx_type" | external x86_mmx_type : llcontext -> lltype = "llvm_x86_mmx_type" | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
external operand : llvalue -> int -> llvalue = "llvm_operand" | external operand : llvalue -> int -> llvalue = "llvm_operand" | ||||
external operand_use : llvalue -> int -> lluse = "llvm_operand_use" | external operand_use : llvalue -> int -> lluse = "llvm_operand_use" | ||||
external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand" | external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand" | ||||
external num_operands : llvalue -> int = "llvm_num_operands" | external num_operands : llvalue -> int = "llvm_num_operands" | ||||
external indices : llvalue -> int array = "llvm_indices" | external indices : llvalue -> int array = "llvm_indices" | ||||
(*--... Operations on constants of (mostly) any type .......................--*) | (*--... Operations on constants of (mostly) any type .......................--*) | ||||
external is_constant : llvalue -> bool = "llvm_is_constant" | external is_constant : llvalue -> bool = "llvm_is_constant" | ||||
external const_null : lltype -> llvalue = "LLVMConstNull" | external const_null : lltype -> llvalue = "llvm_const_null" | ||||
external const_all_ones : (*int|vec*)lltype -> llvalue = "LLVMConstAllOnes" | external const_all_ones : (*int|vec*)lltype -> llvalue = "llvm_const_all_ones" | ||||
external const_pointer_null : lltype -> llvalue = "LLVMConstPointerNull" | external const_pointer_null : lltype -> llvalue = "llvm_const_pointer_null" | ||||
external undef : lltype -> llvalue = "LLVMGetUndef" | external undef : lltype -> llvalue = "llvm_get_undef" | ||||
external poison : lltype -> llvalue = "LLVMGetPoison" | external poison : lltype -> llvalue = "llvm_get_poison" | ||||
external is_null : llvalue -> bool = "llvm_is_null" | external is_null : llvalue -> bool = "llvm_is_null" | ||||
external is_undef : llvalue -> bool = "llvm_is_undef" | external is_undef : llvalue -> bool = "llvm_is_undef" | ||||
external is_poison : llvalue -> bool = "llvm_is_poison" | external is_poison : llvalue -> bool = "llvm_is_poison" | ||||
external constexpr_opcode : llvalue -> Opcode.t = "llvm_constexpr_get_opcode" | external constexpr_opcode : llvalue -> Opcode.t = "llvm_constexpr_get_opcode" | ||||
(*--... Operations on instructions .........................................--*) | (*--... Operations on instructions .........................................--*) | ||||
external has_metadata : llvalue -> bool = "llvm_has_metadata" | external has_metadata : llvalue -> bool = "llvm_has_metadata" | ||||
external metadata : llvalue -> llmdkind -> llvalue option = "llvm_metadata" | external metadata : llvalue -> llmdkind -> llvalue option = "llvm_metadata" | ||||
Show All 40 Lines | |||||
external const_packed_struct : llcontext -> llvalue array -> llvalue | external const_packed_struct : llcontext -> llvalue array -> llvalue | ||||
= "llvm_const_packed_struct" | = "llvm_const_packed_struct" | ||||
external const_vector : llvalue array -> llvalue = "llvm_const_vector" | external const_vector : llvalue array -> llvalue = "llvm_const_vector" | ||||
external string_of_const : llvalue -> string option = "llvm_string_of_const" | external string_of_const : llvalue -> string option = "llvm_string_of_const" | ||||
external aggregate_element : llvalue -> int -> llvalue option | external aggregate_element : llvalue -> int -> llvalue option | ||||
= "llvm_aggregate_element" | = "llvm_aggregate_element" | ||||
(*--... Constant expressions ...............................................--*) | (*--... Constant expressions ...............................................--*) | ||||
external align_of : lltype -> llvalue = "LLVMAlignOf" | external align_of : lltype -> llvalue = "llvm_align_of" | ||||
external size_of : lltype -> llvalue = "LLVMSizeOf" | external size_of : lltype -> llvalue = "llvm_size_of" | ||||
external const_neg : llvalue -> llvalue = "LLVMConstNeg" | external const_neg : llvalue -> llvalue = "llvm_const_neg" | ||||
external const_nsw_neg : llvalue -> llvalue = "LLVMConstNSWNeg" | external const_nsw_neg : llvalue -> llvalue = "llvm_const_nsw_neg" | ||||
external const_nuw_neg : llvalue -> llvalue = "LLVMConstNUWNeg" | external const_nuw_neg : llvalue -> llvalue = "llvm_const_nuw_neg" | ||||
external const_not : llvalue -> llvalue = "LLVMConstNot" | external const_not : llvalue -> llvalue = "llvm_const_not" | ||||
external const_add : llvalue -> llvalue -> llvalue = "LLVMConstAdd" | external const_add : llvalue -> llvalue -> llvalue = "llvm_const_add" | ||||
external const_nsw_add : llvalue -> llvalue -> llvalue = "LLVMConstNSWAdd" | external const_nsw_add : llvalue -> llvalue -> llvalue = "llvm_const_nsw_add" | ||||
external const_nuw_add : llvalue -> llvalue -> llvalue = "LLVMConstNUWAdd" | external const_nuw_add : llvalue -> llvalue -> llvalue = "llvm_const_nuw_add" | ||||
external const_sub : llvalue -> llvalue -> llvalue = "LLVMConstSub" | external const_sub : llvalue -> llvalue -> llvalue = "llvm_const_sub" | ||||
external const_nsw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNSWSub" | external const_nsw_sub : llvalue -> llvalue -> llvalue = "llvm_const_nsw_sub" | ||||
external const_nuw_sub : llvalue -> llvalue -> llvalue = "LLVMConstNUWSub" | external const_nuw_sub : llvalue -> llvalue -> llvalue = "llvm_const_nuw_sub" | ||||
external const_mul : llvalue -> llvalue -> llvalue = "LLVMConstMul" | external const_mul : llvalue -> llvalue -> llvalue = "llvm_const_mul" | ||||
external const_nsw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNSWMul" | external const_nsw_mul : llvalue -> llvalue -> llvalue = "llvm_const_nsw_mul" | ||||
external const_nuw_mul : llvalue -> llvalue -> llvalue = "LLVMConstNUWMul" | external const_nuw_mul : llvalue -> llvalue -> llvalue = "llvm_const_nuw_mul" | ||||
external const_and : llvalue -> llvalue -> llvalue = "LLVMConstAnd" | external const_and : llvalue -> llvalue -> llvalue = "llvm_const_and" | ||||
external const_or : llvalue -> llvalue -> llvalue = "LLVMConstOr" | external const_or : llvalue -> llvalue -> llvalue = "llvm_const_or" | ||||
external const_xor : llvalue -> llvalue -> llvalue = "LLVMConstXor" | external const_xor : llvalue -> llvalue -> llvalue = "llvm_const_xor" | ||||
external const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue | external const_icmp : Icmp.t -> llvalue -> llvalue -> llvalue | ||||
= "llvm_const_icmp" | = "llvm_const_icmp" | ||||
external const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue | external const_fcmp : Fcmp.t -> llvalue -> llvalue -> llvalue | ||||
= "llvm_const_fcmp" | = "llvm_const_fcmp" | ||||
external const_shl : llvalue -> llvalue -> llvalue = "LLVMConstShl" | external const_shl : llvalue -> llvalue -> llvalue = "llvm_const_shl" | ||||
external const_lshr : llvalue -> llvalue -> llvalue = "LLVMConstLShr" | external const_lshr : llvalue -> llvalue -> llvalue = "llvm_const_lshr" | ||||
external const_ashr : llvalue -> llvalue -> llvalue = "LLVMConstAShr" | external const_ashr : llvalue -> llvalue -> llvalue = "llvm_const_ashr" | ||||
external const_gep : lltype -> llvalue -> llvalue array -> llvalue | external const_gep : lltype -> llvalue -> llvalue array -> llvalue | ||||
= "llvm_const_gep" | = "llvm_const_gep" | ||||
external const_in_bounds_gep : lltype -> llvalue -> llvalue array -> llvalue | external const_in_bounds_gep : lltype -> llvalue -> llvalue array -> llvalue | ||||
= "llvm_const_in_bounds_gep" | = "llvm_const_in_bounds_gep" | ||||
external const_trunc : llvalue -> lltype -> llvalue = "LLVMConstTrunc" | external const_trunc : llvalue -> lltype -> llvalue = "llvm_const_trunc" | ||||
external const_sext : llvalue -> lltype -> llvalue = "LLVMConstSExt" | external const_sext : llvalue -> lltype -> llvalue = "llvm_const_sext" | ||||
external const_zext : llvalue -> lltype -> llvalue = "LLVMConstZExt" | external const_zext : llvalue -> lltype -> llvalue = "llvm_const_zext" | ||||
external const_fptrunc : llvalue -> lltype -> llvalue = "LLVMConstFPTrunc" | external const_fptrunc : llvalue -> lltype -> llvalue = "llvm_const_fptrunc" | ||||
external const_fpext : llvalue -> lltype -> llvalue = "LLVMConstFPExt" | external const_fpext : llvalue -> lltype -> llvalue = "llvm_const_fpext" | ||||
external const_uitofp : llvalue -> lltype -> llvalue = "LLVMConstUIToFP" | external const_uitofp : llvalue -> lltype -> llvalue = "llvm_const_uitofp" | ||||
external const_sitofp : llvalue -> lltype -> llvalue = "LLVMConstSIToFP" | external const_sitofp : llvalue -> lltype -> llvalue = "llvm_const_sitofp" | ||||
external const_fptoui : llvalue -> lltype -> llvalue = "LLVMConstFPToUI" | external const_fptoui : llvalue -> lltype -> llvalue = "llvm_const_fptoui" | ||||
external const_fptosi : llvalue -> lltype -> llvalue = "LLVMConstFPToSI" | external const_fptosi : llvalue -> lltype -> llvalue = "llvm_const_fptosi" | ||||
external const_ptrtoint : llvalue -> lltype -> llvalue = "LLVMConstPtrToInt" | external const_ptrtoint : llvalue -> lltype -> llvalue = "llvm_const_ptrtoint" | ||||
external const_inttoptr : llvalue -> lltype -> llvalue = "LLVMConstIntToPtr" | external const_inttoptr : llvalue -> lltype -> llvalue = "llvm_const_inttoptr" | ||||
external const_bitcast : llvalue -> lltype -> llvalue = "LLVMConstBitCast" | external const_bitcast : llvalue -> lltype -> llvalue = "llvm_const_bitcast" | ||||
external const_zext_or_bitcast : llvalue -> lltype -> llvalue | external const_zext_or_bitcast : llvalue -> lltype -> llvalue | ||||
= "LLVMConstZExtOrBitCast" | = "llvm_const_zext_or_bitcast" | ||||
external const_sext_or_bitcast : llvalue -> lltype -> llvalue | external const_sext_or_bitcast : llvalue -> lltype -> llvalue | ||||
= "LLVMConstSExtOrBitCast" | = "llvm_const_sext_or_bitcast" | ||||
external const_trunc_or_bitcast : llvalue -> lltype -> llvalue | external const_trunc_or_bitcast : llvalue -> lltype -> llvalue | ||||
= "LLVMConstTruncOrBitCast" | = "llvm_const_trunc_or_bitcast" | ||||
external const_pointercast : llvalue -> lltype -> llvalue | external const_pointercast : llvalue -> lltype -> llvalue | ||||
= "LLVMConstPointerCast" | = "llvm_const_pointercast" | ||||
external const_intcast : llvalue -> lltype -> is_signed:bool -> llvalue | external const_intcast : llvalue -> lltype -> is_signed:bool -> llvalue | ||||
= "llvm_const_intcast" | = "llvm_const_intcast" | ||||
external const_fpcast : llvalue -> lltype -> llvalue = "LLVMConstFPCast" | external const_fpcast : llvalue -> lltype -> llvalue = "llvm_const_fpcast" | ||||
external const_select : llvalue -> llvalue -> llvalue -> llvalue | external const_select : llvalue -> llvalue -> llvalue -> llvalue | ||||
= "LLVMConstSelect" | = "llvm_const_select" | ||||
external const_extractelement : llvalue -> llvalue -> llvalue | external const_extractelement : llvalue -> llvalue -> llvalue | ||||
= "LLVMConstExtractElement" | = "llvm_const_extractelement" | ||||
external const_insertelement : llvalue -> llvalue -> llvalue -> llvalue | external const_insertelement : llvalue -> llvalue -> llvalue -> llvalue | ||||
= "LLVMConstInsertElement" | = "llvm_const_insertelement" | ||||
external const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue | external const_shufflevector : llvalue -> llvalue -> llvalue -> llvalue | ||||
= "LLVMConstShuffleVector" | = "llvm_const_shufflevector" | ||||
external const_inline_asm : lltype -> string -> string -> bool -> bool -> | external const_inline_asm : lltype -> string -> string -> bool -> bool -> | ||||
llvalue | llvalue | ||||
= "llvm_const_inline_asm" | = "llvm_const_inline_asm" | ||||
external block_address : llvalue -> llbasicblock -> llvalue = "LLVMBlockAddress" | external block_address : llvalue -> llbasicblock -> llvalue | ||||
= "llvm_blockaddress" | |||||
(*--... Operations on global variables, functions, and aliases (globals) ...--*) | (*--... Operations on global variables, functions, and aliases (globals) ...--*) | ||||
external global_parent : llvalue -> llmodule = "LLVMGetGlobalParent" | external global_parent : llvalue -> llmodule = "llvm_global_parent" | ||||
external is_declaration : llvalue -> bool = "llvm_is_declaration" | external is_declaration : llvalue -> bool = "llvm_is_declaration" | ||||
external linkage : llvalue -> Linkage.t = "llvm_linkage" | external linkage : llvalue -> Linkage.t = "llvm_linkage" | ||||
external set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage" | external set_linkage : Linkage.t -> llvalue -> unit = "llvm_set_linkage" | ||||
external unnamed_addr : llvalue -> bool = "llvm_unnamed_addr" | external unnamed_addr : llvalue -> bool = "llvm_unnamed_addr" | ||||
external set_unnamed_addr : bool -> llvalue -> unit = "llvm_set_unnamed_addr" | external set_unnamed_addr : bool -> llvalue -> unit = "llvm_set_unnamed_addr" | ||||
external section : llvalue -> string = "llvm_section" | external section : llvalue -> string = "llvm_section" | ||||
external set_section : string -> llvalue -> unit = "llvm_set_section" | external set_section : string -> llvalue -> unit = "llvm_set_section" | ||||
external visibility : llvalue -> Visibility.t = "llvm_visibility" | external visibility : llvalue -> Visibility.t = "llvm_visibility" | ||||
▲ Show 20 Lines • Show All 167 Lines • ▼ Show 20 Lines | |||||
let remove_enum_function_attr f k i = | let remove_enum_function_attr f k i = | ||||
llvm_remove_enum_function_attr f k (AttrIndex.to_int i) | llvm_remove_enum_function_attr f k (AttrIndex.to_int i) | ||||
let remove_string_function_attr f k i = | let remove_string_function_attr f k i = | ||||
llvm_remove_string_function_attr f k (AttrIndex.to_int i) | llvm_remove_string_function_attr f k (AttrIndex.to_int i) | ||||
(*--... Operations on params ...............................................--*) | (*--... Operations on params ...............................................--*) | ||||
external params : llvalue -> llvalue array = "llvm_params" | external params : llvalue -> llvalue array = "llvm_params" | ||||
external param : llvalue -> int -> llvalue = "llvm_param" | external param : llvalue -> int -> llvalue = "llvm_param" | ||||
external param_parent : llvalue -> llvalue = "LLVMGetParamParent" | external param_parent : llvalue -> llvalue = "llvm_param_parent" | ||||
external param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin" | external param_begin : llvalue -> (llvalue, llvalue) llpos = "llvm_param_begin" | ||||
external param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ" | external param_succ : llvalue -> (llvalue, llvalue) llpos = "llvm_param_succ" | ||||
external param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end" | external param_end : llvalue -> (llvalue, llvalue) llrev_pos = "llvm_param_end" | ||||
external param_pred : llvalue -> (llvalue, llvalue) llrev_pos ="llvm_param_pred" | external param_pred : llvalue -> (llvalue, llvalue) llrev_pos ="llvm_param_pred" | ||||
let rec iter_param_range f i e = | let rec iter_param_range f i e = | ||||
if i = e then () else | if i = e then () else | ||||
match i with | match i with | ||||
Show All 30 Lines | let rec fold_right_param_range f init i e = | ||||
match i with | match i with | ||||
| At_start _ -> raise (Invalid_argument "Invalid parameter range.") | | At_start _ -> raise (Invalid_argument "Invalid parameter range.") | ||||
| After p -> fold_right_param_range f (f p init) (param_pred p) e | | After p -> fold_right_param_range f (f p init) (param_pred p) e | ||||
let fold_right_params f fn init = | let fold_right_params f fn init = | ||||
fold_right_param_range f init (param_end fn) (At_start fn) | fold_right_param_range f init (param_end fn) (At_start fn) | ||||
(*--... Operations on basic blocks .........................................--*) | (*--... Operations on basic blocks .........................................--*) | ||||
external value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue" | external value_of_block : llbasicblock -> llvalue = "llvm_value_of_block" | ||||
external value_is_block : llvalue -> bool = "llvm_value_is_block" | external value_is_block : llvalue -> bool = "llvm_value_is_block" | ||||
external block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock" | external block_of_value : llvalue -> llbasicblock = "llvm_block_of_value" | ||||
external block_parent : llbasicblock -> llvalue = "LLVMGetBasicBlockParent" | external block_parent : llbasicblock -> llvalue = "llvm_block_parent" | ||||
external basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks" | external basic_blocks : llvalue -> llbasicblock array = "llvm_basic_blocks" | ||||
external entry_block : llvalue -> llbasicblock = "LLVMGetEntryBasicBlock" | external entry_block : llvalue -> llbasicblock = "llvm_entry_block" | ||||
external delete_block : llbasicblock -> unit = "llvm_delete_block" | external delete_block : llbasicblock -> unit = "llvm_delete_block" | ||||
external remove_block : llbasicblock -> unit = "llvm_remove_block" | external remove_block : llbasicblock -> unit = "llvm_remove_block" | ||||
external move_block_before : llbasicblock -> llbasicblock -> unit | external move_block_before : llbasicblock -> llbasicblock -> unit | ||||
= "llvm_move_block_before" | = "llvm_move_block_before" | ||||
external move_block_after : llbasicblock -> llbasicblock -> unit | external move_block_after : llbasicblock -> llbasicblock -> unit | ||||
= "llvm_move_block_after" | = "llvm_move_block_after" | ||||
external append_block : llcontext -> string -> llvalue -> llbasicblock | external append_block : llcontext -> string -> llvalue -> llbasicblock | ||||
= "llvm_append_block" | = "llvm_append_block" | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | let rec fold_right_block_range f init i e = | ||||
match i with | match i with | ||||
| At_start _ -> raise (Invalid_argument "Invalid block range.") | | At_start _ -> raise (Invalid_argument "Invalid block range.") | ||||
| After bb -> fold_right_block_range f (f bb init) (block_pred bb) e | | After bb -> fold_right_block_range f (f bb init) (block_pred bb) e | ||||
let fold_right_blocks f fn init = | let fold_right_blocks f fn init = | ||||
fold_right_block_range f init (block_end fn) (At_start fn) | fold_right_block_range f init (block_end fn) (At_start fn) | ||||
(*--... Operations on instructions .........................................--*) | (*--... Operations on instructions .........................................--*) | ||||
external instr_parent : llvalue -> llbasicblock = "LLVMGetInstructionParent" | external instr_parent : llvalue -> llbasicblock = "llvm_instr_parent" | ||||
external instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos | external instr_begin : llbasicblock -> (llbasicblock, llvalue) llpos | ||||
= "llvm_instr_begin" | = "llvm_instr_begin" | ||||
external instr_succ : llvalue -> (llbasicblock, llvalue) llpos | external instr_succ : llvalue -> (llbasicblock, llvalue) llpos | ||||
= "llvm_instr_succ" | = "llvm_instr_succ" | ||||
external instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos | external instr_end : llbasicblock -> (llbasicblock, llvalue) llrev_pos | ||||
= "llvm_instr_end" | = "llvm_instr_end" | ||||
external instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos | external instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos | ||||
= "llvm_instr_pred" | = "llvm_instr_pred" | ||||
▲ Show 20 Lines • Show All 67 Lines • ▼ Show 20 Lines | let remove_enum_call_site_attr f k i = | ||||
llvm_remove_enum_call_site_attr f k (AttrIndex.to_int i) | llvm_remove_enum_call_site_attr f k (AttrIndex.to_int i) | ||||
let remove_string_call_site_attr f k i = | let remove_string_call_site_attr f k i = | ||||
llvm_remove_string_call_site_attr f k (AttrIndex.to_int i) | llvm_remove_string_call_site_attr f k (AttrIndex.to_int i) | ||||
(*--... Operations on call and invoke instructions (only) ..................--*) | (*--... Operations on call and invoke instructions (only) ..................--*) | ||||
external num_arg_operands : llvalue -> int = "llvm_num_arg_operands" | external num_arg_operands : llvalue -> int = "llvm_num_arg_operands" | ||||
external is_tail_call : llvalue -> bool = "llvm_is_tail_call" | external is_tail_call : llvalue -> bool = "llvm_is_tail_call" | ||||
external set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call" | external set_tail_call : bool -> llvalue -> unit = "llvm_set_tail_call" | ||||
external get_normal_dest : llvalue -> llbasicblock = "LLVMGetNormalDest" | external get_normal_dest : llvalue -> llbasicblock = "llvm_get_normal_dest" | ||||
external get_unwind_dest : llvalue -> llbasicblock = "LLVMGetUnwindDest" | external get_unwind_dest : llvalue -> llbasicblock = "llvm_get_unwind_dest" | ||||
(*--... Operations on load/store instructions (only) .......................--*) | (*--... Operations on load/store instructions (only) .......................--*) | ||||
external is_volatile : llvalue -> bool = "llvm_is_volatile" | external is_volatile : llvalue -> bool = "llvm_is_volatile" | ||||
external set_volatile : bool -> llvalue -> unit = "llvm_set_volatile" | external set_volatile : bool -> llvalue -> unit = "llvm_set_volatile" | ||||
(*--... Operations on terminators ..........................................--*) | (*--... Operations on terminators ..........................................--*) | ||||
let is_terminator llv = | let is_terminator llv = | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
external build_malloc : lltype -> string -> llbuilder -> llvalue = | external build_malloc : lltype -> string -> llbuilder -> llvalue = | ||||
"llvm_build_malloc" | "llvm_build_malloc" | ||||
external build_array_malloc : lltype -> llvalue -> string -> llbuilder -> | external build_array_malloc : lltype -> llvalue -> string -> llbuilder -> | ||||
llvalue = "llvm_build_array_malloc" | llvalue = "llvm_build_array_malloc" | ||||
external build_free : llvalue -> llbuilder -> llvalue = "llvm_build_free" | external build_free : llvalue -> llbuilder -> llvalue = "llvm_build_free" | ||||
external add_case : llvalue -> llvalue -> llbasicblock -> unit | external add_case : llvalue -> llvalue -> llbasicblock -> unit | ||||
= "llvm_add_case" | = "llvm_add_case" | ||||
external switch_default_dest : llvalue -> llbasicblock = | external switch_default_dest : llvalue -> llbasicblock = | ||||
"LLVMGetSwitchDefaultDest" | "llvm_switch_default_dest" | ||||
external build_indirect_br : llvalue -> int -> llbuilder -> llvalue | external build_indirect_br : llvalue -> int -> llbuilder -> llvalue | ||||
= "llvm_build_indirect_br" | = "llvm_build_indirect_br" | ||||
external add_destination : llvalue -> llbasicblock -> unit | external add_destination : llvalue -> llbasicblock -> unit | ||||
= "llvm_add_destination" | = "llvm_add_destination" | ||||
external build_invoke : lltype -> llvalue -> llvalue array -> llbasicblock -> | external build_invoke : lltype -> llvalue -> llvalue array -> llbasicblock -> | ||||
llbasicblock -> string -> llbuilder -> llvalue | llbasicblock -> string -> llbuilder -> llvalue | ||||
= "llvm_build_invoke_bc" "llvm_build_invoke_nat" | = "llvm_build_invoke_bc" "llvm_build_invoke_nat" | ||||
external build_landingpad : lltype -> llvalue -> int -> string -> llbuilder -> | external build_landingpad : lltype -> llvalue -> int -> string -> llbuilder -> | ||||
▲ Show 20 Lines • Show All 182 Lines • ▼ Show 20 Lines | |||||
(*===-- Pass Manager ------------------------------------------------------===*) | (*===-- Pass Manager ------------------------------------------------------===*) | ||||
module PassManager = struct | module PassManager = struct | ||||
type 'a t | type 'a t | ||||
type any = [ `Module | `Function ] | type any = [ `Module | `Function ] | ||||
external create : unit -> [ `Module ] t = "llvm_passmanager_create" | external create : unit -> [ `Module ] t = "llvm_passmanager_create" | ||||
external create_function : llmodule -> [ `Function ] t | external create_function : llmodule -> [ `Function ] t | ||||
= "LLVMCreateFunctionPassManager" | = "llvm_passmanager_create_function" | ||||
external run_module : llmodule -> [ `Module ] t -> bool | external run_module : llmodule -> [ `Module ] t -> bool | ||||
= "llvm_passmanager_run_module" | = "llvm_passmanager_run_module" | ||||
external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize" | external initialize : [ `Function ] t -> bool = "llvm_passmanager_initialize" | ||||
external run_function : llvalue -> [ `Function ] t -> bool | external run_function : llvalue -> [ `Function ] t -> bool | ||||
= "llvm_passmanager_run_function" | = "llvm_passmanager_run_function" | ||||
external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize" | external finalize : [ `Function ] t -> bool = "llvm_passmanager_finalize" | ||||
external dispose : [< any ] t -> unit = "llvm_passmanager_dispose" | external dispose : [< any ] t -> unit = "llvm_passmanager_dispose" | ||||
end | end |
Missed wrapping this function to decode args and encode result.