diff options
| author | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-05-22 10:28:46 +0200 |
|---|---|---|
| committer | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-05-24 20:49:37 +0200 |
| commit | 64a75ecc8014df45b5b875c5820a0406f41ae7bb (patch) | |
| tree | 3e0a0813fffb2461ae27a48ca0c773d641ccf0bd /src/librustc_mir/transform | |
| parent | 3bbf2fd7159e5be5aee8d5c4e11f855862283d26 (diff) | |
| download | rust-64a75ecc8014df45b5b875c5820a0406f41ae7bb.tar.gz rust-64a75ecc8014df45b5b875c5820a0406f41ae7bb.zip | |
change `Value::Bytes` to `Value::Bits`
Diffstat (limited to 'src/librustc_mir/transform')
| -rw-r--r-- | src/librustc_mir/transform/const_prop.rs | 15 | ||||
| -rw-r--r-- | src/librustc_mir/transform/simplify_branches.rs | 2 |
2 files changed, 10 insertions, 7 deletions
diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs index 82979284b11..d9d9104c939 100644 --- a/src/librustc_mir/transform/const_prop.rs +++ b/src/librustc_mir/transform/const_prop.rs @@ -283,7 +283,10 @@ impl<'b, 'a, 'tcx:'b> ConstPropagator<'b, 'a, 'tcx> { Rvalue::NullaryOp(NullOp::SizeOf, ty) => { let param_env = self.tcx.param_env(self.source.def_id); type_size_of(self.tcx, param_env, ty).map(|n| ( - Value::Scalar(Scalar::Bytes(n as u128)), + Value::Scalar(Scalar::Bits { + bits: n as u128, + defined: self.tcx.data_layout.pointer_size.bits() as u8, + }), self.tcx.types.usize, span, )) @@ -326,10 +329,10 @@ impl<'b, 'a, 'tcx:'b> ConstPropagator<'b, 'a, 'tcx> { this.ecx.value_to_primval(ValTy { value: right.0, ty: right.1 }) })?; if op == BinOp::Shr || op == BinOp::Shl { - let param_env = self.tcx.param_env(self.source.def_id); let left_ty = left.ty(self.mir, self.tcx); - let bits = self.tcx.layout_of(param_env.and(left_ty)).unwrap().size.bits(); - if r.to_bytes().ok().map_or(false, |b| b >= bits as u128) { + let left_bits = left_ty.scalar_size(self.tcx).unwrap().bits(); + let right_size = right.1.scalar_size(self.tcx).unwrap(); + if r.to_bits(right_size).ok().map_or(false, |b| b >= left_bits as u128) { let scope_info = match self.mir.visibility_scope_info { ClearCrossCrate::Set(ref data) => data, ClearCrossCrate::Clear => return None, @@ -520,14 +523,14 @@ impl<'b, 'a, 'tcx> Visitor<'tcx> for ConstPropagator<'b, 'a, 'tcx> { BoundsCheck { ref len, ref index } => { let len = self.eval_operand(len).expect("len must be const"); let len = match len.0 { - Value::Scalar(Scalar::Bytes(n)) => n, + Value::Scalar(Scalar::Bits { bits, ..}) => bits, _ => bug!("const len not primitive: {:?}", len), }; let index = self .eval_operand(index) .expect("index must be const"); let index = match index.0 { - Value::Scalar(Scalar::Bytes(n)) => n, + Value::Scalar(Scalar::Bits { bits, .. }) => bits, _ => bug!("const index not primitive: {:?}", index), }; format!( diff --git a/src/librustc_mir/transform/simplify_branches.rs b/src/librustc_mir/transform/simplify_branches.rs index 72bee040c06..ce2f5b0fe6a 100644 --- a/src/librustc_mir/transform/simplify_branches.rs +++ b/src/librustc_mir/transform/simplify_branches.rs @@ -39,7 +39,7 @@ impl MirPass for SimplifyBranches { TerminatorKind::SwitchInt { discr: Operand::Constant(box Constant { literal: Literal::Value { ref value }, .. }), switch_ty, ref values, ref targets, .. } => { - if let Some(constint) = value.assert_bits(switch_ty) { + if let Some(constint) = value.assert_bits(tcx, switch_ty) { let (otherwise, targets) = targets.split_last().unwrap(); let mut ret = TerminatorKind::Goto { target: *otherwise }; for (&v, t) in values.iter().zip(targets.iter()) { |
