1*9880d681SAndroid Build Coastguard Worker /*===-- llvm-c/Analysis.h - Analysis Library C Interface --------*- C++ -*-===*\ 2*9880d681SAndroid Build Coastguard Worker |* *| 3*9880d681SAndroid Build Coastguard Worker |* The LLVM Compiler Infrastructure *| 4*9880d681SAndroid Build Coastguard Worker |* *| 5*9880d681SAndroid Build Coastguard Worker |* This file is distributed under the University of Illinois Open Source *| 6*9880d681SAndroid Build Coastguard Worker |* License. See LICENSE.TXT for details. *| 7*9880d681SAndroid Build Coastguard Worker |* *| 8*9880d681SAndroid Build Coastguard Worker |*===----------------------------------------------------------------------===*| 9*9880d681SAndroid Build Coastguard Worker |* *| 10*9880d681SAndroid Build Coastguard Worker |* This header declares the C interface to libLLVMAnalysis.a, which *| 11*9880d681SAndroid Build Coastguard Worker |* implements various analyses of the LLVM IR. *| 12*9880d681SAndroid Build Coastguard Worker |* *| 13*9880d681SAndroid Build Coastguard Worker |* Many exotic languages can interoperate with C code but have a harder time *| 14*9880d681SAndroid Build Coastguard Worker |* with C++ due to name mangling. So in addition to C, this interface enables *| 15*9880d681SAndroid Build Coastguard Worker |* tools written in such languages. *| 16*9880d681SAndroid Build Coastguard Worker |* *| 17*9880d681SAndroid Build Coastguard Worker \*===----------------------------------------------------------------------===*/ 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_C_ANALYSIS_H 20*9880d681SAndroid Build Coastguard Worker #define LLVM_C_ANALYSIS_H 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker #include "llvm-c/Types.h" 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker #ifdef __cplusplus 25*9880d681SAndroid Build Coastguard Worker extern "C" { 26*9880d681SAndroid Build Coastguard Worker #endif 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker /** 29*9880d681SAndroid Build Coastguard Worker * @defgroup LLVMCAnalysis Analysis 30*9880d681SAndroid Build Coastguard Worker * @ingroup LLVMC 31*9880d681SAndroid Build Coastguard Worker * 32*9880d681SAndroid Build Coastguard Worker * @{ 33*9880d681SAndroid Build Coastguard Worker */ 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker typedef enum { 36*9880d681SAndroid Build Coastguard Worker LLVMAbortProcessAction, /* verifier will print to stderr and abort() */ 37*9880d681SAndroid Build Coastguard Worker LLVMPrintMessageAction, /* verifier will print to stderr and return 1 */ 38*9880d681SAndroid Build Coastguard Worker LLVMReturnStatusAction /* verifier will just return 1 */ 39*9880d681SAndroid Build Coastguard Worker } LLVMVerifierFailureAction; 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker /* Verifies that a module is valid, taking the specified action if not. 43*9880d681SAndroid Build Coastguard Worker Optionally returns a human-readable description of any invalid constructs. 44*9880d681SAndroid Build Coastguard Worker OutMessage must be disposed with LLVMDisposeMessage. */ 45*9880d681SAndroid Build Coastguard Worker LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action, 46*9880d681SAndroid Build Coastguard Worker char **OutMessage); 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker /* Verifies that a single function is valid, taking the specified action. Useful 49*9880d681SAndroid Build Coastguard Worker for debugging. */ 50*9880d681SAndroid Build Coastguard Worker LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action); 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker /* Open up a ghostview window that displays the CFG of the current function. 53*9880d681SAndroid Build Coastguard Worker Useful for debugging. */ 54*9880d681SAndroid Build Coastguard Worker void LLVMViewFunctionCFG(LLVMValueRef Fn); 55*9880d681SAndroid Build Coastguard Worker void LLVMViewFunctionCFGOnly(LLVMValueRef Fn); 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker /** 58*9880d681SAndroid Build Coastguard Worker * @} 59*9880d681SAndroid Build Coastguard Worker */ 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker #ifdef __cplusplus 62*9880d681SAndroid Build Coastguard Worker } 63*9880d681SAndroid Build Coastguard Worker #endif 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker #endif 66