Skip to content

Commit

Permalink
Rollup merge of rust-lang#73728 - oli-obk:const_prop_cleanup, r=wesle…
Browse files Browse the repository at this point in the history
…ywiser

Document some invariants correctly/more

r? @wesleywiser
  • Loading branch information
Manishearth committed Jun 26, 2020
2 parents bc10bb0 + 1a355a2 commit 83f6d0a
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions src/librustc_mir/transform/const_prop.rs
Expand Up @@ -350,14 +350,20 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
}

fn get_const(&self, place: Place<'tcx>) -> Option<OpTy<'tcx>> {
let op = self.ecx.eval_place_to_op(place, None).ok();
let op = match self.ecx.eval_place_to_op(place, None) {
Ok(op) => op,
Err(e) => {
trace!("get_const failed: {}", e);
return None;
}
};

// Try to read the local as an immediate so that if it is representable as a scalar, we can
// handle it as such, but otherwise, just return the value as is.
match op.map(|ret| self.ecx.try_read_immediate(ret)) {
Some(Ok(Ok(imm))) => Some(imm.into()),
Some(match self.ecx.try_read_immediate(op) {
Ok(Ok(imm)) => imm.into(),
_ => op,
}
})
}

/// Remove `local` from the pool of `Locals`. Allows writing to them,
Expand Down Expand Up @@ -872,8 +878,9 @@ impl<'mir, 'tcx> MutVisitor<'tcx> for ConstPropagator<'mir, 'tcx> {
if let Ok(place_layout) = self.tcx.layout_of(self.param_env.and(place_ty)) {
let can_const_prop = self.can_const_prop[place.local];
if let Some(()) = self.const_prop(rval, place_layout, source_info, place) {
// This will return None for variables that are from other blocks,
// so it should be okay to propagate from here on down.
// This will return None if the above `const_prop` invocation only "wrote" a
// type whose creation requires no write. E.g. a generator whose initial state
// consists solely of uninitialized memory (so it doesn't capture any locals).
if let Some(value) = self.get_const(place) {
if self.should_const_prop(value) {
trace!("replacing {:?} with {:?}", rval, value);
Expand Down

0 comments on commit 83f6d0a

Please sign in to comment.