@@ -7,6 +7,7 @@ use rustc_middle::mir::{Body, Local, UnwindTerminateReason, traversal};
77use rustc_middle:: ty:: layout:: { FnAbiOf , HasTyCtxt , HasTypingEnv , TyAndLayout } ;
88use rustc_middle:: ty:: { self , Instance , Ty , TyCtxt , TypeVisitableExt } ;
99use rustc_middle:: { bug, mir, span_bug} ;
10+ use rustc_mir_transform:: { add_call_guards, dump_mir, pass_manager} ;
1011use rustc_target:: callconv:: { FnAbi , PassMode } ;
1112use tracing:: { debug, instrument} ;
1213
@@ -167,6 +168,18 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
167168 ty:: TypingEnv :: fully_monomorphized ( ) ,
168169 ty:: EarlyBinder :: bind ( mir. clone ( ) ) ,
169170 ) ;
171+ pass_manager:: run_passes (
172+ cx. tcx ( ) ,
173+ & mut mir,
174+ & [
175+ // Some cleanup necessary at least for LLVM and potentially other codegen backends.
176+ & add_call_guards:: CriticalCallEdges ,
177+ // Dump the end result for testing and debugging purposes.
178+ & dump_mir:: Marker ( "Monomorphic" ) ,
179+ ] ,
180+ Some ( mir:: MirPhase :: Runtime ( mir:: RuntimePhase :: Monomorphic ) ) ,
181+ pass_manager:: Optimizations :: Allowed ,
182+ ) ;
170183 if tcx. features ( ) . ergonomic_clones ( ) {
171184 mir = optimize_use_clone :: < Bx > ( cx, mir) ;
172185 }
0 commit comments