about summary refs log tree commit diff
path: root/compiler/rustc_mir/src
diff options
context:
space:
mode:
authoroli <github35764891676564198441@oli-obk.de>2021-01-11 17:24:41 +0000
committeroli <github35764891676564198441@oli-obk.de>2021-01-11 17:24:41 +0000
commite90b521a15f12863fced1023e700d02e015931a4 (patch)
tree81b608b7d3cbafab4a56e253935b3362c7df8896 /compiler/rustc_mir/src
parent41a732dfd498af4d5eeed9943ead3692b2d1db0c (diff)
downloadrust-e90b521a15f12863fced1023e700d02e015931a4.tar.gz
rust-e90b521a15f12863fced1023e700d02e015931a4.zip
--emit=mir now emits both `mir_for_ctfe` and `optimized_mir` for `const fn`
Diffstat (limited to 'compiler/rustc_mir/src')
-rw-r--r--compiler/rustc_mir/src/util/pretty.rs32
1 files changed, 21 insertions, 11 deletions
diff --git a/compiler/rustc_mir/src/util/pretty.rs b/compiler/rustc_mir/src/util/pretty.rs
index ca8bcffa896..7fc1c3a73af 100644
--- a/compiler/rustc_mir/src/util/pretty.rs
+++ b/compiler/rustc_mir/src/util/pretty.rs
@@ -273,13 +273,6 @@ pub fn write_mir_pretty<'tcx>(
 
     let mut first = true;
     for def_id in dump_mir_def_ids(tcx, single) {
-        let body = match tcx.hir().body_const_context(def_id.expect_local()) {
-            // For `const fn` we want to render the optimized MIR. If you want the mir used in
-            // ctfe, you can dump the MIR after the `Deaggregator` optimization pass.
-            None | Some(rustc_hir::ConstContext::ConstFn) => tcx.optimized_mir(def_id),
-            Some(_) => tcx.mir_for_ctfe(def_id),
-        };
-
         if first {
             first = false;
         } else {
@@ -287,11 +280,28 @@ pub fn write_mir_pretty<'tcx>(
             writeln!(w)?;
         }
 
-        write_mir_fn(tcx, body, &mut |_, _| Ok(()), w)?;
-
-        for body in tcx.promoted_mir(def_id) {
-            writeln!(w)?;
+        let render_body = |w: &mut dyn Write, body| -> io::Result<()> {
             write_mir_fn(tcx, body, &mut |_, _| Ok(()), w)?;
+
+            for body in tcx.promoted_mir(def_id) {
+                writeln!(w)?;
+                write_mir_fn(tcx, body, &mut |_, _| Ok(()), w)?;
+            }
+            Ok(())
+        };
+        match tcx.hir().body_const_context(def_id.expect_local()) {
+            None => render_body(w, tcx.optimized_mir(def_id))?,
+            // For `const fn` we want to render the optimized MIR. If you want the mir used in
+            // ctfe, you can dump the MIR after the `Deaggregator` optimization pass.
+            Some(rustc_hir::ConstContext::ConstFn) => {
+                render_body(w, tcx.optimized_mir(def_id))?;
+                writeln!(w)?;
+                writeln!(w, "// MIR FOR CTFE")?;
+                // Do not use `render_body`, as that would render the promoteds again, but these
+                // are shared between mir_for_ctfe and optimized_mir
+                write_mir_fn(tcx, tcx.mir_for_ctfe(def_id), &mut |_, _| Ok(()), w)?;
+            }
+            Some(_) => render_body(w, tcx.mir_for_ctfe(def_id))?,
         }
     }
     Ok(())