mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-07 20:43:03 +00:00
Add partial propagation test.
This commit is contained in:
parent
10ec94930b
commit
83173c68f5
55
tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff
Normal file
55
tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff
Normal file
@ -0,0 +1,55 @@
|
||||
- // MIR for `foo` before ConstProp
|
||||
+ // MIR for `foo` after ConstProp
|
||||
|
||||
fn foo(_1: u8) -> () {
|
||||
debug x => _1; // in scope 0 at $DIR/aggregate.rs:+0:8: +0:9
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:15: +0:15
|
||||
let _2: i32; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let mut _3: i32; // in scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
let mut _4: (i32, u8); // in scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
let mut _7: i32; // in scope 0 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
let mut _8: (u8, i32); // in scope 0 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
let mut _9: u8; // in scope 0 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
scope 1 {
|
||||
debug first => _2; // in scope 1 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let _6: i32; // in scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
scope 2 {
|
||||
debug second => _6; // in scope 2 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
StorageLive(_4); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageLive(_5); // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_5 = _1; // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_4 = (const 0_i32, move _5); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageDead(_5); // scope 0 at $DIR/aggregate.rs:+2:22: +2:23
|
||||
- _3 = (_4.0: i32); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
- _2 = Add(move _3, const 1_i32); // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
|
||||
+ _3 = const 0_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
+ _2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+2:28: +2:29
|
||||
StorageDead(_4); // scope 0 at $DIR/aggregate.rs:+2:29: +2:30
|
||||
StorageLive(_6); // scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
StorageLive(_7); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
StorageLive(_8); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageLive(_9); // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_9 = _1; // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_8 = (move _9, const 1_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageDead(_9); // scope 1 at $DIR/aggregate.rs:+3:23: +3:24
|
||||
- _7 = (_8.1: i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
- _6 = Add(move _7, const 2_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
|
||||
+ _7 = const 1_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
+ _6 = const 3_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
|
||||
StorageDead(_7); // scope 1 at $DIR/aggregate.rs:+3:29: +3:30
|
||||
StorageDead(_8); // scope 1 at $DIR/aggregate.rs:+3:30: +3:31
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:15: +4:2
|
||||
StorageDead(_6); // scope 1 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
||||
|
49
tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir
Normal file
49
tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir
Normal file
@ -0,0 +1,49 @@
|
||||
// MIR for `foo` after PreCodegen
|
||||
|
||||
fn foo(_1: u8) -> () {
|
||||
debug x => _1; // in scope 0 at $DIR/aggregate.rs:+0:8: +0:9
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:15: +0:15
|
||||
let _2: i32; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let mut _3: i32; // in scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
let mut _4: (i32, u8); // in scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
let mut _7: i32; // in scope 0 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
let mut _8: (u8, i32); // in scope 0 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
let mut _9: u8; // in scope 0 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
scope 1 {
|
||||
debug first => _2; // in scope 1 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let _6: i32; // in scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
scope 2 {
|
||||
debug second => _6; // in scope 2 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
StorageLive(_4); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageLive(_5); // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_5 = _1; // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_4 = (const 0_i32, move _5); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageDead(_5); // scope 0 at $DIR/aggregate.rs:+2:22: +2:23
|
||||
_3 = const 0_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
_2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+2:28: +2:29
|
||||
StorageDead(_4); // scope 0 at $DIR/aggregate.rs:+2:29: +2:30
|
||||
StorageLive(_6); // scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
StorageLive(_7); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
StorageLive(_8); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageLive(_9); // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_9 = _1; // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_8 = (move _9, const 1_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageDead(_9); // scope 1 at $DIR/aggregate.rs:+3:23: +3:24
|
||||
_7 = const 1_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
_6 = const 3_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
|
||||
StorageDead(_7); // scope 1 at $DIR/aggregate.rs:+3:29: +3:30
|
||||
StorageDead(_8); // scope 1 at $DIR/aggregate.rs:+3:30: +3:31
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:15: +4:2
|
||||
StorageDead(_6); // scope 1 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
@ -3,9 +3,11 @@
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:11: +0:11
|
||||
let _1: i32; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: i32; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, i32, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _1: u8; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: u8; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, u8, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _4: (); // in scope 0 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
}
|
||||
@ -14,16 +16,29 @@
|
||||
StorageLive(_1); // scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
_3 = (const 0_i32, const 1_i32, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
- _2 = (_3.1: i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
- _1 = Add(move _2, const 0_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
+ _2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
+ _1 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
_3 = (const 0_i32, const 1_u8, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
- _2 = (_3.1: u8); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
- _1 = Add(move _2, const 0_u8); // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
+ _2 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
+ _1 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+1:27: +1:28
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+1:28: +1:29
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +2:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+2:2: +2:2
|
||||
StorageLive(_4); // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
StorageLive(_5); // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
- _5 = _1; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
+ _5 = const 1_u8; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
_4 = foo(move _5) -> bb1; // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
// mir::Constant
|
||||
// + span: $DIR/aggregate.rs:8:5: 8:8
|
||||
// + literal: Const { ty: fn(u8) {foo}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_5); // scope 1 at $DIR/aggregate.rs:+2:10: +2:11
|
||||
StorageDead(_4); // scope 1 at $DIR/aggregate.rs:+2:11: +2:12
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +3:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+3:1: +3:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+3:2: +3:2
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,9 +2,11 @@
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:11: +0:11
|
||||
let _1: i32; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: i32; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, i32, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _1: u8; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: u8; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, u8, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _4: (); // in scope 0 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
}
|
||||
@ -13,13 +15,25 @@ fn main() -> () {
|
||||
StorageLive(_1); // scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
_3 = (const 0_i32, const 1_i32, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
_2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
_1 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
_3 = (const 0_i32, const 1_u8, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
_2 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
_1 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+1:27: +1:28
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+1:28: +1:29
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +2:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+2:2: +2:2
|
||||
StorageLive(_4); // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
StorageLive(_5); // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
_5 = const 1_u8; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
_4 = foo(move _5) -> bb1; // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
// mir::Constant
|
||||
// + span: $DIR/aggregate.rs:8:5: 8:8
|
||||
// + literal: Const { ty: fn(u8) {foo}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_5); // scope 1 at $DIR/aggregate.rs:+2:10: +2:11
|
||||
StorageDead(_4); // scope 1 at $DIR/aggregate.rs:+2:11: +2:12
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +3:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+3:1: +3:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+3:2: +3:2
|
||||
}
|
||||
}
|
||||
|
@ -5,4 +5,13 @@
|
||||
// EMIT_MIR aggregate.main.PreCodegen.after.mir
|
||||
fn main() {
|
||||
let x = (0, 1, 2).1 + 0;
|
||||
foo(x);
|
||||
}
|
||||
|
||||
// EMIT_MIR aggregate.foo.ConstProp.diff
|
||||
// EMIT_MIR aggregate.foo.PreCodegen.after.mir
|
||||
fn foo(x: u8) {
|
||||
// Verify that we still propagate if part of the aggregate is not known.
|
||||
let first = (0, x).0 + 1;
|
||||
let second = (x, 1).1 + 2;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user