File tree Expand file tree Collapse file tree 3 files changed +72
-1
lines changed
compiler/rustc_mir_transform/src Expand file tree Collapse file tree 3 files changed +72
-1
lines changed Original file line number Diff line number Diff line change @@ -156,7 +156,9 @@ impl<'tcx> crate::MirPass<'tcx> for GVN {
156156 maybe_uninit,
157157 } ;
158158
159- storage_checker. visit_body ( body) ;
159+ for ( bb, data) in traversal:: reachable ( body) {
160+ storage_checker. visit_basic_block_data ( bb, data) ;
161+ }
160162
161163 storage_checker. storage_to_remove
162164 } else {
Original file line number Diff line number Diff line change 1+ - // MIR for `f` before GVN
2+ + // MIR for `f` after GVN
3+
4+ fn f(_1: u32) -> () {
5+ let mut _0: ();
6+ let mut _2: S;
7+ let mut _3: S;
8+ let mut _4: S;
9+
10+ bb0: {
11+ StorageLive(_2);
12+ _2 = S(copy _1, const 2_u32);
13+ StorageLive(_3);
14+ - _3 = S(copy _1, const 2_u32);
15+ + _3 = copy _2;
16+ StorageDead(_3);
17+ StorageDead(_2);
18+ return;
19+ }
20+
21+ bb1: {
22+ StorageLive(_2);
23+ _4 = copy _2;
24+ StorageDead(_2);
25+ return;
26+ }
27+ }
28+
Original file line number Diff line number Diff line change 1+ //! Check that we do not remove the storage statements if a reused local
2+ //! is uninitialized in an unreachable block.
3+ //@ test-mir-pass: GVN
4+ // EMIT_MIR gvn_storage_unreachable.f.GVN.diff
5+
6+ #![ feature( custom_mir, core_intrinsics) ]
7+
8+ use std:: intrinsics:: mir:: * ;
9+
10+ struct S ( u32 , u32 ) ;
11+
12+ #[ custom_mir( dialect = "runtime" , phase = "post-cleanup" ) ]
13+ pub fn f ( _1 : u32 ) {
14+ // CHECK-LABEL: fn f(
15+ mir ! {
16+ let _2: S ;
17+ let _3: S ;
18+ let _4: S ;
19+ {
20+ // CHECK: StorageLive(_2);
21+ // CHECK: StorageLive(_3);
22+ // CHECK: _3 = copy _2;
23+ // CHECK: StorageDead(_3);
24+ // CHECK: StorageDead(_2);
25+ StorageLive ( _2) ;
26+ _2 = S ( _1, 2 ) ;
27+ StorageLive ( _3) ;
28+ _3 = S ( _1, 2 ) ;
29+ StorageDead ( _3) ;
30+ StorageDead ( _2) ;
31+ Return ( )
32+ }
33+ bb1 = {
34+ StorageLive ( _2) ;
35+ // CHECK: _4 = copy _2;
36+ _4 = _2;
37+ StorageDead ( _2) ;
38+ Return ( )
39+ }
40+ }
41+ }
You can’t perform that action at this time.
0 commit comments