05a665f21a
They're semantically the same, so this means the backends don't need to handle the intrinsic and means fewer MIR basic blocks in pointer arithmetic code.
31 lines
2.0 KiB
Diff
31 lines
2.0 KiB
Diff
- // MIR for `ptr_offset` before LowerIntrinsics
|
|
+ // MIR for `ptr_offset` after LowerIntrinsics
|
|
|
|
fn ptr_offset(_1: *const i32, _2: isize) -> *const i32 {
|
|
debug p => _1; // in scope 0 at $DIR/lower_intrinsics.rs:+0:26: +0:27
|
|
debug d => _2; // in scope 0 at $DIR/lower_intrinsics.rs:+0:41: +0:42
|
|
let mut _0: *const i32; // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:54: +0:64
|
|
let mut _3: *const i32; // in scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
|
|
let mut _4: isize; // in scope 0 at $DIR/lower_intrinsics.rs:+1:33: +1:34
|
|
|
|
bb0: {
|
|
StorageLive(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
|
|
_3 = _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
|
|
StorageLive(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:33: +1:34
|
|
_4 = _2; // scope 0 at $DIR/lower_intrinsics.rs:+1:33: +1:34
|
|
- _0 = offset::<i32>(move _3, move _4) -> [return: bb1, unwind unreachable]; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:35
|
|
- // mir::Constant
|
|
- // + span: $DIR/lower_intrinsics.rs:140:5: 140:29
|
|
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(*const i32, isize) -> *const i32 {offset::<i32>}, val: Value(<ZST>) }
|
|
+ _0 = Offset(move _3, move _4); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:35
|
|
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:35
|
|
}
|
|
|
|
bb1: {
|
|
StorageDead(_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:34: +1:35
|
|
StorageDead(_3); // scope 0 at $DIR/lower_intrinsics.rs:+1:34: +1:35
|
|
return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
|
|
}
|
|
}
|
|
|