about summary refs log tree commit diff
diff options
context:
space:
mode:
authorScott McMurray <scottmcm@users.noreply.github.com>2024-04-14 11:26:45 -0700
committerScott McMurray <scottmcm@users.noreply.github.com>2024-04-21 11:08:36 -0700
commit70df9d9a1396f95eeef3fb765af09d47d14b3a8a (patch)
tree021d4f04dfbda46ae9431a034a8e30ef4d2cce9b
parentb76faff1b281fdf199e5abe8ff0c8d6d2e2e2a85 (diff)
downloadrust-70df9d9a1396f95eeef3fb765af09d47d14b3a8a.tar.gz
rust-70df9d9a1396f95eeef3fb765af09d47d14b3a8a.zip
Add a mir-opt test for `byte_add` on pointers
-rw-r--r--tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir62
-rw-r--r--tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir62
-rw-r--r--tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir54
-rw-r--r--tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir54
-rw-r--r--tests/mir-opt/pre-codegen/ptr_offset.rs16
5 files changed, 248 insertions, 0 deletions
diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir
new file mode 100644
index 00000000000..81474306eec
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,62 @@
+// MIR for `demo_byte_add_fat` after PreCodegen
+
+fn demo_byte_add_fat(_1: *const [u32], _2: usize) -> *const [u32] {
+    debug p => _1;
+    debug n => _2;
+    let mut _0: *const [u32];
+    scope 1 (inlined std::ptr::const_ptr::<impl *const [u32]>::byte_add) {
+        debug self => _1;
+        debug count => _2;
+        let mut _3: *const u8;
+        let mut _4: *const u8;
+        scope 2 (inlined std::ptr::const_ptr::<impl *const [u32]>::cast::<u8>) {
+            debug self => _1;
+        }
+        scope 3 (inlined std::ptr::const_ptr::<impl *const u8>::add) {
+            debug self => _3;
+            debug count => _2;
+        }
+        scope 4 (inlined std::ptr::const_ptr::<impl *const u8>::with_metadata_of::<[u32]>) {
+            debug self => _4;
+            debug meta => _1;
+            let mut _5: *const ();
+            let mut _7: usize;
+            scope 5 (inlined std::ptr::metadata::<[u32]>) {
+                debug ptr => _1;
+                let mut _6: std::ptr::metadata::PtrRepr<[u32]>;
+            }
+            scope 6 (inlined std::ptr::from_raw_parts::<[u32]>) {
+                debug data_pointer => _5;
+                debug metadata => _7;
+                let mut _8: std::ptr::metadata::PtrComponents<[u32]>;
+                let mut _9: std::ptr::metadata::PtrRepr<[u32]>;
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_4);
+        StorageLive(_3);
+        _3 = _1 as *const u8 (PtrToPtr);
+        _4 = Offset(_3, _2);
+        StorageDead(_3);
+        StorageLive(_5);
+        _5 = _4 as *const () (PtrToPtr);
+        StorageLive(_7);
+        StorageLive(_6);
+        _6 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: _1 };
+        _7 = ((_6.2: std::ptr::metadata::PtrComponents<[u32]>).1: usize);
+        StorageDead(_6);
+        StorageLive(_9);
+        StorageLive(_8);
+        _8 = std::ptr::metadata::PtrComponents::<[u32]> { data_pointer: _5, metadata: _7 };
+        _9 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _8 };
+        StorageDead(_8);
+        _0 = (_9.0: *const [u32]);
+        StorageDead(_9);
+        StorageDead(_7);
+        StorageDead(_5);
+        StorageDead(_4);
+        return;
+    }
+}
diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 00000000000..81474306eec
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_fat.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,62 @@
+// MIR for `demo_byte_add_fat` after PreCodegen
+
+fn demo_byte_add_fat(_1: *const [u32], _2: usize) -> *const [u32] {
+    debug p => _1;
+    debug n => _2;
+    let mut _0: *const [u32];
+    scope 1 (inlined std::ptr::const_ptr::<impl *const [u32]>::byte_add) {
+        debug self => _1;
+        debug count => _2;
+        let mut _3: *const u8;
+        let mut _4: *const u8;
+        scope 2 (inlined std::ptr::const_ptr::<impl *const [u32]>::cast::<u8>) {
+            debug self => _1;
+        }
+        scope 3 (inlined std::ptr::const_ptr::<impl *const u8>::add) {
+            debug self => _3;
+            debug count => _2;
+        }
+        scope 4 (inlined std::ptr::const_ptr::<impl *const u8>::with_metadata_of::<[u32]>) {
+            debug self => _4;
+            debug meta => _1;
+            let mut _5: *const ();
+            let mut _7: usize;
+            scope 5 (inlined std::ptr::metadata::<[u32]>) {
+                debug ptr => _1;
+                let mut _6: std::ptr::metadata::PtrRepr<[u32]>;
+            }
+            scope 6 (inlined std::ptr::from_raw_parts::<[u32]>) {
+                debug data_pointer => _5;
+                debug metadata => _7;
+                let mut _8: std::ptr::metadata::PtrComponents<[u32]>;
+                let mut _9: std::ptr::metadata::PtrRepr<[u32]>;
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_4);
+        StorageLive(_3);
+        _3 = _1 as *const u8 (PtrToPtr);
+        _4 = Offset(_3, _2);
+        StorageDead(_3);
+        StorageLive(_5);
+        _5 = _4 as *const () (PtrToPtr);
+        StorageLive(_7);
+        StorageLive(_6);
+        _6 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: _1 };
+        _7 = ((_6.2: std::ptr::metadata::PtrComponents<[u32]>).1: usize);
+        StorageDead(_6);
+        StorageLive(_9);
+        StorageLive(_8);
+        _8 = std::ptr::metadata::PtrComponents::<[u32]> { data_pointer: _5, metadata: _7 };
+        _9 = std::ptr::metadata::PtrRepr::<[u32]> { const_ptr: move _8 };
+        StorageDead(_8);
+        _0 = (_9.0: *const [u32]);
+        StorageDead(_9);
+        StorageDead(_7);
+        StorageDead(_5);
+        StorageDead(_4);
+        return;
+    }
+}
diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir
new file mode 100644
index 00000000000..d86f2d1106a
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-abort.mir
@@ -0,0 +1,54 @@
+// MIR for `demo_byte_add_thin` after PreCodegen
+
+fn demo_byte_add_thin(_1: *const u32, _2: usize) -> *const u32 {
+    debug p => _1;
+    debug n => _2;
+    let mut _0: *const u32;
+    scope 1 (inlined std::ptr::const_ptr::<impl *const u32>::byte_add) {
+        debug self => _1;
+        debug count => _2;
+        let mut _3: *const u8;
+        let mut _4: *const u8;
+        scope 2 (inlined std::ptr::const_ptr::<impl *const u32>::cast::<u8>) {
+            debug self => _1;
+        }
+        scope 3 (inlined std::ptr::const_ptr::<impl *const u8>::add) {
+            debug self => _3;
+            debug count => _2;
+        }
+        scope 4 (inlined std::ptr::const_ptr::<impl *const u8>::with_metadata_of::<u32>) {
+            debug self => _4;
+            debug meta => _1;
+            let mut _5: *const ();
+            scope 5 (inlined std::ptr::metadata::<u32>) {
+                debug ptr => _1;
+            }
+            scope 6 (inlined std::ptr::from_raw_parts::<u32>) {
+                debug data_pointer => _5;
+                debug metadata => const ();
+                let mut _6: std::ptr::metadata::PtrComponents<u32>;
+                let mut _7: std::ptr::metadata::PtrRepr<u32>;
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_4);
+        StorageLive(_3);
+        _3 = _1 as *const u8 (PtrToPtr);
+        _4 = Offset(_3, _2);
+        StorageDead(_3);
+        StorageLive(_5);
+        _5 = _4 as *const () (PtrToPtr);
+        StorageLive(_7);
+        StorageLive(_6);
+        _6 = std::ptr::metadata::PtrComponents::<u32> { data_pointer: _5, metadata: const () };
+        _7 = std::ptr::metadata::PtrRepr::<u32> { const_ptr: move _6 };
+        StorageDead(_6);
+        _0 = (_7.0: *const u32);
+        StorageDead(_7);
+        StorageDead(_5);
+        StorageDead(_4);
+        return;
+    }
+}
diff --git a/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir
new file mode 100644
index 00000000000..d86f2d1106a
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/ptr_offset.demo_byte_add_thin.PreCodegen.after.panic-unwind.mir
@@ -0,0 +1,54 @@
+// MIR for `demo_byte_add_thin` after PreCodegen
+
+fn demo_byte_add_thin(_1: *const u32, _2: usize) -> *const u32 {
+    debug p => _1;
+    debug n => _2;
+    let mut _0: *const u32;
+    scope 1 (inlined std::ptr::const_ptr::<impl *const u32>::byte_add) {
+        debug self => _1;
+        debug count => _2;
+        let mut _3: *const u8;
+        let mut _4: *const u8;
+        scope 2 (inlined std::ptr::const_ptr::<impl *const u32>::cast::<u8>) {
+            debug self => _1;
+        }
+        scope 3 (inlined std::ptr::const_ptr::<impl *const u8>::add) {
+            debug self => _3;
+            debug count => _2;
+        }
+        scope 4 (inlined std::ptr::const_ptr::<impl *const u8>::with_metadata_of::<u32>) {
+            debug self => _4;
+            debug meta => _1;
+            let mut _5: *const ();
+            scope 5 (inlined std::ptr::metadata::<u32>) {
+                debug ptr => _1;
+            }
+            scope 6 (inlined std::ptr::from_raw_parts::<u32>) {
+                debug data_pointer => _5;
+                debug metadata => const ();
+                let mut _6: std::ptr::metadata::PtrComponents<u32>;
+                let mut _7: std::ptr::metadata::PtrRepr<u32>;
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_4);
+        StorageLive(_3);
+        _3 = _1 as *const u8 (PtrToPtr);
+        _4 = Offset(_3, _2);
+        StorageDead(_3);
+        StorageLive(_5);
+        _5 = _4 as *const () (PtrToPtr);
+        StorageLive(_7);
+        StorageLive(_6);
+        _6 = std::ptr::metadata::PtrComponents::<u32> { data_pointer: _5, metadata: const () };
+        _7 = std::ptr::metadata::PtrRepr::<u32> { const_ptr: move _6 };
+        StorageDead(_6);
+        _0 = (_7.0: *const u32);
+        StorageDead(_7);
+        StorageDead(_5);
+        StorageDead(_4);
+        return;
+    }
+}
diff --git a/tests/mir-opt/pre-codegen/ptr_offset.rs b/tests/mir-opt/pre-codegen/ptr_offset.rs
new file mode 100644
index 00000000000..88ee00296a0
--- /dev/null
+++ b/tests/mir-opt/pre-codegen/ptr_offset.rs
@@ -0,0 +1,16 @@
+// skip-filecheck
+//@ compile-flags: -O -C debuginfo=0 -Zmir-opt-level=2 -Zinline-mir
+//@ ignore-debug: precondition checks are under cfg(debug_assertions)
+// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
+
+#![crate_type = "lib"]
+
+// EMIT_MIR ptr_offset.demo_byte_add_thin.PreCodegen.after.mir
+pub unsafe fn demo_byte_add_thin(p: *const u32, n: usize) -> *const u32 {
+    p.byte_add(n)
+}
+
+// EMIT_MIR ptr_offset.demo_byte_add_fat.PreCodegen.after.mir
+pub unsafe fn demo_byte_add_fat(p: *const [u32], n: usize) -> *const [u32] {
+    p.byte_add(n)
+}