diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-02-05 13:14:25 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-05 13:14:25 +0100 |
| commit | c1779412fa97a1d5ecded57dd43c5f802e21de89 (patch) | |
| tree | bd5205706fdbacc429fb6e9932cd8b6f4736a1de | |
| parent | d694f2252122450e47ceaafe416784402210d927 (diff) | |
| parent | d62b6f204733d255a3e943388ba99f14b053bf4a (diff) | |
| download | rust-c1779412fa97a1d5ecded57dd43c5f802e21de89.tar.gz rust-c1779412fa97a1d5ecded57dd43c5f802e21de89.zip | |
Rollup merge of #68790 - nnethercote:improve-merge_from_succ, r=nikomatsakis
Improve `merge_from_succ` A couple of small performance wins. r? @nikomatsakis
| -rw-r--r-- | src/librustc_passes/liveness.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/librustc_passes/liveness.rs b/src/librustc_passes/liveness.rs index 7718139f6e9..b355a47c394 100644 --- a/src/librustc_passes/liveness.rs +++ b/src/librustc_passes/liveness.rs @@ -822,8 +822,15 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { return false; } - let mut changed = false; + let mut any_changed = false; self.indices2(ln, succ_ln, |this, idx, succ_idx| { + // This is a special case, pulled out from the code below, where we + // don't have to do anything. It occurs about 60-70% of the time. + if this.rwu_table.packed_rwus[succ_idx] == INV_INV_FALSE { + return; + } + + let mut changed = false; let mut rwu = this.rwu_table.get(idx); let succ_rwu = this.rwu_table.get(succ_idx); if succ_rwu.reader.is_valid() && !rwu.reader.is_valid() { @@ -843,6 +850,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { if changed { this.rwu_table.assign_unpacked(idx, rwu); + any_changed = true; } }); @@ -851,9 +859,9 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { ln, self.ln_str(succ_ln), first_merge, - changed + any_changed ); - return changed; + return any_changed; } // Indicates that a local variable was *defined*; we know that no |
