Skip to content

Commit

Permalink
Auto merge of rust-lang#52612 - matthewjasper:remove-unnecessary-flow…
Browse files Browse the repository at this point in the history
…, r=nikomatsakis

Don't keep the possibly initialized flow around longer than needed

The possibly initialized flow isn't used after liveness is computed, so don't keep it around. Locally this is about a 10% time win for tuple-stress (which is spending a lot of time calculating flows now that it's not spending so much on liveness).

r? @nikomatsakis
  • Loading branch information
bors committed Jul 23, 2018
2 parents 210d61f + 1d912bf commit 3900bf8
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 19 deletions.
18 changes: 1 addition & 17 deletions src/librustc_mir/borrow_check/flows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,14 @@ use dataflow::move_paths::HasMoveData;
use dataflow::Borrows;
use dataflow::{EverInitializedPlaces, MovingOutStatements};
use dataflow::{FlowAtLocation, FlowsAtLocation};
use dataflow::{MaybeInitializedPlaces, MaybeUninitializedPlaces};
use dataflow::MaybeUninitializedPlaces;
use either::Either;
use std::fmt;
use std::rc::Rc;

// (forced to be `pub` due to its use as an associated type below.)
crate struct Flows<'b, 'gcx: 'tcx, 'tcx: 'b> {
borrows: FlowAtLocation<Borrows<'b, 'gcx, 'tcx>>,
pub inits: FlowAtLocation<MaybeInitializedPlaces<'b, 'gcx, 'tcx>>,
pub uninits: FlowAtLocation<MaybeUninitializedPlaces<'b, 'gcx, 'tcx>>,
pub move_outs: FlowAtLocation<MovingOutStatements<'b, 'gcx, 'tcx>>,
pub ever_inits: FlowAtLocation<EverInitializedPlaces<'b, 'gcx, 'tcx>>,
Expand All @@ -46,15 +45,13 @@ crate struct Flows<'b, 'gcx: 'tcx, 'tcx: 'b> {
impl<'b, 'gcx, 'tcx> Flows<'b, 'gcx, 'tcx> {
crate fn new(
borrows: FlowAtLocation<Borrows<'b, 'gcx, 'tcx>>,
inits: FlowAtLocation<MaybeInitializedPlaces<'b, 'gcx, 'tcx>>,
uninits: FlowAtLocation<MaybeUninitializedPlaces<'b, 'gcx, 'tcx>>,
move_outs: FlowAtLocation<MovingOutStatements<'b, 'gcx, 'tcx>>,
ever_inits: FlowAtLocation<EverInitializedPlaces<'b, 'gcx, 'tcx>>,
polonius_output: Option<Rc<Output<RegionVid, BorrowIndex, LocationIndex>>>,
) -> Self {
Flows {
borrows,
inits,
uninits,
move_outs,
ever_inits,
Expand All @@ -81,7 +78,6 @@ impl<'b, 'gcx, 'tcx> Flows<'b, 'gcx, 'tcx> {
macro_rules! each_flow {
($this:ident, $meth:ident($arg:ident)) => {
FlowAtLocation::$meth(&mut $this.borrows, $arg);
FlowAtLocation::$meth(&mut $this.inits, $arg);
FlowAtLocation::$meth(&mut $this.uninits, $arg);
FlowAtLocation::$meth(&mut $this.move_outs, $arg);
FlowAtLocation::$meth(&mut $this.ever_inits, $arg);
Expand Down Expand Up @@ -134,18 +130,6 @@ impl<'b, 'gcx, 'tcx> fmt::Display for Flows<'b, 'gcx, 'tcx> {
});
s.push_str("] ");

s.push_str("inits: [");
let mut saw_one = false;
self.inits.each_state_bit(|mpi_init| {
if saw_one {
s.push_str(", ");
};
saw_one = true;
let move_path = &self.inits.operator().move_data().move_paths[mpi_init];
s.push_str(&format!("{}", move_path));
});
s.push_str("] ");

s.push_str("uninits: [");
let mut saw_one = false;
self.uninits.each_state_bit(|mpi_uninit| {
Expand Down
2 changes: 0 additions & 2 deletions src/librustc_mir/borrow_check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,6 @@ fn do_mir_borrowck<'a, 'gcx, 'tcx>(
&borrow_set,
);
let regioncx = Rc::new(regioncx);
let flow_inits = flow_inits; // remove mut

let flow_borrows = FlowAtLocation::new(do_dataflow(
tcx,
Expand Down Expand Up @@ -262,7 +261,6 @@ fn do_mir_borrowck<'a, 'gcx, 'tcx>(

let mut state = Flows::new(
flow_borrows,
flow_inits,
flow_uninits,
flow_move_outs,
flow_ever_inits,
Expand Down

0 comments on commit 3900bf8

Please sign in to comment.