[−][src]Struct rustc_mir::transform::const_prop::ConstPropagator
Finds optimization opportunities on the MIR.
Fields
ecx: InterpCx<'mir, 'tcx, ConstPropMachine<'mir, 'tcx>>tcx: TyCtxt<'tcx>param_env: ParamEnv<'tcx>source_scopes: IndexVec<SourceScope, SourceScopeData<'tcx>>local_decls: IndexVec<Local, LocalDecl<'tcx>>source_info: Option<SourceInfo>Implementations
impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx>[src]
pub(in transform::const_prop) fn new(
body: &Body<'tcx>,
dummy_body: &'mir Body<'tcx>,
tcx: TyCtxt<'tcx>
) -> ConstPropagator<'mir, 'tcx>[src]
body: &Body<'tcx>,
dummy_body: &'mir Body<'tcx>,
tcx: TyCtxt<'tcx>
) -> ConstPropagator<'mir, 'tcx>
pub(in transform::const_prop) fn get_const(
&self,
place: Place<'tcx>
) -> Option<OpTy<'tcx>>[src]
&self,
place: Place<'tcx>
) -> Option<OpTy<'tcx>>
pub(in transform::const_prop) fn remove_const(
ecx: &mut InterpCx<'mir, 'tcx, ConstPropMachine<'mir, 'tcx>>,
local: Local
)[src]
ecx: &mut InterpCx<'mir, 'tcx, ConstPropMachine<'mir, 'tcx>>,
local: Local
)
Remove local from the pool of Locals. Allows writing to them,
but not reading from them anymore.
pub(in transform::const_prop) fn lint_root(
&self,
source_info: SourceInfo
) -> Option<HirId>[src]
&self,
source_info: SourceInfo
) -> Option<HirId>
pub(in transform::const_prop) fn use_ecx<F, T>(
&mut self,
f: F
) -> Option<T> where
F: FnOnce(&mut Self) -> InterpResult<'tcx, T>, [src]
&mut self,
f: F
) -> Option<T> where
F: FnOnce(&mut Self) -> InterpResult<'tcx, T>,
pub(in transform::const_prop) fn eval_constant(
&mut self,
c: &Constant<'tcx>,
source_info: SourceInfo
) -> Option<OpTy<'tcx>>[src]
&mut self,
c: &Constant<'tcx>,
source_info: SourceInfo
) -> Option<OpTy<'tcx>>
Returns the value, if any, of evaluating c.
pub(in transform::const_prop) fn eval_place(
&mut self,
place: Place<'tcx>
) -> Option<OpTy<'tcx>>[src]
&mut self,
place: Place<'tcx>
) -> Option<OpTy<'tcx>>
Returns the value, if any, of evaluating place.
pub(in transform::const_prop) fn eval_operand(
&mut self,
op: &Operand<'tcx>,
source_info: SourceInfo
) -> Option<OpTy<'tcx>>[src]
&mut self,
op: &Operand<'tcx>,
source_info: SourceInfo
) -> Option<OpTy<'tcx>>
Returns the value, if any, of evaluating op. Calls upon eval_constant
or eval_place, depending on the variant of Operand used.
pub(in transform::const_prop) fn report_assert_as_lint(
&self,
lint: &'static Lint,
source_info: SourceInfo,
message: &'static str,
panic: AssertKind<impl Debug>
) -> Option<()>[src]
&self,
lint: &'static Lint,
source_info: SourceInfo,
message: &'static str,
panic: AssertKind<impl Debug>
) -> Option<()>
pub(in transform::const_prop) fn check_unary_op(
&mut self,
op: UnOp,
arg: &Operand<'tcx>,
source_info: SourceInfo
) -> Option<()>[src]
&mut self,
op: UnOp,
arg: &Operand<'tcx>,
source_info: SourceInfo
) -> Option<()>
pub(in transform::const_prop) fn check_binary_op(
&mut self,
op: BinOp,
left: &Operand<'tcx>,
right: &Operand<'tcx>,
source_info: SourceInfo
) -> Option<()>[src]
&mut self,
op: BinOp,
left: &Operand<'tcx>,
right: &Operand<'tcx>,
source_info: SourceInfo
) -> Option<()>
pub(in transform::const_prop) fn propagate_operand(
&mut self,
operand: &mut Operand<'tcx>
)[src]
&mut self,
operand: &mut Operand<'tcx>
)
pub(in transform::const_prop) fn const_prop(
&mut self,
rvalue: &Rvalue<'tcx>,
source_info: SourceInfo,
place: Place<'tcx>
) -> Option<()>[src]
&mut self,
rvalue: &Rvalue<'tcx>,
source_info: SourceInfo,
place: Place<'tcx>
) -> Option<()>
pub(in transform::const_prop) fn eval_rvalue_with_identities(
&mut self,
rvalue: &Rvalue<'tcx>,
place: Place<'tcx>
) -> Option<()>[src]
&mut self,
rvalue: &Rvalue<'tcx>,
place: Place<'tcx>
) -> Option<()>
pub(in transform::const_prop) fn operand_from_scalar(
&self,
scalar: Scalar,
ty: Ty<'tcx>,
span: Span
) -> Operand<'tcx>[src]
&self,
scalar: Scalar,
ty: Ty<'tcx>,
span: Span
) -> Operand<'tcx>
Creates a new Operand::Constant from a Scalar value
pub(in transform::const_prop) fn replace_with_const(
&mut self,
rval: &mut Rvalue<'tcx>,
value: OpTy<'tcx>,
source_info: SourceInfo
)[src]
&mut self,
rval: &mut Rvalue<'tcx>,
value: OpTy<'tcx>,
source_info: SourceInfo
)
pub(in transform::const_prop) fn should_const_prop(
&mut self,
op: OpTy<'tcx>
) -> bool[src]
&mut self,
op: OpTy<'tcx>
) -> bool
Returns true if and only if this op should be const-propagated into.
Trait Implementations
impl<'mir, 'tcx> HasDataLayout for ConstPropagator<'mir, 'tcx>[src]
pub fn data_layout(&self) -> &TargetDataLayout[src]
impl<'mir, 'tcx> HasTyCtxt<'tcx> for ConstPropagator<'mir, 'tcx>[src]
impl<'mir, 'tcx> LayoutOf for ConstPropagator<'mir, 'tcx>[src]
type Ty = Ty<'tcx>
type TyAndLayout = Result<TyAndLayout<'tcx>, LayoutError<'tcx>>
pub fn layout_of(&self, ty: Ty<'tcx>) -> Self::TyAndLayout[src]
pub fn spanned_layout_of(&self, ty: Self::Ty, _span: Span) -> Self::TyAndLayout[src]
impl<'mir, 'tcx> MutVisitor<'tcx> for ConstPropagator<'mir, 'tcx>[src]
pub fn tcx(&self) -> TyCtxt<'tcx>[src]
pub fn visit_body(&mut self, body: &mut Body<'tcx>)[src]
pub fn visit_operand(&mut self, operand: &mut Operand<'tcx>, location: Location)[src]
pub fn visit_constant(
&mut self,
constant: &mut Constant<'tcx>,
location: Location
)[src]
&mut self,
constant: &mut Constant<'tcx>,
location: Location
)
pub fn visit_statement(
&mut self,
statement: &mut Statement<'tcx>,
location: Location
)[src]
&mut self,
statement: &mut Statement<'tcx>,
location: Location
)
pub fn visit_terminator(
&mut self,
terminator: &mut Terminator<'tcx>,
location: Location
)[src]
&mut self,
terminator: &mut Terminator<'tcx>,
location: Location
)
pub fn visit_basic_block_data(
&mut self,
block: BasicBlock,
data: &mut BasicBlockData<'tcx>
)[src]
&mut self,
block: BasicBlock,
data: &mut BasicBlockData<'tcx>
)
pub fn visit_source_scope_data(
&mut self,
scope_data: &mut SourceScopeData<'tcx>
)[src]
&mut self,
scope_data: &mut SourceScopeData<'tcx>
)
pub fn visit_assign(
&mut self,
place: &mut Place<'tcx>,
rvalue: &mut Rvalue<'tcx>,
location: Location
)[src]
&mut self,
place: &mut Place<'tcx>,
rvalue: &mut Rvalue<'tcx>,
location: Location
)
pub fn visit_assert_message(
&mut self,
msg: &mut AssertKind<Operand<'tcx>>,
location: Location
)[src]
&mut self,
msg: &mut AssertKind<Operand<'tcx>>,
location: Location
)
pub fn visit_rvalue(&mut self, rvalue: &mut Rvalue<'tcx>, location: Location)[src]
pub fn visit_ascribe_user_ty(
&mut self,
place: &mut Place<'tcx>,
variance: &mut Variance,
user_ty: &mut UserTypeProjection,
location: Location
)[src]
&mut self,
place: &mut Place<'tcx>,
variance: &mut Variance,
user_ty: &mut UserTypeProjection,
location: Location
)
pub fn visit_coverage(&mut self, coverage: &mut Coverage, location: Location)[src]
pub fn visit_retag(
&mut self,
kind: &mut RetagKind,
place: &mut Place<'tcx>,
location: Location
)[src]
&mut self,
kind: &mut RetagKind,
place: &mut Place<'tcx>,
location: Location
)
pub fn visit_place(
&mut self,
place: &mut Place<'tcx>,
context: PlaceContext,
location: Location
)[src]
&mut self,
place: &mut Place<'tcx>,
context: PlaceContext,
location: Location
)
pub fn super_place(
&mut self,
place: &mut Place<'tcx>,
context: PlaceContext,
location: Location
)[src]
&mut self,
place: &mut Place<'tcx>,
context: PlaceContext,
location: Location
)
pub fn process_projection(
&mut self,
projection: &'a [ProjectionElem<Local, &'tcx TyS<'tcx>>],
location: Location
) -> Option<Vec<ProjectionElem<Local, &'tcx TyS<'tcx>>>>[src]
&mut self,
projection: &'a [ProjectionElem<Local, &'tcx TyS<'tcx>>],
location: Location
) -> Option<Vec<ProjectionElem<Local, &'tcx TyS<'tcx>>>>
pub fn process_projection_elem(
&mut self,
elem: ProjectionElem<Local, &'tcx TyS<'tcx>>,
location: Location
) -> Option<ProjectionElem<Local, &'tcx TyS<'tcx>>>[src]
&mut self,
elem: ProjectionElem<Local, &'tcx TyS<'tcx>>,
location: Location
) -> Option<ProjectionElem<Local, &'tcx TyS<'tcx>>>
pub fn visit_span(&mut self, span: &mut Span)[src]
pub fn visit_source_info(&mut self, source_info: &mut SourceInfo)[src]
pub fn visit_ty(&mut self, ty: &mut &'tcx TyS<'tcx>, TyContext)[src]
pub fn visit_user_type_projection(&mut self, ty: &mut UserTypeProjection)[src]
pub fn visit_user_type_annotation(
&mut self,
index: UserTypeAnnotationIndex,
ty: &mut CanonicalUserTypeAnnotation<'tcx>
)[src]
&mut self,
index: UserTypeAnnotationIndex,
ty: &mut CanonicalUserTypeAnnotation<'tcx>
)
pub fn visit_region(&mut self, region: &mut &'tcx RegionKind, Location)[src]
pub fn visit_const(&mut self, constant: &mut &'tcx Const<'tcx>, Location)[src]
pub fn visit_substs(
&mut self,
substs: &mut &'tcx List<GenericArg<'tcx>>,
Location
)[src]
&mut self,
substs: &mut &'tcx List<GenericArg<'tcx>>,
Location
)
pub fn visit_local_decl(
&mut self,
local: Local,
local_decl: &mut LocalDecl<'tcx>
)[src]
&mut self,
local: Local,
local_decl: &mut LocalDecl<'tcx>
)
pub fn visit_var_debug_info(&mut self, var_debug_info: &mut VarDebugInfo<'tcx>)[src]
pub fn visit_local(
&mut self,
_local: &mut Local,
_context: PlaceContext,
_location: Location
)[src]
&mut self,
_local: &mut Local,
_context: PlaceContext,
_location: Location
)
pub fn visit_source_scope(&mut self, scope: &mut SourceScope)[src]
pub fn super_body(&mut self, body: &mut Body<'tcx>)[src]
pub fn super_basic_block_data(
&mut self,
block: BasicBlock,
data: &mut BasicBlockData<'tcx>
)[src]
&mut self,
block: BasicBlock,
data: &mut BasicBlockData<'tcx>
)
pub fn super_source_scope_data(
&mut self,
scope_data: &mut SourceScopeData<'tcx>
)[src]
&mut self,
scope_data: &mut SourceScopeData<'tcx>
)
pub fn super_statement(
&mut self,
statement: &mut Statement<'tcx>,
location: Location
)[src]
&mut self,
statement: &mut Statement<'tcx>,
location: Location
)
pub fn super_assign(
&mut self,
place: &mut Place<'tcx>,
rvalue: &mut Rvalue<'tcx>,
location: Location
)[src]
&mut self,
place: &mut Place<'tcx>,
rvalue: &mut Rvalue<'tcx>,
location: Location
)
pub fn super_terminator(
&mut self,
terminator: &mut Terminator<'tcx>,
location: Location
)[src]
&mut self,
terminator: &mut Terminator<'tcx>,
location: Location
)
pub fn super_assert_message(
&mut self,
msg: &mut AssertKind<Operand<'tcx>>,
location: Location
)[src]
&mut self,
msg: &mut AssertKind<Operand<'tcx>>,
location: Location
)
pub fn super_rvalue(&mut self, rvalue: &mut Rvalue<'tcx>, location: Location)[src]
pub fn super_operand(&mut self, operand: &mut Operand<'tcx>, location: Location)[src]
pub fn super_ascribe_user_ty(
&mut self,
place: &mut Place<'tcx>,
_variance: &mut Variance,
user_ty: &mut UserTypeProjection,
location: Location
)[src]
&mut self,
place: &mut Place<'tcx>,
_variance: &mut Variance,
user_ty: &mut UserTypeProjection,
location: Location
)
pub fn super_coverage(&mut self, _coverage: &mut Coverage, _location: Location)[src]
pub fn super_retag(
&mut self,
_kind: &mut RetagKind,
place: &mut Place<'tcx>,
location: Location
)[src]
&mut self,
_kind: &mut RetagKind,
place: &mut Place<'tcx>,
location: Location
)
pub fn super_local_decl(
&mut self,
local: Local,
local_decl: &mut LocalDecl<'tcx>
)[src]
&mut self,
local: Local,
local_decl: &mut LocalDecl<'tcx>
)
pub fn super_var_debug_info(&mut self, var_debug_info: &mut VarDebugInfo<'tcx>)[src]
pub fn super_source_scope(&mut self, _scope: &mut SourceScope)[src]
pub fn super_constant(
&mut self,
constant: &mut Constant<'tcx>,
location: Location
)[src]
&mut self,
constant: &mut Constant<'tcx>,
location: Location
)
pub fn super_span(&mut self, _span: &mut Span)[src]
pub fn super_source_info(&mut self, source_info: &mut SourceInfo)[src]
pub fn super_user_type_projection(&mut self, _ty: &mut UserTypeProjection)[src]
pub fn super_user_type_annotation(
&mut self,
_index: UserTypeAnnotationIndex,
ty: &mut CanonicalUserTypeAnnotation<'tcx>
)[src]
&mut self,
_index: UserTypeAnnotationIndex,
ty: &mut CanonicalUserTypeAnnotation<'tcx>
)
pub fn super_ty(&mut self, _ty: &mut &'tcx TyS<'tcx>)[src]
pub fn super_region(&mut self, _region: &mut &'tcx RegionKind)[src]
pub fn super_const(&mut self, _const: &mut &'tcx Const<'tcx>)[src]
pub fn super_substs(&mut self, _substs: &mut &'tcx List<GenericArg<'tcx>>)[src]
pub fn visit_location(&mut self, body: &mut Body<'tcx>, location: Location)[src]
Auto Trait Implementations
impl<'mir, 'tcx> !RefUnwindSafe for ConstPropagator<'mir, 'tcx>
impl<'mir, 'tcx> !Send for ConstPropagator<'mir, 'tcx>
impl<'mir, 'tcx> !Sync for ConstPropagator<'mir, 'tcx>
impl<'mir, 'tcx> Unpin for ConstPropagator<'mir, 'tcx> where
'tcx: 'mir,
'tcx: 'mir,
impl<'mir, 'tcx> !UnwindSafe for ConstPropagator<'mir, 'tcx>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> PointerArithmetic for T where
T: HasDataLayout, [src]
T: HasDataLayout,
pub fn pointer_size(&self) -> Size[src]
pub fn machine_usize_max(&self) -> u64[src]
pub fn machine_isize_min(&self) -> i64[src]
pub fn machine_isize_max(&self) -> i64[src]
pub fn truncate_to_ptr(&self, (u64, bool)) -> (u64, bool)[src]
pub fn overflowing_offset(&self, val: u64, i: u64) -> (u64, bool)[src]
pub fn overflowing_signed_offset(&self, val: u64, i: i64) -> (u64, bool)[src]
pub fn offset<'tcx>(
&self,
val: u64,
i: u64
) -> Result<u64, InterpErrorInfo<'tcx>>[src]
&self,
val: u64,
i: u64
) -> Result<u64, InterpErrorInfo<'tcx>>
pub fn signed_offset<'tcx>(
&self,
val: u64,
i: i64
) -> Result<u64, InterpErrorInfo<'tcx>>[src]
&self,
val: u64,
i: i64
) -> Result<u64, InterpErrorInfo<'tcx>>
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.