about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEduard-Mihai Burtescu <edy.burt@gmail.com>2018-02-14 16:10:25 +0200
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2018-02-20 02:50:26 +0200
commitd773d95880b0866ce2bee4ab68ee6fa363235f84 (patch)
tree6146b8ad19841f59ee3691bf0b3e92a26b4e1c20
parent6195ad8654d713678460aca29b6f986655b988f1 (diff)
downloadrust-d773d95880b0866ce2bee4ab68ee6fa363235f84.tar.gz
rust-d773d95880b0866ce2bee4ab68ee6fa363235f84.zip
rustc_mir: don't run the deaggregator on arrays for now.
-rw-r--r--src/librustc_mir/transform/deaggregator.rs6
-rw-r--r--src/test/mir-opt/deaggregator_test_multiple.rs3
2 files changed, 6 insertions, 3 deletions
diff --git a/src/librustc_mir/transform/deaggregator.rs b/src/librustc_mir/transform/deaggregator.rs
index 44c35960aba..8ffcc4025f1 100644
--- a/src/librustc_mir/transform/deaggregator.rs
+++ b/src/librustc_mir/transform/deaggregator.rs
@@ -41,7 +41,11 @@ impl MirPass for Deaggregator {
 
         let can_deaggregate = |statement: &Statement| {
             if let StatementKind::Assign(_, ref rhs) = statement.kind {
-                if let Rvalue::Aggregate(..) = *rhs {
+                if let Rvalue::Aggregate(ref kind, _) = *rhs {
+                    // FIXME(#48193) Deaggregate arrays when it's cheaper to do so.
+                    if let AggregateKind::Array(_) = **kind {
+                        return false;
+                    }
                     return true;
                 }
             }
diff --git a/src/test/mir-opt/deaggregator_test_multiple.rs b/src/test/mir-opt/deaggregator_test_multiple.rs
index 5127ed58853..3a9a458fd46 100644
--- a/src/test/mir-opt/deaggregator_test_multiple.rs
+++ b/src/test/mir-opt/deaggregator_test_multiple.rs
@@ -52,8 +52,7 @@ fn main() {
 //     ((_4 as A).0: i32) = move _5;
 //     discriminant(_4) = 0;
 //     ...
-//     _0[0 of 1] = move _2;
-//     _0[1 of 2] = move _4;
+//     _0 = [move _2, move _4];
 //     ...
 //     return;
 // }