1 #include "core.h"
2 #include "llvm-c/Transforms/PassManagerBuilder.h"
3 #include "llvm-c/Target.h"
4 #include "llvm/Transforms/IPO/PassManagerBuilder.h"
5 
6 
7 extern "C" {
8 
9 namespace llvm {
unwrap(LLVMPassManagerBuilderRef P)10     inline PassManagerBuilder *unwrap(LLVMPassManagerBuilderRef P) {
11         return reinterpret_cast<PassManagerBuilder*>(P);
12     }
13 
wrap(PassManagerBuilder * P)14     inline LLVMPassManagerBuilderRef wrap(PassManagerBuilder *P) {
15         return reinterpret_cast<LLVMPassManagerBuilderRef>(P);
16     }
17 }
18 
19 
20 API_EXPORT(LLVMPassManagerBuilderRef)
LLVMPY_PassManagerBuilderCreate()21 LLVMPY_PassManagerBuilderCreate()
22 {
23     return LLVMPassManagerBuilderCreate();
24 }
25 
26 API_EXPORT(void)
LLVMPY_PassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB)27 LLVMPY_PassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB)
28 {
29     LLVMPassManagerBuilderDispose(PMB);
30 }
31 
32 API_EXPORT(void)
LLVMPY_PassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef PMB,LLVMPassManagerRef PM)33 LLVMPY_PassManagerBuilderPopulateModulePassManager(
34                             LLVMPassManagerBuilderRef PMB,
35                             LLVMPassManagerRef PM)
36 {
37     LLVMPassManagerBuilderPopulateModulePassManager(PMB, PM);
38 }
39 
40 API_EXPORT(unsigned)
LLVMPY_PassManagerBuilderGetOptLevel(LLVMPassManagerBuilderRef PMB)41 LLVMPY_PassManagerBuilderGetOptLevel(LLVMPassManagerBuilderRef PMB)
42 {
43     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
44     return pmb->OptLevel;
45 }
46 
47 API_EXPORT(void)
LLVMPY_PassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef PMB,unsigned OptLevel)48 LLVMPY_PassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef PMB,
49                                   unsigned OptLevel)
50 {
51     LLVMPassManagerBuilderSetOptLevel(PMB, OptLevel);
52 }
53 
54 API_EXPORT(unsigned)
LLVMPY_PassManagerBuilderGetSizeLevel(LLVMPassManagerBuilderRef PMB)55 LLVMPY_PassManagerBuilderGetSizeLevel(LLVMPassManagerBuilderRef PMB)
56 {
57     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
58     return pmb->SizeLevel;
59 }
60 
61 API_EXPORT(void)
LLVMPY_PassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef PMB,unsigned SizeLevel)62 LLVMPY_PassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef PMB,
63                                    unsigned SizeLevel)
64 {
65     LLVMPassManagerBuilderSetSizeLevel(PMB, SizeLevel);
66 }
67 
68 API_EXPORT(int)
LLVMPY_PassManagerBuilderGetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB)69 LLVMPY_PassManagerBuilderGetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB)
70 {
71     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
72     return pmb->DisableUnrollLoops;
73 }
74 
75 API_EXPORT(void)
LLVMPY_PassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB,LLVMBool Value)76 LLVMPY_PassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB,
77                                             LLVMBool Value)
78 {
79     LLVMPassManagerBuilderSetDisableUnrollLoops(PMB, Value);
80 }
81 
82 API_EXPORT(void)
LLVMPY_PassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef PMB,unsigned Threshold)83 LLVMPY_PassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef PMB,
84                                                  unsigned Threshold)
85 {
86     LLVMPassManagerBuilderUseInlinerWithThreshold(PMB, Threshold);
87 }
88 
89 API_EXPORT(void)
LLVMPY_PassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef PMB,LLVMPassManagerRef PM)90 LLVMPY_PassManagerBuilderPopulateFunctionPassManager(
91                                         LLVMPassManagerBuilderRef PMB,
92                                         LLVMPassManagerRef PM)
93 {
94     LLVMPassManagerBuilderPopulateFunctionPassManager(PMB, PM);
95 }
96 
97 
98 API_EXPORT(void)
LLVMPY_PassManagerBuilderSetLoopVectorize(LLVMPassManagerBuilderRef PMB,int Value)99 LLVMPY_PassManagerBuilderSetLoopVectorize(LLVMPassManagerBuilderRef PMB,
100                                           int Value)
101 {
102     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
103     pmb->LoopVectorize = Value;
104 }
105 
106 API_EXPORT(int)
LLVMPY_PassManagerBuilderGetLoopVectorize(LLVMPassManagerBuilderRef PMB)107 LLVMPY_PassManagerBuilderGetLoopVectorize(LLVMPassManagerBuilderRef PMB)
108 {
109     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
110     return pmb->LoopVectorize;
111 }
112 
113 
114 API_EXPORT(void)
LLVMPY_PassManagerBuilderSetSLPVectorize(LLVMPassManagerBuilderRef PMB,int Value)115 LLVMPY_PassManagerBuilderSetSLPVectorize(LLVMPassManagerBuilderRef PMB,
116                                           int Value)
117 {
118     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
119     pmb->SLPVectorize = Value;
120 }
121 
122 API_EXPORT(int)
LLVMPY_PassManagerBuilderGetSLPVectorize(LLVMPassManagerBuilderRef PMB)123 LLVMPY_PassManagerBuilderGetSLPVectorize(LLVMPassManagerBuilderRef PMB)
124 {
125     llvm::PassManagerBuilder *pmb = llvm::unwrap(PMB);
126     return pmb->SLPVectorize;
127 }
128 
129 
130 } // end extern "C"
131