@@ -173,12 +173,7 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
173
173
let tcx = cx. tcx ( ) ;
174
174
let llfn = cx. get_fn ( instance) ;
175
175
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 ) ;
182
177
183
178
let fn_abi = cx. fn_abi_of_instance ( instance, ty:: List :: empty ( ) ) ;
184
179
debug ! ( "fn_abi: {:?}" , fn_abi) ;
@@ -188,6 +183,15 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
188
183
return ;
189
184
}
190
185
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
+
191
195
let debug_context = cx. create_function_debug_context ( instance, fn_abi, llfn, & mir) ;
192
196
193
197
let start_llbb = Bx :: append_block ( cx, llfn, "start" ) ;
@@ -210,8 +214,6 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
210
214
} )
211
215
. collect ( ) ;
212
216
213
- let mir = tcx. arena . alloc ( optimize_use_clone :: < Bx > ( cx, mir) ) ;
214
-
215
217
let mut fx = FunctionCx {
216
218
instance,
217
219
mir,
0 commit comments