diff options
| author | Patrick Walton <[email protected]> | 2010-12-06 17:17:49 -0800 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-12-06 17:17:49 -0800 |
| commit | 3f9d5dab5bd3e15eddbccbb97af30523cff17142 (patch) | |
| tree | bed17beb0d5785517dd31fe97f979ca85b987b31 /src/comp/lib/llvm.rs | |
| parent | rustc: Translate tag constructors. Can't call them at the moment due to lack ... (diff) | |
| download | rust-3f9d5dab5bd3e15eddbccbb97af30523cff17142.tar.xz rust-3f9d5dab5bd3e15eddbccbb97af30523cff17142.zip | |
rustc: Run the verifier over LLVM modules before writing them out
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: |