1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(*===-- llvm_analysis.mli - LLVM Ocaml Interface ----------------*- C++ -*-===* 2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao * 3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao * The LLVM Compiler Infrastructure 4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao * 5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao * This file is distributed under the University of Illinois Open Source 6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao * License. See LICENSE.TXT for details. 7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao * 8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao *===----------------------------------------------------------------------===*) 9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** Intermediate representation analysis. 11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao This interface provides an ocaml API for LLVM IR analyses, the classes in 13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao the Analysis library. *) 14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** [verify_module m] returns [None] if the module [m] is valid, and 16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao [Some reason] if it is invalid. [reason] is a string containing a 17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao human-readable validation report. See [llvm::verifyModule]. *) 18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexternal verify_module : Llvm.llmodule -> string option = "llvm_verify_module" 19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** [verify_function f] returns [None] if the function [f] is valid, and 21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao [Some reason] if it is invalid. [reason] is a string containing a 22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao human-readable validation report. See [llvm::verifyFunction]. *) 23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexternal verify_function : Llvm.llvalue -> bool = "llvm_verify_function" 24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** [verify_module m] returns if the module [m] is valid, but prints a 26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao validation report to [stderr] and aborts the program if it is invalid. See 27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao [llvm::verifyModule]. *) 28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexternal assert_valid_module : Llvm.llmodule -> unit 29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao = "llvm_assert_valid_module" 30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** [verify_function f] returns if the function [f] is valid, but prints a 32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao validation report to [stderr] and aborts the program if it is invalid. See 33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao [llvm::verifyFunction]. *) 34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexternal assert_valid_function : Llvm.llvalue -> unit 35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao = "llvm_assert_valid_function" 36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** [view_function_cfg f] opens up a ghostscript window displaying the CFG of 38e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao the current function with the code for each basic block inside. 39e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao See [llvm::Function::viewCFG]. *) 40e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexternal view_function_cfg : Llvm.llvalue -> unit = "llvm_view_function_cfg" 41e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 42e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao(** [view_function_cfg_only f] works just like [view_function_cfg], but does not 43e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao include the contents of basic blocks into the nodes. 44e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao See [llvm::Function::viewCFGOnly]. *) 45e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoexternal view_function_cfg_only : Llvm.llvalue -> unit 46e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao = "llvm_view_function_cfg_only" 47