about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2022-05-12 12:46:28 +0200
committerCamille GILLOT <gillot.camille@gmail.com>2022-05-12 12:46:28 +0200
commitbd41874eeadba20870f49e837babc56e67292b10 (patch)
tree76e27836f4b4ae4234aaf86307cab5b3f918f273 /src
parent0fa27efad79eb6ba496c0ea8542e225d60469dcb (diff)
downloadrust-bd41874eeadba20870f49e837babc56e67292b10.tar.gz
rust-bd41874eeadba20870f49e837babc56e67292b10.zip
Add mir-opt test.
Diffstat (limited to 'src')
-rw-r--r--src/test/mir-opt/inline/dyn-trait.rs35
-rw-r--r--src/test/mir-opt/inline/dyn_trait.get_query.Inline.diff62
-rw-r--r--src/test/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff23
-rw-r--r--src/test/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff37
4 files changed, 157 insertions, 0 deletions
diff --git a/src/test/mir-opt/inline/dyn-trait.rs b/src/test/mir-opt/inline/dyn-trait.rs
new file mode 100644
index 00000000000..6a46e1e07b1
--- /dev/null
+++ b/src/test/mir-opt/inline/dyn-trait.rs
@@ -0,0 +1,35 @@
+#![crate_type = "lib"]
+
+use std::fmt::Debug;
+
+pub trait Cache {
+    type V: Debug;
+
+    fn store_nocache(&self);
+}
+
+pub trait Query {
+    type V;
+    type C: Cache<V = Self::V>;
+
+    fn cache<T>(s: &T) -> &Self::C;
+}
+
+// EMIT_MIR dyn_trait.mk_cycle.Inline.diff
+#[inline(always)]
+pub fn mk_cycle<V: Debug>(c: &dyn Cache<V = V>) {
+    c.store_nocache()
+}
+
+// EMIT_MIR dyn_trait.try_execute_query.Inline.diff
+#[inline(always)]
+pub fn try_execute_query<C: Cache>(c: &C) {
+    mk_cycle(c)
+}
+
+// EMIT_MIR dyn_trait.get_query.Inline.diff
+#[inline(always)]
+pub fn get_query<Q: Query, T>(t: &T) {
+    let c = Q::cache(t);
+    try_execute_query(c)
+}
diff --git a/src/test/mir-opt/inline/dyn_trait.get_query.Inline.diff b/src/test/mir-opt/inline/dyn_trait.get_query.Inline.diff
new file mode 100644
index 00000000000..953d7b85c5b
--- /dev/null
+++ b/src/test/mir-opt/inline/dyn_trait.get_query.Inline.diff
@@ -0,0 +1,62 @@
+- // MIR for `get_query` before Inline
++ // MIR for `get_query` after Inline
+  
+  fn get_query(_1: &T) -> () {
+      debug t => _1;                       // in scope 0 at $DIR/dyn-trait.rs:32:31: 32:32
+      let mut _0: ();                      // return place in scope 0 at $DIR/dyn-trait.rs:32:38: 32:38
+      let _2: &<Q as Query>::C;            // in scope 0 at $DIR/dyn-trait.rs:33:9: 33:10
+      let mut _3: &T;                      // in scope 0 at $DIR/dyn-trait.rs:33:22: 33:23
+      let mut _4: &<Q as Query>::C;        // in scope 0 at $DIR/dyn-trait.rs:34:23: 34:24
+      scope 1 {
+          debug c => _2;                   // in scope 1 at $DIR/dyn-trait.rs:33:9: 33:10
++         scope 2 (inlined try_execute_query::<<Q as Query>::C>) { // at $DIR/dyn-trait.rs:34:5: 34:25
++             debug c => _4;               // in scope 2 at $DIR/dyn-trait.rs:26:36: 26:37
++             let mut _5: &dyn Cache<V = <Q as Query>::V>; // in scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++             let mut _6: &<Q as Query>::C; // in scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++             scope 3 (inlined mk_cycle::<<Q as Query>::V>) { // at $DIR/dyn-trait.rs:27:5: 27:16
++                 debug c => _5;           // in scope 3 at $DIR/dyn-trait.rs:20:27: 20:28
++                 let mut _7: &dyn Cache<V = <Q as Query>::V>; // in scope 3 at $DIR/dyn-trait.rs:21:5: 21:22
++             }
++         }
+      }
+  
+      bb0: {
+          StorageLive(_2);                 // scope 0 at $DIR/dyn-trait.rs:33:9: 33:10
+          StorageLive(_3);                 // scope 0 at $DIR/dyn-trait.rs:33:22: 33:23
+          _3 = &(*_1);                     // scope 0 at $DIR/dyn-trait.rs:33:22: 33:23
+          _2 = <Q as Query>::cache::<T>(move _3) -> bb1; // scope 0 at $DIR/dyn-trait.rs:33:13: 33:24
+                                           // mir::Constant
+                                           // + span: $DIR/dyn-trait.rs:33:13: 33:21
+                                           // + user_ty: UserType(0)
+                                           // + literal: Const { ty: for<'r> fn(&'r T) -> &'r <Q as Query>::C {<Q as Query>::cache::<T>}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          StorageDead(_3);                 // scope 0 at $DIR/dyn-trait.rs:33:23: 33:24
+          StorageLive(_4);                 // scope 1 at $DIR/dyn-trait.rs:34:23: 34:24
+          _4 = &(*_2);                     // scope 1 at $DIR/dyn-trait.rs:34:23: 34:24
+-         _0 = try_execute_query::<<Q as Query>::C>(move _4) -> bb2; // scope 1 at $DIR/dyn-trait.rs:34:5: 34:25
++         StorageLive(_5);                 // scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++         StorageLive(_6);                 // scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++         _6 = _4;                         // scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++         _5 = move _6 as &dyn Cache<V = <Q as Query>::V> (Pointer(Unsize)); // scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++         StorageDead(_6);                 // scope 2 at $DIR/dyn-trait.rs:27:14: 27:15
++         StorageLive(_7);                 // scope 3 at $DIR/dyn-trait.rs:21:5: 21:22
++         _7 = _5;                         // scope 3 at $DIR/dyn-trait.rs:21:5: 21:22
++         _0 = <dyn Cache<V = <Q as Query>::V> as Cache>::store_nocache(move _7) -> bb2; // scope 3 at $DIR/dyn-trait.rs:21:5: 21:22
+                                           // mir::Constant
+-                                          // + span: $DIR/dyn-trait.rs:34:5: 34:22
+-                                          // + literal: Const { ty: for<'r> fn(&'r <Q as Query>::C) {try_execute_query::<<Q as Query>::C>}, val: Value(Scalar(<ZST>)) }
++                                          // + span: $DIR/dyn-trait.rs:21:7: 21:20
++                                          // + literal: Const { ty: for<'r> fn(&'r dyn Cache<V = <Q as Query>::V>) {<dyn Cache<V = <Q as Query>::V> as Cache>::store_nocache}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb2: {
++         StorageDead(_7);                 // scope 3 at $DIR/dyn-trait.rs:21:21: 21:22
++         StorageDead(_5);                 // scope 2 at $DIR/dyn-trait.rs:27:15: 27:16
+          StorageDead(_4);                 // scope 1 at $DIR/dyn-trait.rs:34:24: 34:25
+          StorageDead(_2);                 // scope 0 at $DIR/dyn-trait.rs:35:1: 35:2
+          return;                          // scope 0 at $DIR/dyn-trait.rs:35:2: 35:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff b/src/test/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff
new file mode 100644
index 00000000000..27309328052
--- /dev/null
+++ b/src/test/mir-opt/inline/dyn_trait.mk_cycle.Inline.diff
@@ -0,0 +1,23 @@
+- // MIR for `mk_cycle` before Inline
++ // MIR for `mk_cycle` after Inline
+  
+  fn mk_cycle(_1: &dyn Cache<V = V>) -> () {
+      debug c => _1;                       // in scope 0 at $DIR/dyn-trait.rs:20:27: 20:28
+      let mut _0: ();                      // return place in scope 0 at $DIR/dyn-trait.rs:20:49: 20:49
+      let mut _2: &dyn Cache<V = V>;       // in scope 0 at $DIR/dyn-trait.rs:21:5: 21:22
+  
+      bb0: {
+          StorageLive(_2);                 // scope 0 at $DIR/dyn-trait.rs:21:5: 21:22
+          _2 = &(*_1);                     // scope 0 at $DIR/dyn-trait.rs:21:5: 21:22
+          _0 = <dyn Cache<V = V> as Cache>::store_nocache(move _2) -> bb1; // scope 0 at $DIR/dyn-trait.rs:21:5: 21:22
+                                           // mir::Constant
+                                           // + span: $DIR/dyn-trait.rs:21:7: 21:20
+                                           // + literal: Const { ty: for<'r> fn(&'r dyn Cache<V = V>) {<dyn Cache<V = V> as Cache>::store_nocache}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          StorageDead(_2);                 // scope 0 at $DIR/dyn-trait.rs:21:21: 21:22
+          return;                          // scope 0 at $DIR/dyn-trait.rs:22:2: 22:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff b/src/test/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff
new file mode 100644
index 00000000000..93bba58825d
--- /dev/null
+++ b/src/test/mir-opt/inline/dyn_trait.try_execute_query.Inline.diff
@@ -0,0 +1,37 @@
+- // MIR for `try_execute_query` before Inline
++ // MIR for `try_execute_query` after Inline
+  
+  fn try_execute_query(_1: &C) -> () {
+      debug c => _1;                       // in scope 0 at $DIR/dyn-trait.rs:26:36: 26:37
+      let mut _0: ();                      // return place in scope 0 at $DIR/dyn-trait.rs:26:43: 26:43
+      let mut _2: &dyn Cache<V = <C as Cache>::V>; // in scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
+      let mut _3: &C;                      // in scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
++     scope 1 (inlined mk_cycle::<<C as Cache>::V>) { // at $DIR/dyn-trait.rs:27:5: 27:16
++         debug c => _2;                   // in scope 1 at $DIR/dyn-trait.rs:20:27: 20:28
++         let mut _4: &dyn Cache<V = <C as Cache>::V>; // in scope 1 at $DIR/dyn-trait.rs:21:5: 21:22
++     }
+  
+      bb0: {
+          StorageLive(_2);                 // scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
+          StorageLive(_3);                 // scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
+          _3 = &(*_1);                     // scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
+          _2 = move _3 as &dyn Cache<V = <C as Cache>::V> (Pointer(Unsize)); // scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
+          StorageDead(_3);                 // scope 0 at $DIR/dyn-trait.rs:27:14: 27:15
+-         _0 = mk_cycle::<<C as Cache>::V>(move _2) -> bb1; // scope 0 at $DIR/dyn-trait.rs:27:5: 27:16
++         StorageLive(_4);                 // scope 1 at $DIR/dyn-trait.rs:21:5: 21:22
++         _4 = _2;                         // scope 1 at $DIR/dyn-trait.rs:21:5: 21:22
++         _0 = <dyn Cache<V = <C as Cache>::V> as Cache>::store_nocache(move _4) -> bb1; // scope 1 at $DIR/dyn-trait.rs:21:5: 21:22
+                                           // mir::Constant
+-                                          // + span: $DIR/dyn-trait.rs:27:5: 27:13
+-                                          // + literal: Const { ty: for<'r> fn(&'r (dyn Cache<V = <C as Cache>::V> + 'r)) {mk_cycle::<<C as Cache>::V>}, val: Value(Scalar(<ZST>)) }
++                                          // + span: $DIR/dyn-trait.rs:21:7: 21:20
++                                          // + literal: Const { ty: for<'r> fn(&'r dyn Cache<V = <C as Cache>::V>) {<dyn Cache<V = <C as Cache>::V> as Cache>::store_nocache}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
++         StorageDead(_4);                 // scope 1 at $DIR/dyn-trait.rs:21:21: 21:22
+          StorageDead(_2);                 // scope 0 at $DIR/dyn-trait.rs:27:15: 27:16
+          return;                          // scope 0 at $DIR/dyn-trait.rs:28:2: 28:2
+      }
+  }
+