@@ -173,12 +173,7 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
173173 let tcx = cx. tcx ( ) ;
174174 let llfn = cx. get_fn ( instance) ;
175175
176- let mir = tcx. instance_mir ( instance. def ) ;
177- let mir = instance. instantiate_mir_and_normalize_erasing_regions (
178- tcx,
179- ty:: TypingEnv :: fully_monomorphized ( ) ,
180- ty:: EarlyBinder :: bind ( mir. clone ( ) ) ,
181- ) ;
176+ let mut mir = tcx. instance_mir ( instance. def ) ;
182177
183178 let fn_abi = cx. fn_abi_of_instance ( instance, ty:: List :: empty ( ) ) ;
184179 debug ! ( "fn_abi: {:?}" , fn_abi) ;
@@ -188,6 +183,15 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
188183 return ;
189184 }
190185
186+ if tcx. features ( ) . ergonomic_clones ( ) {
187+ let monomorphized_mir = instance. instantiate_mir_and_normalize_erasing_regions (
188+ tcx,
189+ ty:: TypingEnv :: fully_monomorphized ( ) ,
190+ ty:: EarlyBinder :: bind ( mir. clone ( ) ) ,
191+ ) ;
192+ mir = tcx. arena . alloc ( optimize_use_clone :: < Bx > ( cx, monomorphized_mir) ) ;
193+ }
194+
191195 let debug_context = cx. create_function_debug_context ( instance, fn_abi, llfn, & mir) ;
192196
193197 let start_llbb = Bx :: append_block ( cx, llfn, "start" ) ;
@@ -210,8 +214,6 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
210214 } )
211215 . collect ( ) ;
212216
213- let mir = tcx. arena . alloc ( optimize_use_clone :: < Bx > ( cx, mir) ) ;
214-
215217 let mut fx = FunctionCx {
216218 instance,
217219 mir,
0 commit comments