| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 1 | /*===-- llvm-c/Analysis.h - Analysis Library C Interface --------*- C++ -*-===*\ | 
|  | 2 | |*                                                                            *| | 
| Chandler Carruth | 2946cd7 | 2019-01-19 08:50:56 +0000 | [diff] [blame] | 3 | |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *| | 
|  | 4 | |* Exceptions.                                                                *| | 
|  | 5 | |* See https://llvm.org/LICENSE.txt for license information.                  *| | 
|  | 6 | |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *| | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 7 | |*                                                                            *| | 
|  | 8 | |*===----------------------------------------------------------------------===*| | 
|  | 9 | |*                                                                            *| | 
|  | 10 | |* This header declares the C interface to libLLVMAnalysis.a, which           *| | 
|  | 11 | |* implements various analyses of the LLVM IR.                                *| | 
|  | 12 | |*                                                                            *| | 
|  | 13 | |* Many exotic languages can interoperate with C code but have a harder time  *| | 
|  | 14 | |* with C++ due to name mangling. So in addition to C, this interface enables *| | 
|  | 15 | |* tools written in such languages.                                           *| | 
|  | 16 | |*                                                                            *| | 
|  | 17 | \*===----------------------------------------------------------------------===*/ | 
|  | 18 |  | 
|  | 19 | #ifndef LLVM_C_ANALYSIS_H | 
|  | 20 | #define LLVM_C_ANALYSIS_H | 
|  | 21 |  | 
| Eric Christopher | a6b9600 | 2015-12-18 01:46:52 +0000 | [diff] [blame] | 22 | #include "llvm-c/Types.h" | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 23 |  | 
|  | 24 | #ifdef __cplusplus | 
|  | 25 | extern "C" { | 
|  | 26 | #endif | 
|  | 27 |  | 
| Gregory Szorc | 34c863a | 2012-03-21 03:54:29 +0000 | [diff] [blame] | 28 | /** | 
|  | 29 | * @defgroup LLVMCAnalysis Analysis | 
|  | 30 | * @ingroup LLVMC | 
|  | 31 | * | 
|  | 32 | * @{ | 
|  | 33 | */ | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 34 |  | 
|  | 35 | typedef enum { | 
|  | 36 | LLVMAbortProcessAction, /* verifier will print to stderr and abort() */ | 
|  | 37 | LLVMPrintMessageAction, /* verifier will print to stderr and return 1 */ | 
|  | 38 | LLVMReturnStatusAction  /* verifier will just return 1 */ | 
|  | 39 | } LLVMVerifierFailureAction; | 
|  | 40 |  | 
|  | 41 |  | 
|  | 42 | /* Verifies that a module is valid, taking the specified action if not. | 
| Gordon Henriksen | 34eb6d8 | 2007-12-19 22:30:40 +0000 | [diff] [blame] | 43 | Optionally returns a human-readable description of any invalid constructs. | 
|  | 44 | OutMessage must be disposed with LLVMDisposeMessage. */ | 
| Chris Lattner | 25963c6 | 2010-01-09 22:27:07 +0000 | [diff] [blame] | 45 | LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action, | 
|  | 46 | char **OutMessage); | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 47 |  | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 48 | /* Verifies that a single function is valid, taking the specified action. Useful | 
|  | 49 | for debugging. */ | 
| Chris Lattner | 25963c6 | 2010-01-09 22:27:07 +0000 | [diff] [blame] | 50 | LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action); | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 51 |  | 
| Erick Tryzelaar | 4a0da98 | 2008-03-31 16:22:09 +0000 | [diff] [blame] | 52 | /* Open up a ghostview window that displays the CFG of the current function. | 
|  | 53 | Useful for debugging. */ | 
|  | 54 | void LLVMViewFunctionCFG(LLVMValueRef Fn); | 
|  | 55 | void LLVMViewFunctionCFGOnly(LLVMValueRef Fn); | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 56 |  | 
| Gregory Szorc | 34c863a | 2012-03-21 03:54:29 +0000 | [diff] [blame] | 57 | /** | 
|  | 58 | * @} | 
|  | 59 | */ | 
|  | 60 |  | 
| Gordon Henriksen | c3d661a | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 61 | #ifdef __cplusplus | 
|  | 62 | } | 
|  | 63 | #endif | 
|  | 64 |  | 
|  | 65 | #endif |