about summary refs log tree commit diff
path: root/compiler/rustc_codegen_ssa/src
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2025-04-07 16:47:22 -0300
committerSantiago Pastorino <spastorino@gmail.com>2025-04-07 16:53:12 -0300
commit4a0ea02e3a8a799bdb58ac62078c56434cc51a27 (patch)
tree02eb99d366e89131a9e3daa13072cf244d9685fb /compiler/rustc_codegen_ssa/src
parentd6ad9e6191cd70234a9fd20a1e6e4f5e90cd1985 (diff)
downloadrust-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.rs18
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,