diff options
Diffstat (limited to 'src/comp/lib/llvm.rs')
| -rw-r--r-- | src/comp/lib/llvm.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/comp/lib/llvm.rs b/src/comp/lib/llvm.rs index 6063c3c6..c5236725 100644 --- a/src/comp/lib/llvm.rs +++ b/src/comp/lib/llvm.rs @@ -687,6 +687,16 @@ native mod llvm = llvm_lib { fn LLVMPreferredAlignmentOfType(TargetDataRef TD, TypeRef Ty) -> uint; /** Disposes target data. */ fn LLVMDisposeTargetData(TargetDataRef TD); + + /** Creates a pass manager. */ + fn LLVMCreatePassManager() -> PassManagerRef; + /** Disposes a pass manager. */ + fn LLVMDisposePassManager(PassManagerRef PM); + /** Runs a pass manager on a module. */ + fn LLVMRunPassManager(PassManagerRef PM, ModuleRef M) -> Bool; + + /** Adds a verification pass. */ + fn LLVMAddVerifierPass(PassManagerRef PM); } /* Slightly more terse object-interface to LLVM's 'builder' functions. */ @@ -1209,6 +1219,19 @@ fn mk_target_data(str string_rep) -> target_data { ret rec(lltd=lltd, dtor=target_data_dtor(lltd)); } +/* Memory-managed interface to pass managers. */ + +obj pass_manager_dtor(PassManagerRef PM) { + drop { llvm.LLVMDisposePassManager(PM); } +} + +type pass_manager = rec(PassManagerRef llpm, pass_manager_dtor dtor); + +fn mk_pass_manager() -> pass_manager { + auto llpm = llvm.LLVMCreatePassManager(); + ret rec(llpm=llpm, dtor=pass_manager_dtor(llpm)); +} + // // Local Variables: |