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/transforms/scalar_opts/scalar_opts_ocaml.c
/*===-- scalar_opts_ocaml.c - LLVM OCaml Glue -------------------*- C++ -*-===*\ | /*===-- scalar_opts_ocaml.c - LLVM OCaml Glue -------------------*- C++ -*-===*\ | ||||
|* *| | |* *| | ||||
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| | |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| | ||||
|* Exceptions. *| | |* Exceptions. *| | ||||
|* See https://llvm.org/LICENSE.txt for license information. *| | |* See https://llvm.org/LICENSE.txt for license information. *| | ||||
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| | |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| | ||||
|* *| | |* *| | ||||
|*===----------------------------------------------------------------------===*| | |*===----------------------------------------------------------------------===*| | ||||
|* *| | |* *| | ||||
|* This file glues LLVM's OCaml interface to its C interface. These functions *| | |* This file glues LLVM's OCaml interface to its C interface. These functions *| | ||||
|* are by and large transparent wrappers to the corresponding C functions. *| | |* are by and large transparent wrappers to the corresponding C functions. *| | ||||
|* *| | |* *| | ||||
|* Note that these functions intentionally take liberties with the CAMLparamX *| | |||||
|* macros, since most of the parameters are not GC heap objects. *| | |||||
|* *| | |||||
\*===----------------------------------------------------------------------===*/ | \*===----------------------------------------------------------------------===*/ | ||||
#include "caml/memory.h" | |||||
#include "caml/misc.h" | |||||
#include "caml/mlvalues.h" | |||||
#include "llvm_ocaml.h" | |||||
#include "llvm-c/Transforms/Scalar.h" | #include "llvm-c/Transforms/Scalar.h" | ||||
#include "llvm-c/Transforms/Utils.h" | #include "llvm-c/Transforms/Utils.h" | ||||
#include "caml/mlvalues.h" | |||||
#include "caml/misc.h" | |||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_aggressive_dce(LLVMPassManagerRef PM) { | value llvm_add_aggressive_dce(value PM) { | ||||
LLVMAddAggressiveDCEPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddAggressiveDCEPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
value llvm_add_dce(LLVMPassManagerRef PM) { | value llvm_add_dce(value PM) { | ||||
LLVMAddDCEPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddDCEPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_alignment_from_assumptions(LLVMPassManagerRef PM) { | value llvm_add_alignment_from_assumptions(value PM) { | ||||
LLVMAddAlignmentFromAssumptionsPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddAlignmentFromAssumptionsPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_cfg_simplification(LLVMPassManagerRef PM) { | value llvm_add_cfg_simplification(value PM) { | ||||
LLVMAddCFGSimplificationPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddCFGSimplificationPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_dead_store_elimination(LLVMPassManagerRef PM) { | value llvm_add_dead_store_elimination(value PM) { | ||||
LLVMAddDeadStoreEliminationPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddDeadStoreEliminationPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_scalarizer(LLVMPassManagerRef PM) { | value llvm_add_scalarizer(value PM) { | ||||
LLVMAddScalarizerPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddScalarizerPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_merged_load_store_motion(LLVMPassManagerRef PM) { | value llvm_add_merged_load_store_motion(value PM) { | ||||
LLVMAddMergedLoadStoreMotionPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddMergedLoadStoreMotionPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_gvn(LLVMPassManagerRef PM) { | value llvm_add_gvn(value PM) { | ||||
LLVMAddGVNPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddGVNPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_ind_var_simplify(LLVMPassManagerRef PM) { | value llvm_add_ind_var_simplify(value PM) { | ||||
LLVMAddIndVarSimplifyPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddIndVarSimplifyPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_instruction_combining(LLVMPassManagerRef PM) { | value llvm_add_instruction_combining(value PM) { | ||||
LLVMAddInstructionCombiningPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddInstructionCombiningPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_jump_threading(LLVMPassManagerRef PM) { | value llvm_add_jump_threading(value PM) { | ||||
LLVMAddJumpThreadingPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddJumpThreadingPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_licm(LLVMPassManagerRef PM) { | value llvm_add_licm(value PM) { | ||||
LLVMAddLICMPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLICMPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_loop_deletion(LLVMPassManagerRef PM) { | value llvm_add_loop_deletion(value PM) { | ||||
LLVMAddLoopDeletionPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLoopDeletionPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_loop_idiom(LLVMPassManagerRef PM) { | value llvm_add_loop_idiom(value PM) { | ||||
LLVMAddLoopIdiomPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLoopIdiomPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_loop_rotate(LLVMPassManagerRef PM) { | value llvm_add_loop_rotate(value PM) { | ||||
LLVMAddLoopRotatePass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLoopRotatePass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_loop_reroll(LLVMPassManagerRef PM) { | value llvm_add_loop_reroll(value PM) { | ||||
LLVMAddLoopRerollPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLoopRerollPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_loop_unroll(LLVMPassManagerRef PM) { | value llvm_add_loop_unroll(value PM) { | ||||
LLVMAddLoopUnrollPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLoopUnrollPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_memcpy_opt(LLVMPassManagerRef PM) { | value llvm_add_memcpy_opt(value PM) { | ||||
LLVMAddMemCpyOptPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddMemCpyOptPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_partially_inline_lib_calls(LLVMPassManagerRef PM) { | value llvm_add_partially_inline_lib_calls(value PM) { | ||||
LLVMAddPartiallyInlineLibCallsPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddPartiallyInlineLibCallsPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_lower_atomic(LLVMPassManagerRef PM) { | value llvm_add_lower_atomic(value PM) { | ||||
LLVMAddLowerAtomicPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLowerAtomicPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_lower_switch(LLVMPassManagerRef PM) { | value llvm_add_lower_switch(value PM) { | ||||
LLVMAddLowerSwitchPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLowerSwitchPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_promote_memory_to_register(LLVMPassManagerRef PM) { | value llvm_add_promote_memory_to_register(value PM) { | ||||
LLVMAddPromoteMemoryToRegisterPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddPromoteMemoryToRegisterPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_reassociation(LLVMPassManagerRef PM) { | value llvm_add_reassociation(value PM) { | ||||
LLVMAddReassociatePass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddReassociatePass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_sccp(LLVMPassManagerRef PM) { | value llvm_add_sccp(value PM) { | ||||
LLVMAddSCCPPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddSCCPPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_scalar_repl_aggregates(LLVMPassManagerRef PM) { | value llvm_add_scalar_repl_aggregates(value PM) { | ||||
LLVMAddScalarReplAggregatesPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddScalarReplAggregatesPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_scalar_repl_aggregates_ssa(LLVMPassManagerRef PM) { | value llvm_add_scalar_repl_aggregates_ssa(value PM) { | ||||
LLVMAddScalarReplAggregatesPassSSA(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddScalarReplAggregatesPassSSA(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* int -> [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* int -> [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_scalar_repl_aggregates_with_threshold(value threshold, | value llvm_add_scalar_repl_aggregates_with_threshold(value threshold, | ||||
LLVMPassManagerRef PM) { | value PM) { | ||||
LLVMAddScalarReplAggregatesPassWithThreshold(PM, Int_val(threshold)); | CAMLparam2(threshold, PM); | ||||
return Val_unit; | LLVMAddScalarReplAggregatesPassWithThreshold(PassManager_val(PM), | ||||
Int_val(threshold)); | |||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_simplify_lib_calls(LLVMPassManagerRef PM) { | value llvm_add_simplify_lib_calls(value PM) { | ||||
LLVMAddSimplifyLibCallsPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddSimplifyLibCallsPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_tail_call_elimination(LLVMPassManagerRef PM) { | value llvm_add_tail_call_elimination(value PM) { | ||||
LLVMAddTailCallEliminationPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddTailCallEliminationPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_demote_memory_to_register(LLVMPassManagerRef PM) { | value llvm_add_demote_memory_to_register(value PM) { | ||||
LLVMAddDemoteMemoryToRegisterPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddDemoteMemoryToRegisterPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_verifier(LLVMPassManagerRef PM) { | value llvm_add_verifier(value PM) { | ||||
LLVMAddVerifierPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddVerifierPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_correlated_value_propagation(LLVMPassManagerRef PM) { | value llvm_add_correlated_value_propagation(value PM) { | ||||
LLVMAddCorrelatedValuePropagationPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddCorrelatedValuePropagationPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_early_cse(LLVMPassManagerRef PM) { | value llvm_add_early_cse(value PM) { | ||||
LLVMAddEarlyCSEPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddEarlyCSEPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_lower_expect_intrinsic(LLVMPassManagerRef PM) { | value llvm_add_lower_expect_intrinsic(value PM) { | ||||
LLVMAddLowerExpectIntrinsicPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLowerExpectIntrinsicPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_lower_constant_intrinsics(LLVMPassManagerRef PM) { | value llvm_add_lower_constant_intrinsics(value PM) { | ||||
LLVMAddLowerConstantIntrinsicsPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddLowerConstantIntrinsicsPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_type_based_alias_analysis(LLVMPassManagerRef PM) { | value llvm_add_type_based_alias_analysis(value PM) { | ||||
LLVMAddTypeBasedAliasAnalysisPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddTypeBasedAliasAnalysisPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_scoped_no_alias_aa(LLVMPassManagerRef PM) { | value llvm_add_scoped_no_alias_aa(value PM) { | ||||
LLVMAddScopedNoAliasAAPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddScopedNoAliasAAPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_basic_alias_analysis(LLVMPassManagerRef PM) { | value llvm_add_basic_alias_analysis(value PM) { | ||||
LLVMAddBasicAliasAnalysisPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddBasicAliasAnalysisPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } | ||||
/* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | /* [<Llvm.PassManager.any] Llvm.PassManager.t -> unit */ | ||||
value llvm_add_unify_function_exit_nodes(LLVMPassManagerRef PM) { | value llvm_add_unify_function_exit_nodes(value PM) { | ||||
LLVMAddUnifyFunctionExitNodesPass(PM); | CAMLparam1(PM); | ||||
return Val_unit; | LLVMAddUnifyFunctionExitNodesPass(PassManager_val(PM)); | ||||
CAMLreturn(Val_unit); | |||||
} | } |