about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAriel Ben-Yehuda <ariel.byd@gmail.com>2017-08-01 00:10:46 +0300
committerAriel Ben-Yehuda <ariel.byd@gmail.com>2017-08-01 00:12:31 +0300
commit5b99523de9cb362a2328829959618aef0becb38e (patch)
treefd99ac13f43a3005d5a7dd5dc2b7ea47ff6933de /src
parentca3105cfdf4221d6855f16f2f841d359248c349a (diff)
downloadrust-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.rs4
-rw-r--r--src/test/mir-opt/basic_assignment.rs22
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);