sig
  type 'a t
  type any = [ `Function | `Module ]
  val create : unit -> [ `Module ] Llvm.PassManager.t
  val create_function : Llvm.llmodule -> [ `Function ] Llvm.PassManager.t
  val run_module : Llvm.llmodule -> [ `Module ] Llvm.PassManager.t -> bool
  val initialize : [ `Function ] Llvm.PassManager.t -> bool
  val run_function : Llvm.llvalue -> [ `Function ] Llvm.PassManager.t -> bool
  val finalize : [ `Function ] Llvm.PassManager.t -> bool
  val dispose : [< Llvm.PassManager.any ] Llvm.PassManager.t -> unit
end