Skip to content

Commit 4a0ea02

Browse files
committed
Only clone mir body if tcx.features().ergonomic_clones()
1 parent d6ad9e6 commit 4a0ea02

File tree

1 file changed

+10
-8
lines changed
  • compiler/rustc_codegen_ssa/src/mir

1 file changed

+10
-8
lines changed

compiler/rustc_codegen_ssa/src/mir/mod.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)