From 84c024d92f34206d0f02ab814c6e5bd3abb876c3 Mon Sep 17 00:00:00 2001 From: Markus Westerlind Date: Sun, 16 Feb 2020 23:23:44 +0100 Subject: [PATCH] Clarify mir block merging --- src/librustc_mir/transform/simplify.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/transform/simplify.rs b/src/librustc_mir/transform/simplify.rs index d8de9f2180d..1534b9bdcea 100644 --- a/src/librustc_mir/transform/simplify.rs +++ b/src/librustc_mir/transform/simplify.rs @@ -95,6 +95,10 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> { let mut start = START_BLOCK; + // Vec of the blocks that should be merged. We store the indices here, instead of the + // statements itself to avoid moving the (relatively) large statements twice. + // We do not push the statements directly into the target block (`bb`) as that is slower + // due to additional reallocations let mut merged_blocks = Vec::new(); loop { let mut changed = false; @@ -116,6 +120,7 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> { } let mut inner_changed = true; + merged_blocks.clear(); while inner_changed { inner_changed = false; inner_changed |= self.simplify_branch(&mut terminator); @@ -134,7 +139,6 @@ impl<'a, 'tcx> CfgSimplifier<'a, 'tcx> { } self.basic_blocks[bb].statements = statements; } - merged_blocks.clear(); self.basic_blocks[bb].terminator = Some(terminator);