diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-08-01 00:10:46 +0300 |
|---|---|---|
| committer | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-08-01 00:12:31 +0300 |
| commit | 5b99523de9cb362a2328829959618aef0becb38e (patch) | |
| tree | fd99ac13f43a3005d5a7dd5dc2b7ea47ff6933de /src | |
| parent | ca3105cfdf4221d6855f16f2f841d359248c349a (diff) | |
| download | rust-5b99523de9cb362a2328829959618aef0becb38e.tar.gz rust-5b99523de9cb362a2328829959618aef0becb38e.zip | |
rustc_mir::transform::simplify - remove nops first
Removing nops can allow more basic blocks to be merged, but merging basic blocks can't allow for more nops to be removed, so we should remove nops first. This doesn't matter *that* much, because normally we run SimplifyCfg several times, but there's no reason not to do it.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/transform/simplify.rs | 4 | ||||
| -rw-r--r-- | src/test/mir-opt/basic_assignment.rs | 22 |
2 files changed, 10 insertions, 16 deletions
diff --git a/src/librustc_mir/transform/simplify.rs b/src/librustc_mir/transform/simplify.rs index d5b79c0d1c3..a1d56ccd874 100644 --- a/src/librustc_mir/transform/simplify.rs +++ b/src/librustc_mir/transform/simplify.rs @@ -105,6 +105,8 @@ impl<'a, 'tcx: 'a> CfgSimplifier<'a, 'tcx> { } pub fn simplify(mut self) { + self.strip_nops(); + loop { let mut changed = false; @@ -141,8 +143,6 @@ impl<'a, 'tcx: 'a> CfgSimplifier<'a, 'tcx> { if !changed { break } } - - self.strip_nops() } // Collapse a goto chain starting from `start` diff --git a/src/test/mir-opt/basic_assignment.rs b/src/test/mir-opt/basic_assignment.rs index 6afc344ced8..d3bf7f68785 100644 --- a/src/test/mir-opt/basic_assignment.rs +++ b/src/test/mir-opt/basic_assignment.rs @@ -50,10 +50,10 @@ fn main() { // StorageLive(_5); // StorageLive(_6); // _6 = _4; -// replace(_5 <- _6) -> [return: bb1, unwind: bb7]; +// replace(_5 <- _6) -> [return: bb1, unwind: bb5]; // } // bb1: { -// drop(_6) -> [return: bb8, unwind: bb5]; +// drop(_6) -> [return: bb6, unwind: bb4]; // } // bb2: { // resume; @@ -62,27 +62,21 @@ fn main() { // drop(_4) -> bb2; // } // bb4: { -// goto -> bb3; +// drop(_5) -> bb3; // } // bb5: { -// drop(_5) -> bb4; +// drop(_6) -> bb4; // } // bb6: { -// goto -> bb5; -// } -// bb7: { -// drop(_6) -> bb6; -// } -// bb8: { // StorageDead(_6); // _0 = (); -// drop(_5) -> [return: bb9, unwind: bb3]; +// drop(_5) -> [return: bb7, unwind: bb3]; // } -// bb9: { +// bb7: { // StorageDead(_5); -// drop(_4) -> bb10; +// drop(_4) -> bb8; // } -// bb10: { +// bb8: { // StorageDead(_4); // StorageDead(_2); // StorageDead(_1); |
