@@ -87,9 +87,30 @@ void add_scheduler_source(const CompilerConfig* config, Module* dst) {
8787 destroy_ir_arena (get_module_arena (builtin_scheduler_mod ));
8888}
8989
90+ void run_pass_impl (CompilerConfig * config , Module * * pmod , IrArena * initial_arena , RewritePass pass , String pass_name ) {
91+ Module * old_mod = NULL ;
92+ old_mod = * pmod ;
93+ * pmod = pass (config , * pmod );
94+ (* pmod )-> sealed = true;
95+ if (SHADY_RUN_VERIFY )
96+ verify_module (config , * pmod );
97+ if (get_module_arena (old_mod ) != get_module_arena (* pmod ) && get_module_arena (old_mod ) != initial_arena )
98+ destroy_ir_arena (get_module_arena (old_mod ));
99+ old_mod = * pmod ;
100+ if (config -> optimisations .cleanup .after_every_pass )
101+ * pmod = cleanup (config , * pmod );
102+ debugvv_print ("After pass %s: \n" , pass_name );
103+ log_module (DEBUGVV , config , * pmod );
104+ if (SHADY_RUN_VERIFY )
105+ verify_module (config , * pmod );
106+ if (get_module_arena (old_mod ) != get_module_arena (* pmod ) && get_module_arena (old_mod ) != initial_arena )
107+ destroy_ir_arena (get_module_arena (old_mod ));
108+ if (config -> hooks .after_pass .fn )
109+ config -> hooks .after_pass .fn (config -> hooks .after_pass .uptr , pass_name , * pmod );
110+ }
111+
90112CompilationResult run_compiler_passes (CompilerConfig * config , Module * * pmod ) {
91113 IrArena * initial_arena = (* pmod )-> arena ;
92- Module * old_mod = NULL ;
93114
94115 if (config -> dynamic_scheduling ) {
95116 * pmod = import (config , * pmod ); // we don't want to mess with the original module
0 commit comments