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