diff options
| author | Santiago Pastorino <spastorino@gmail.com> | 2025-04-07 16:47:22 -0300 |
|---|---|---|
| committer | Santiago Pastorino <spastorino@gmail.com> | 2025-04-07 16:53:12 -0300 |
| commit | 4a0ea02e3a8a799bdb58ac62078c56434cc51a27 (patch) | |
| tree | 02eb99d366e89131a9e3daa13072cf244d9685fb /compiler/rustc_codegen_ssa/src | |
| parent | d6ad9e6191cd70234a9fd20a1e6e4f5e90cd1985 (diff) | |
| download | rust-4a0ea02e3a8a799bdb58ac62078c56434cc51a27.tar.gz rust-4a0ea02e3a8a799bdb58ac62078c56434cc51a27.zip | |
Only clone mir body if tcx.features().ergonomic_clones()
Diffstat (limited to 'compiler/rustc_codegen_ssa/src')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/mir/mod.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/mod.rs b/compiler/rustc_codegen_ssa/src/mir/mod.rs index fbbf93e2dc4..6a37889217a 100644 --- a/compiler/rustc_codegen_ssa/src/mir/mod.rs +++ b/compiler/rustc_codegen_ssa/src/mir/mod.rs @@ -173,12 +173,7 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( let tcx = cx.tcx(); let llfn = cx.get_fn(instance); - let mir = tcx.instance_mir(instance.def); - let mir = instance.instantiate_mir_and_normalize_erasing_regions( - tcx, - ty::TypingEnv::fully_monomorphized(), - ty::EarlyBinder::bind(mir.clone()), - ); + let mut mir = tcx.instance_mir(instance.def); let fn_abi = cx.fn_abi_of_instance(instance, ty::List::empty()); debug!("fn_abi: {:?}", fn_abi); @@ -188,6 +183,15 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( return; } + if tcx.features().ergonomic_clones() { + let monomorphized_mir = instance.instantiate_mir_and_normalize_erasing_regions( + tcx, + ty::TypingEnv::fully_monomorphized(), + ty::EarlyBinder::bind(mir.clone()), + ); + mir = tcx.arena.alloc(optimize_use_clone::<Bx>(cx, monomorphized_mir)); + } + let debug_context = cx.create_function_debug_context(instance, fn_abi, llfn, &mir); let start_llbb = Bx::append_block(cx, llfn, "start"); @@ -210,8 +214,6 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( }) .collect(); - let mir = tcx.arena.alloc(optimize_use_clone::<Bx>(cx, mir)); - let mut fx = FunctionCx { instance, mir, |
