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