@@ -79,16 +79,42 @@ fn test_init_all_passes_for_module() {
79
79
80
80
#[ test]
81
81
fn test_pass_manager_builder ( ) {
82
- let builder = PassManagerBuilder :: create ( ) ;
82
+ let pass_manager_builder = PassManagerBuilder :: create ( ) ;
83
83
84
- builder . set_optimization_level ( Some ( & Aggressive ) ) ;
85
- builder . set_size_level ( 2 ) ;
86
- builder . set_inliner_with_threshold ( 42 ) ;
87
- builder . set_disable_unit_at_a_time ( true ) ;
88
- builder . set_disable_unroll_loops ( true ) ;
89
- builder . set_disable_simplify_lib_calls ( true ) ;
84
+ pass_manager_builder . set_optimization_level ( Some ( & Aggressive ) ) ;
85
+ pass_manager_builder . set_size_level ( 2 ) ;
86
+ pass_manager_builder . set_inliner_with_threshold ( 42 ) ;
87
+ pass_manager_builder . set_disable_unit_at_a_time ( true ) ;
88
+ pass_manager_builder . set_disable_unroll_loops ( true ) ;
89
+ pass_manager_builder . set_disable_simplify_lib_calls ( true ) ;
90
90
91
- // TODO: Run on various type of pass managers
91
+ let context = Context :: create ( ) ;
92
+ let module = context. create_module ( "my_module" ) ;
93
+
94
+ let fn_pass_manager = PassManager :: create_for_function ( & module) ;
95
+
96
+ pass_manager_builder. populate_function_pass_manager ( & fn_pass_manager) ;
97
+
98
+ let void_type = context. void_type ( ) ;
99
+ let fn_type = void_type. fn_type ( & [ ] , false ) ;
100
+ let fn_value = module. add_function ( "my_fn" , & fn_type, None ) ;
101
+ let builder = context. create_builder ( ) ;
102
+ let entry = context. append_basic_block ( & fn_value, "entry" ) ;
103
+
104
+ builder. position_at_end ( & entry) ;
105
+ builder. build_return ( None ) ;
106
+
107
+ // TODO: Test with actual changes? Would be true in that case
108
+ assert ! ( !fn_pass_manager. run_on_function( & fn_value) ) ;
109
+
110
+ let module_pass_manager = PassManager :: create_for_module ( ) ;
111
+
112
+ pass_manager_builder. populate_module_pass_manager ( & module_pass_manager) ;
113
+
114
+ // REVIEW: Seems like no changes were made, why does it return true?
115
+ assert ! ( module_pass_manager. run_on_module( & module) ) ;
116
+
117
+ // TODO: Populate LTO pass manager?
92
118
}
93
119
94
120
#[ test]
0 commit comments