| (*===-- llvm_scalar_opts.mli - LLVM OCaml Interface -----------*- OCaml -*-===* | 
 |  * | 
 |  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 |  * See https://llvm.org/LICENSE.txt for license information. | 
 |  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 |  * | 
 |  *===----------------------------------------------------------------------===*) | 
 |  | 
 | (** Scalar Transforms. | 
 |  | 
 |     This interface provides an OCaml API for LLVM scalar transforms, the | 
 |     classes in the [LLVMScalarOpts] library. *) | 
 |  | 
 | (** See the [llvm::createAggressiveDCEPass] function. *) | 
 | external add_aggressive_dce | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_aggressive_dce" | 
 |  | 
 | (** See the [llvm::createAlignmentFromAssumptionsPass] function. *) | 
 | external add_alignment_from_assumptions | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_alignment_from_assumptions" | 
 |  | 
 | (** See the [llvm::createCFGSimplificationPass] function. *) | 
 | external add_cfg_simplification | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_cfg_simplification" | 
 |  | 
 | (** See [llvm::createDeadStoreEliminationPass] function. *) | 
 | external add_dead_store_elimination | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_dead_store_elimination" | 
 |  | 
 | (** See [llvm::createScalarizerPass] function. *) | 
 | external add_scalarizer | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_scalarizer" | 
 |  | 
 | (** See [llvm::createMergedLoadStoreMotionPass] function. *) | 
 | external add_merged_load_store_motion | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_merged_load_store_motion" | 
 |  | 
 | (** See the [llvm::createGVNPass] function. *) | 
 | external add_gvn | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_gvn" | 
 |  | 
 | (** See the [llvm::createIndVarSimplifyPass] function. *) | 
 | external add_ind_var_simplification | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_ind_var_simplify" | 
 |  | 
 | (** See the [llvm::createInstructionCombiningPass] function. *) | 
 | external add_instruction_combination | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_instruction_combining" | 
 |  | 
 | (** See the [llvm::createJumpThreadingPass] function. *) | 
 | external add_jump_threading | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_jump_threading" | 
 |  | 
 | (** See the [llvm::createLICMPass] function. *) | 
 | external add_licm | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_licm" | 
 |  | 
 | (** See the [llvm::createLoopDeletionPass] function. *) | 
 | external add_loop_deletion | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_loop_deletion" | 
 |  | 
 | (** See the [llvm::createLoopIdiomPass] function. *) | 
 | external add_loop_idiom | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_loop_idiom" | 
 |  | 
 | (** See the [llvm::createLoopRotatePass] function. *) | 
 | external add_loop_rotation | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_loop_rotate" | 
 |  | 
 | (** See the [llvm::createLoopRerollPass] function. *) | 
 | external add_loop_reroll | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_loop_reroll" | 
 |  | 
 | (** See the [llvm::createLoopUnrollPass] function. *) | 
 | external add_loop_unroll | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_loop_unroll" | 
 |  | 
 | (** See the [llvm::createLoopUnswitchPass] function. *) | 
 | external add_loop_unswitch | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_loop_unswitch" | 
 |  | 
 | (** See the [llvm::createMemCpyOptPass] function. *) | 
 | external add_memcpy_opt | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_memcpy_opt" | 
 |  | 
 | (** See the [llvm::createPartiallyInlineLibCallsPass] function. *) | 
 | external add_partially_inline_lib_calls | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_partially_inline_lib_calls" | 
 |  | 
 | (** See the [llvm::createLowerAtomicPass] function. *) | 
 | external add_lower_atomic | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_lower_atomic" | 
 |  | 
 | (** See the [llvm::createLowerSwitchPass] function. *) | 
 | external add_lower_switch | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_lower_switch" | 
 |  | 
 | (** See the [llvm::createPromoteMemoryToRegisterPass] function. *) | 
 | external add_memory_to_register_promotion | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_promote_memory_to_register" | 
 |  | 
 | (** See the [llvm::createReassociatePass] function. *) | 
 | external add_reassociation | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_reassociation" | 
 |  | 
 | (** See the [llvm::createSCCPPass] function. *) | 
 | external add_sccp | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_sccp" | 
 |  | 
 | (** See the [llvm::createSROAPass] function. *) | 
 | external add_scalar_repl_aggregation | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_scalar_repl_aggregates" | 
 |  | 
 | (** See the [llvm::createSROAPass] function. *) | 
 | external add_scalar_repl_aggregation_ssa | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_scalar_repl_aggregates_ssa" | 
 |  | 
 | (** See the [llvm::createSROAPass] function. *) | 
 | external add_scalar_repl_aggregation_with_threshold | 
 |   : int -> [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_scalar_repl_aggregates_with_threshold" | 
 |  | 
 | (** See the [llvm::createSimplifyLibCallsPass] function. *) | 
 | external add_lib_call_simplification | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_simplify_lib_calls" | 
 |  | 
 | (** See the [llvm::createTailCallEliminationPass] function. *) | 
 | external add_tail_call_elimination | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_tail_call_elimination" | 
 |  | 
 | (** See the [llvm::createConstantPropagationPass] function. *) | 
 | external add_constant_propagation | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_constant_propagation" | 
 |  | 
 | (** See the [llvm::createDemoteMemoryToRegisterPass] function. *) | 
 | external add_memory_to_register_demotion | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_demote_memory_to_register" | 
 |  | 
 | (** See the [llvm::createVerifierPass] function. *) | 
 | external add_verifier | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_verifier" | 
 |  | 
 | (** See the [llvm::createCorrelatedValuePropagationPass] function. *) | 
 | external add_correlated_value_propagation | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_correlated_value_propagation" | 
 |  | 
 | (** See the [llvm::createEarlyCSE] function. *) | 
 | external add_early_cse | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_early_cse" | 
 |  | 
 | (** See the [llvm::createLowerExpectIntrinsicPass] function. *) | 
 | external add_lower_expect_intrinsic | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_lower_expect_intrinsic" | 
 |  | 
 | (** See the [llvm::createTypeBasedAliasAnalysisPass] function. *) | 
 | external add_type_based_alias_analysis | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_type_based_alias_analysis" | 
 |  | 
 | (** See the [llvm::createScopedNoAliasAAPass] function. *) | 
 | external add_scoped_no_alias_alias_analysis | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_scoped_no_alias_aa" | 
 |  | 
 | (** See the [llvm::createBasicAliasAnalysisPass] function. *) | 
 | external add_basic_alias_analysis | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_basic_alias_analysis" | 
 |  | 
 | (** See the [llvm::createUnifyFunctionExitNodesPass] function. *) | 
 | external add_unify_function_exit_nodes | 
 |   : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit | 
 |   = "llvm_add_unify_function_exit_nodes" |