Make it possible to include llvm-c without including C++ headers. Patch by Filip...
[oota-llvm.git] / include / llvm-c / Transforms / PassManagerBuilder.h
1 /*===-- llvm-c/Transform/PassManagerBuilder.h - PMB C Interface ---*- C -*-===*\
2 |*                                                                            *|
3 |*                     The LLVM Compiler Infrastructure                       *|
4 |*                                                                            *|
5 |* This file is distributed under the University of Illinois Open Source      *|
6 |* License. See LICENSE.TXT for details.                                      *|
7 |*                                                                            *|
8 |*===----------------------------------------------------------------------===*|
9 |*                                                                            *|
10 |* This header declares the C interface to the PassManagerBuilder class.      *|
11 |*                                                                            *|
12 \*===----------------------------------------------------------------------===*/
13
14 #ifndef LLVM_C_TRANSFORMS_PASSMANAGERBUILDER_H
15 #define LLVM_C_TRANSFORMS_PASSMANAGERBUILDER_H
16
17 #include "llvm-c/Core.h"
18
19 typedef struct LLVMOpaquePassManagerBuilder *LLVMPassManagerBuilderRef;
20
21 #if defined(__cplusplus) && !defined(LLVM_DO_NOT_INCLUDE_CPP_HEADERS)
22 #include "llvm/Transforms/IPO/PassManagerBuilder.h"
23 #endif
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 /**
30  * @defgroup LLVMCTransformsPassManagerBuilder Pass manager builder
31  * @ingroup LLVMCTransforms
32  *
33  * @{
34  */
35
36 /** See llvm::PassManagerBuilder. */
37 LLVMPassManagerBuilderRef LLVMPassManagerBuilderCreate(void);
38 void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB);
39
40 /** See llvm::PassManagerBuilder::OptLevel. */
41 void
42 LLVMPassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef PMB,
43                                   unsigned OptLevel);
44
45 /** See llvm::PassManagerBuilder::SizeLevel. */
46 void
47 LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef PMB,
48                                    unsigned SizeLevel);
49
50 /** See llvm::PassManagerBuilder::DisableUnitAtATime. */
51 void
52 LLVMPassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef PMB,
53                                             LLVMBool Value);
54
55 /** See llvm::PassManagerBuilder::DisableUnrollLoops. */
56 void
57 LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB,
58                                             LLVMBool Value);
59
60 /** See llvm::PassManagerBuilder::DisableSimplifyLibCalls */
61 void
62 LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef PMB,
63                                                  LLVMBool Value);
64
65 /** See llvm::PassManagerBuilder::Inliner. */
66 void
67 LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef PMB,
68                                               unsigned Threshold);
69
70 /** See llvm::PassManagerBuilder::populateFunctionPassManager. */
71 void
72 LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef PMB,
73                                                   LLVMPassManagerRef PM);
74
75 /** See llvm::PassManagerBuilder::populateModulePassManager. */
76 void
77 LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef PMB,
78                                                 LLVMPassManagerRef PM);
79
80 /** See llvm::PassManagerBuilder::populateLTOPassManager. */
81 void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef PMB,
82                                                   LLVMPassManagerRef PM,
83                                                   LLVMBool Internalize,
84                                                   LLVMBool RunInliner);
85
86 /**
87  * @}
88  */
89
90 #ifdef __cplusplus
91 }
92 #endif
93
94 #if defined(__cplusplus) && !defined(LLVM_DO_NOT_INCLUDE_CPP_HEADERS)
95 namespace llvm {
96   inline PassManagerBuilder *unwrap(LLVMPassManagerBuilderRef P) {
97     return reinterpret_cast<PassManagerBuilder*>(P);
98   }
99
100   inline LLVMPassManagerBuilderRef wrap(PassManagerBuilder *P) {
101     return reinterpret_cast<LLVMPassManagerBuilderRef>(P);
102   }
103 }
104 #endif /* defined(__cplusplus) && !defined(LLVM_DO_NOT_INCLUDE_CPP_HEADERS) */
105
106 #endif