From e0055323fd4bcaa1fefdd1d9d6b79ad0b00a3dd8 Mon Sep 17 00:00:00 2001 From: Smitty Date: Fri, 23 Apr 2021 16:14:57 -0400 Subject: [PATCH] Mention unpretty=mir-cfg for debugging MIR --- src/mir/debugging.md | 5 + src/mir/mir_cfg.svg | 270 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 275 insertions(+) create mode 100644 src/mir/mir_cfg.svg diff --git a/src/mir/debugging.md b/src/mir/debugging.md index c6734f8a..b7182fa9 100644 --- a/src/mir/debugging.md +++ b/src/mir/debugging.md @@ -88,6 +88,11 @@ rustc.main.002-006.NoLandingPads.before.mir (Here, the `main-promoted[0]` files refer to the MIR for "promoted constants" that appeared within the `main` function.) +The `-Z unpretty=mir-cfg` flag can be used to create a graphviz MIR +control-flow diagram for the whole crate: + +![A control-flow diagram](mir_cfg.svg) + TODO: anything else? [dataflow state]: ./dataflow.html#graphviz-diagrams diff --git a/src/mir/mir_cfg.svg b/src/mir/mir_cfg.svg new file mode 100644 index 00000000..70705ec0 --- /dev/null +++ b/src/mir/mir_cfg.svg @@ -0,0 +1,270 @@ + + + + + + +__crate__ + + +cluster_Mir_0_4 + +fn main() -> () +let _1: i32; +let mut _2: i32; +let mut _3: bool; +let mut _4: i32; +let mut _5: i32; +debug x => _1; +debug y => _2; + + +cluster_Mir_0_3 + +fn incr() -> i32 +let mut _1: i32; +let mut _2: bool; +let mut _3: bool; +debug ret => _1; + + + +bb0__0_4 + + +0 + +StorageLive(_1) +_1 = const 5_i32 +StorageLive(_2) +_2 = const 3_i32 +StorageLive(_3) +StorageLive(_4) +_4 = _1 +_3 = Gt(move _4, const 3_i32) +StorageDead(_4) + +switchInt(move _3) + + + +bb1__0_4 + + +1 + +_2 = const 4_i32 +_0 = const () + +goto + + + +bb0__0_4->bb1__0_4 + + +otherwise + + + +bb2__0_4 + + +2 + +StorageLive(_5) + +_5 = incr() + + + +bb0__0_4->bb2__0_4 + + +false + + + +bb4__0_4 + + +4 + +StorageDead(_3) +StorageDead(_2) +StorageDead(_1) + +return + + + +bb1__0_4->bb4__0_4 + + + + + +bb3__0_4 + + +3 + +_2 = Add(_2, move _5) +StorageDead(_5) +_0 = const () + +goto + + + +bb2__0_4->bb3__0_4 + + +return + + + +bb3__0_4->bb4__0_4 + + + + + +bb0__0_3 + + +0 + +StorageLive(_1) +StorageLive(_2) +_2 = const true + +switchInt(move _2) + + + +bb1__0_3 + + +1 + +_1 = const 7_i32 + +goto + + + +bb0__0_3->bb1__0_3 + + +otherwise + + + +bb2__0_3 + + +2 + +StorageLive(_3) +_3 = const true + +switchInt(move _3) + + + +bb0__0_3->bb2__0_3 + + +false + + + +bb6__0_3 + + +6 + +StorageDead(_2) +_1 = Add(_1, const 1_i32) +_0 = _1 +StorageDead(_1) + +return + + + +bb1__0_3->bb6__0_3 + + + + + +bb3__0_3 + + +3 + +_1 = const 8_i32 + +goto + + + +bb2__0_3->bb3__0_3 + + +otherwise + + + +bb4__0_3 + + +4 + +_1 = const 9_i32 + +goto + + + +bb2__0_3->bb4__0_3 + + +false + + + +bb5__0_3 + + +5 + +StorageDead(_3) + +goto + + + +bb3__0_3->bb5__0_3 + + + + + +bb4__0_3->bb5__0_3 + + + + + +bb5__0_3->bb6__0_3 + + + + +