@@ -25,7 +25,7 @@ use rustc::session::config::{self, OutputFilenames, OutputType, Passes, SomePass
25
25
use rustc:: session:: Session ;
26
26
use rustc:: util:: nodemap:: FxHashMap ;
27
27
use time_graph:: { self , TimeGraph , Timeline } ;
28
- use llvm:: { self , DiagnosticInfo , PassManagerRef , SMDiagnostic } ;
28
+ use llvm:: { self , DiagnosticInfo , PassManager , SMDiagnostic } ;
29
29
use { CodegenResults , ModuleSource , ModuleCodegen , CompiledModule , ModuleKind } ;
30
30
use CrateInfo ;
31
31
use rustc:: hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
@@ -92,9 +92,9 @@ pub fn llvm_err(handler: &errors::Handler, msg: String) -> FatalError {
92
92
93
93
pub fn write_output_file (
94
94
handler : & errors:: Handler ,
95
- target : & llvm:: TargetMachine ,
96
- pm : llvm:: PassManagerRef ,
97
- m : & llvm:: Module ,
95
+ target : & ' ll llvm:: TargetMachine ,
96
+ pm : & llvm:: PassManager < ' ll > ,
97
+ m : & ' ll llvm:: Module ,
98
98
output : & Path ,
99
99
file_type : llvm:: FileType ) -> Result < ( ) , FatalError > {
100
100
unsafe {
@@ -516,50 +516,52 @@ unsafe fn optimize(cgcx: &CodegenContext,
516
516
let fpm = llvm:: LLVMCreateFunctionPassManagerForModule ( llmod) ;
517
517
let mpm = llvm:: LLVMCreatePassManager ( ) ;
518
518
519
- // If we're verifying or linting, add them to the function pass
520
- // manager.
521
- let addpass = |pass_name : & str | {
522
- let pass_name = CString :: new ( pass_name) . unwrap ( ) ;
523
- let pass = match llvm:: LLVMRustFindAndCreatePass ( pass_name. as_ptr ( ) ) {
524
- Some ( pass) => pass,
525
- None => return false ,
526
- } ;
527
- let pass_manager = match llvm:: LLVMRustPassKind ( pass) {
528
- llvm:: PassKind :: Function => fpm,
529
- llvm:: PassKind :: Module => mpm,
530
- llvm:: PassKind :: Other => {
531
- diag_handler. err ( "Encountered LLVM pass kind we can't handle" ) ;
532
- return true
533
- } ,
519
+ {
520
+ // If we're verifying or linting, add them to the function pass
521
+ // manager.
522
+ let addpass = |pass_name : & str | {
523
+ let pass_name = CString :: new ( pass_name) . unwrap ( ) ;
524
+ let pass = match llvm:: LLVMRustFindAndCreatePass ( pass_name. as_ptr ( ) ) {
525
+ Some ( pass) => pass,
526
+ None => return false ,
527
+ } ;
528
+ let pass_manager = match llvm:: LLVMRustPassKind ( pass) {
529
+ llvm:: PassKind :: Function => & * fpm,
530
+ llvm:: PassKind :: Module => & * mpm,
531
+ llvm:: PassKind :: Other => {
532
+ diag_handler. err ( "Encountered LLVM pass kind we can't handle" ) ;
533
+ return true
534
+ } ,
535
+ } ;
536
+ llvm:: LLVMRustAddPass ( pass_manager, pass) ;
537
+ true
534
538
} ;
535
- llvm:: LLVMRustAddPass ( pass_manager, pass) ;
536
- true
537
- } ;
538
539
539
- if config. verify_llvm_ir { assert ! ( addpass( "verify" ) ) ; }
540
- if !config. no_prepopulate_passes {
541
- llvm:: LLVMRustAddAnalysisPasses ( tm, fpm, llmod) ;
542
- llvm:: LLVMRustAddAnalysisPasses ( tm, mpm, llmod) ;
543
- let opt_level = config. opt_level . unwrap_or ( llvm:: CodeGenOptLevel :: None ) ;
544
- let prepare_for_thin_lto = cgcx. lto == Lto :: Thin || cgcx. lto == Lto :: ThinLocal ;
545
- with_llvm_pmb ( llmod, & config, opt_level, prepare_for_thin_lto, & mut |b| {
546
- llvm:: LLVMPassManagerBuilderPopulateFunctionPassManager ( b, fpm) ;
547
- llvm:: LLVMPassManagerBuilderPopulateModulePassManager ( b, mpm) ;
548
- } )
549
- }
540
+ if config. verify_llvm_ir { assert ! ( addpass( "verify" ) ) ; }
541
+ if !config. no_prepopulate_passes {
542
+ llvm:: LLVMRustAddAnalysisPasses ( tm, fpm, llmod) ;
543
+ llvm:: LLVMRustAddAnalysisPasses ( tm, mpm, llmod) ;
544
+ let opt_level = config. opt_level . unwrap_or ( llvm:: CodeGenOptLevel :: None ) ;
545
+ let prepare_for_thin_lto = cgcx. lto == Lto :: Thin || cgcx. lto == Lto :: ThinLocal ;
546
+ with_llvm_pmb ( llmod, & config, opt_level, prepare_for_thin_lto, & mut |b| {
547
+ llvm:: LLVMPassManagerBuilderPopulateFunctionPassManager ( b, fpm) ;
548
+ llvm:: LLVMPassManagerBuilderPopulateModulePassManager ( b, mpm) ;
549
+ } )
550
+ }
550
551
551
- for pass in & config. passes {
552
- if !addpass ( pass) {
553
- diag_handler. warn ( & format ! ( "unknown pass `{}`, ignoring" ,
554
- pass) ) ;
552
+ for pass in & config. passes {
553
+ if !addpass ( pass) {
554
+ diag_handler. warn ( & format ! ( "unknown pass `{}`, ignoring" ,
555
+ pass) ) ;
556
+ }
555
557
}
556
- }
557
558
558
- for pass in & cgcx. plugin_passes {
559
- if !addpass ( pass) {
560
- diag_handler. err ( & format ! ( "a plugin asked for LLVM pass \
561
- `{}` but LLVM does not \
562
- recognize it", pass) ) ;
559
+ for pass in & cgcx. plugin_passes {
560
+ if !addpass ( pass) {
561
+ diag_handler. err ( & format ! ( "a plugin asked for LLVM pass \
562
+ `{}` but LLVM does not \
563
+ recognize it", pass) ) ;
564
+ }
563
565
}
564
566
}
565
567
@@ -636,11 +638,11 @@ unsafe fn codegen(cgcx: &CodegenContext,
636
638
// pass manager passed to the closure should be ensured to not
637
639
// escape the closure itself, and the manager should only be
638
640
// used once.
639
- unsafe fn with_codegen < F , R > ( tm : & llvm:: TargetMachine ,
640
- llmod : & llvm:: Module ,
641
+ unsafe fn with_codegen < ' ll , F , R > ( tm : & ' ll llvm:: TargetMachine ,
642
+ llmod : & ' ll llvm:: Module ,
641
643
no_builtins : bool ,
642
644
f : F ) -> R
643
- where F : FnOnce ( PassManagerRef ) -> R ,
645
+ where F : FnOnce ( & ' ll mut PassManager < ' ll > ) -> R ,
644
646
{
645
647
let cpm = llvm:: LLVMCreatePassManager ( ) ;
646
648
llvm:: LLVMRustAddAnalysisPasses ( tm, cpm, llmod) ;
0 commit comments