Skip to content

Commit 124b63a

Browse files
committed
simplify-locals: Add yet to be optimized test cases
1 parent 1cd97ca commit 124b63a

9 files changed

+294
-0
lines changed

src/test/mir-opt/simplify-locals.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// compile-flags: -C overflow-checks=off
2+
3+
#![feature(box_syntax)]
4+
#![feature(thread_local)]
5+
6+
#[derive(Copy, Clone)]
7+
enum E {
8+
A,
9+
B,
10+
}
11+
12+
// EMIT_MIR simplify_locals.c.SimplifyLocals.diff
13+
fn c() {
14+
let bytes = [0u8; 10];
15+
// Unused cast
16+
let _: &[u8] = &bytes;
17+
}
18+
19+
// EMIT_MIR simplify_locals.d1.SimplifyLocals.diff
20+
fn d1() {
21+
// Unused set discriminant
22+
let _ = E::A;
23+
}
24+
25+
// EMIT_MIR simplify_locals.d2.SimplifyLocals.diff
26+
fn d2() {
27+
// Unused set discriminant
28+
{(10, E::A)}.1 = E::B;
29+
}
30+
31+
// EMIT_MIR simplify_locals.r.SimplifyLocals.diff
32+
fn r() {
33+
let mut a = 1;
34+
// Unused references
35+
let _ = &a;
36+
let _ = &mut a;
37+
}
38+
39+
#[thread_local] static mut X: u32 = 0;
40+
41+
// EMIT_MIR simplify_locals.t1.SimplifyLocals.diff
42+
fn t1() {
43+
// Unused thread local
44+
unsafe { X };
45+
}
46+
47+
// EMIT_MIR simplify_locals.t2.SimplifyLocals.diff
48+
fn t2() {
49+
// Unused thread local
50+
unsafe { &mut X };
51+
}
52+
53+
// EMIT_MIR simplify_locals.t3.SimplifyLocals.diff
54+
fn t3() {
55+
// Unused thread local
56+
unsafe { *&mut X };
57+
}
58+
59+
// EMIT_MIR simplify_locals.t4.SimplifyLocals.diff
60+
fn t4() -> u32 {
61+
// Used thread local
62+
unsafe { X + 1 }
63+
}
64+
65+
fn main() {
66+
c();
67+
d1();
68+
d2();
69+
r();
70+
t1();
71+
t2();
72+
t3();
73+
t4();
74+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
- // MIR for `c` before SimplifyLocals
2+
+ // MIR for `c` after SimplifyLocals
3+
4+
fn c() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:13:8: 13:8
6+
let _1: [u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:14:9: 14:14
7+
let mut _2: &[u8]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
8+
let mut _3: &[u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
9+
- let _4: &[u8; 10]; // in scope 0 at $DIR/simplify-locals.rs:16:20: 16:26
10+
scope 1 {
11+
debug bytes => _1; // in scope 1 at $DIR/simplify-locals.rs:14:9: 14:14
12+
scope 2 {
13+
}
14+
}
15+
16+
bb0: {
17+
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:14:9: 14:14
18+
_1 = [const 0_u8; 10]; // scope 0 at $DIR/simplify-locals.rs:14:17: 14:26
19+
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
20+
_3 = &_1; // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
21+
_2 = move _3 as &[u8] (Pointer(Unsize)); // scope 1 at $DIR/simplify-locals.rs:16:20: 16:26
22+
StorageDead(_2); // scope 1 at $DIR/simplify-locals.rs:16:26: 16:27
23+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:13:8: 17:2
24+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:17:1: 17:2
25+
return; // scope 0 at $DIR/simplify-locals.rs:17:2: 17:2
26+
}
27+
}
28+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
- // MIR for `d1` before SimplifyLocals
2+
+ // MIR for `d1` after SimplifyLocals
3+
4+
fn d1() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:20:9: 20:9
6+
let mut _1: E; // in scope 0 at $DIR/simplify-locals.rs:22:13: 22:17
7+
scope 1 {
8+
}
9+
10+
bb0: {
11+
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:22:13: 22:17
12+
discriminant(_1) = 0; // scope 0 at $DIR/simplify-locals.rs:22:13: 22:17
13+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:22:17: 22:18
14+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:20:9: 23:2
15+
return; // scope 0 at $DIR/simplify-locals.rs:23:2: 23:2
16+
}
17+
}
18+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
- // MIR for `d2` before SimplifyLocals
2+
+ // MIR for `d2` after SimplifyLocals
3+
4+
fn d2() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:26:9: 26:9
6+
let mut _1: E; // in scope 0 at $DIR/simplify-locals.rs:28:22: 28:26
7+
- let mut _2: (i32, E); // in scope 0 at $DIR/simplify-locals.rs:28:5: 28:17
8+
- let mut _3: E; // in scope 0 at $DIR/simplify-locals.rs:28:11: 28:15
9+
+ let mut _2: E; // in scope 0 at $DIR/simplify-locals.rs:28:11: 28:15
10+
11+
bb0: {
12+
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:28:22: 28:26
13+
discriminant(_1) = 1; // scope 0 at $DIR/simplify-locals.rs:28:22: 28:26
14+
- StorageLive(_2); // scope 0 at $DIR/simplify-locals.rs:28:5: 28:17
15+
- StorageLive(_3); // scope 0 at $DIR/simplify-locals.rs:28:11: 28:15
16+
- discriminant(_3) = 0; // scope 0 at $DIR/simplify-locals.rs:28:11: 28:15
17+
- (_2.0: i32) = const 10_i32; // scope 0 at $DIR/simplify-locals.rs:28:6: 28:16
18+
- (_2.1: E) = const E::A; // scope 0 at $DIR/simplify-locals.rs:28:6: 28:16
19+
- // ty::Const
20+
- // + ty: E
21+
- // + val: Value(Scalar(0x00))
22+
- // mir::Constant
23+
- // + span: $DIR/simplify-locals.rs:28:6: 28:16
24+
- // + literal: Const { ty: E, val: Value(Scalar(0x00)) }
25+
- StorageDead(_3); // scope 0 at $DIR/simplify-locals.rs:28:15: 28:16
26+
- (_2.1: E) = const E::B; // scope 0 at $DIR/simplify-locals.rs:28:5: 28:26
27+
- // ty::Const
28+
- // + ty: E
29+
- // + val: Value(Scalar(0x01))
30+
- // mir::Constant
31+
- // + span: $DIR/simplify-locals.rs:28:5: 28:26
32+
- // + literal: Const { ty: E, val: Value(Scalar(0x01)) }
33+
+ StorageLive(_2); // scope 0 at $DIR/simplify-locals.rs:28:11: 28:15
34+
+ discriminant(_2) = 0; // scope 0 at $DIR/simplify-locals.rs:28:11: 28:15
35+
+ StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:28:15: 28:16
36+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:28:25: 28:26
37+
- StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:28:26: 28:27
38+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:26:9: 29:2
39+
return; // scope 0 at $DIR/simplify-locals.rs:29:2: 29:2
40+
}
41+
}
42+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
- // MIR for `r` before SimplifyLocals
2+
+ // MIR for `r` after SimplifyLocals
3+
4+
fn r() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:32:8: 32:8
6+
let mut _1: i32; // in scope 0 at $DIR/simplify-locals.rs:33:9: 33:14
7+
let mut _2: &i32; // in scope 0 at $DIR/simplify-locals.rs:35:13: 35:15
8+
let mut _3: &mut i32; // in scope 0 at $DIR/simplify-locals.rs:36:13: 36:19
9+
scope 1 {
10+
debug a => _1; // in scope 1 at $DIR/simplify-locals.rs:33:9: 33:14
11+
scope 2 {
12+
scope 3 {
13+
}
14+
}
15+
}
16+
17+
bb0: {
18+
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:33:9: 33:14
19+
_1 = const 1_i32; // scope 0 at $DIR/simplify-locals.rs:33:17: 33:18
20+
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:35:13: 35:15
21+
_2 = &_1; // scope 1 at $DIR/simplify-locals.rs:35:13: 35:15
22+
StorageDead(_2); // scope 1 at $DIR/simplify-locals.rs:35:15: 35:16
23+
StorageLive(_3); // scope 2 at $DIR/simplify-locals.rs:36:13: 36:19
24+
_3 = &mut _1; // scope 2 at $DIR/simplify-locals.rs:36:13: 36:19
25+
StorageDead(_3); // scope 2 at $DIR/simplify-locals.rs:36:19: 36:20
26+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:32:8: 37:2
27+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:37:1: 37:2
28+
return; // scope 0 at $DIR/simplify-locals.rs:37:2: 37:2
29+
}
30+
}
31+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
- // MIR for `t1` before SimplifyLocals
2+
+ // MIR for `t1` after SimplifyLocals
3+
4+
fn t1() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:42:9: 42:9
6+
- let _1: u32; // in scope 0 at $DIR/simplify-locals.rs:44:14: 44:15
7+
- let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:44:14: 44:15
8+
+ let mut _1: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:44:14: 44:15
9+
scope 1 {
10+
}
11+
12+
bb0: {
13+
- StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:44:5: 44:17
14+
- StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
15+
- _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
16+
- _1 = (*_2); // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
17+
- StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:44:17: 44:18
18+
+ StorageLive(_1); // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
19+
+ _1 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:44:14: 44:15
20+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:44:17: 44:18
21+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:42:9: 45:2
22+
return; // scope 0 at $DIR/simplify-locals.rs:45:2: 45:2
23+
}
24+
}
25+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
- // MIR for `t2` before SimplifyLocals
2+
+ // MIR for `t2` after SimplifyLocals
3+
4+
fn t2() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:48:9: 48:9
6+
let _1: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:50:14: 50:20
7+
let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:50:19: 50:20
8+
scope 1 {
9+
}
10+
11+
bb0: {
12+
StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:50:5: 50:22
13+
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:50:19: 50:20
14+
_2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:50:19: 50:20
15+
_1 = &mut (*_2); // scope 1 at $DIR/simplify-locals.rs:50:14: 50:20
16+
StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:50:22: 50:23
17+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:50:22: 50:23
18+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:48:9: 51:2
19+
return; // scope 0 at $DIR/simplify-locals.rs:51:2: 51:2
20+
}
21+
}
22+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
- // MIR for `t3` before SimplifyLocals
2+
+ // MIR for `t3` after SimplifyLocals
3+
4+
fn t3() -> () {
5+
let mut _0: (); // return place in scope 0 at $DIR/simplify-locals.rs:54:9: 54:9
6+
- let _1: u32; // in scope 0 at $DIR/simplify-locals.rs:56:14: 56:21
7+
- let mut _2: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:15: 56:21
8+
- let mut _3: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:20: 56:21
9+
+ let mut _1: &mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:15: 56:21
10+
+ let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:56:20: 56:21
11+
scope 1 {
12+
}
13+
14+
bb0: {
15+
- StorageLive(_1); // scope 0 at $DIR/simplify-locals.rs:56:5: 56:23
16+
- StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
17+
- StorageLive(_3); // scope 1 at $DIR/simplify-locals.rs:56:20: 56:21
18+
- _3 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:56:20: 56:21
19+
- _2 = &mut (*_3); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
20+
- _1 = (*_2); // scope 1 at $DIR/simplify-locals.rs:56:14: 56:21
21+
- StorageDead(_3); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
22+
+ StorageLive(_1); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
23+
+ StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:56:20: 56:21
24+
+ _2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:56:20: 56:21
25+
+ _1 = &mut (*_2); // scope 1 at $DIR/simplify-locals.rs:56:15: 56:21
26+
StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
27+
StorageDead(_1); // scope 0 at $DIR/simplify-locals.rs:56:23: 56:24
28+
_0 = const (); // scope 0 at $DIR/simplify-locals.rs:54:9: 57:2
29+
return; // scope 0 at $DIR/simplify-locals.rs:57:2: 57:2
30+
}
31+
}
32+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
- // MIR for `t4` before SimplifyLocals
2+
+ // MIR for `t4` after SimplifyLocals
3+
4+
fn t4() -> u32 {
5+
let mut _0: u32; // return place in scope 0 at $DIR/simplify-locals.rs:60:12: 60:15
6+
let mut _1: u32; // in scope 0 at $DIR/simplify-locals.rs:62:14: 62:15
7+
let mut _2: *mut u32; // in scope 0 at $DIR/simplify-locals.rs:62:14: 62:15
8+
scope 1 {
9+
}
10+
11+
bb0: {
12+
StorageLive(_1); // scope 1 at $DIR/simplify-locals.rs:62:14: 62:15
13+
StorageLive(_2); // scope 1 at $DIR/simplify-locals.rs:62:14: 62:15
14+
_2 = &/*tls*/ mut X; // scope 1 at $DIR/simplify-locals.rs:62:14: 62:15
15+
_1 = (*_2); // scope 1 at $DIR/simplify-locals.rs:62:14: 62:15
16+
_0 = Add(move _1, const 1_u32); // scope 1 at $DIR/simplify-locals.rs:62:14: 62:19
17+
StorageDead(_1); // scope 1 at $DIR/simplify-locals.rs:62:18: 62:19
18+
StorageDead(_2); // scope 0 at $DIR/simplify-locals.rs:63:1: 63:2
19+
return; // scope 0 at $DIR/simplify-locals.rs:63:2: 63:2
20+
}
21+
}
22+

0 commit comments

Comments
 (0)