MIR visitor: constant -> const_operand

This commit is contained in:
Ralf Jung 2024-06-13 15:35:38 +02:00
parent 921645c737
commit ed1618dedc
11 changed files with 28 additions and 24 deletions

View File

@ -113,7 +113,7 @@ impl<'a, 'tcx> MutVisitor<'tcx> for RegionRenumberer<'a, 'tcx> {
} }
#[instrument(skip(self), level = "debug")] #[instrument(skip(self), level = "debug")]
fn visit_constant(&mut self, constant: &mut ConstOperand<'tcx>, location: Location) { fn visit_const_operand(&mut self, constant: &mut ConstOperand<'tcx>, location: Location) {
let const_ = constant.const_; let const_ = constant.const_;
constant.const_ = self.renumber_regions(const_, || RegionCtxt::Location(location)); constant.const_ = self.renumber_regions(const_, || RegionCtxt::Location(location));
debug!("constant: {:#?}", constant); debug!("constant: {:#?}", constant);

View File

@ -301,10 +301,10 @@ impl<'a, 'b, 'tcx> Visitor<'tcx> for TypeVerifier<'a, 'b, 'tcx> {
self.sanitize_place(place, location, context); self.sanitize_place(place, location, context);
} }
fn visit_constant(&mut self, constant: &ConstOperand<'tcx>, location: Location) { fn visit_const_operand(&mut self, constant: &ConstOperand<'tcx>, location: Location) {
debug!(?constant, ?location, "visit_constant"); debug!(?constant, ?location, "visit_const_operand");
self.super_constant(constant, location); self.super_const_operand(constant, location);
let ty = self.sanitize_type(constant, constant.const_.ty()); let ty = self.sanitize_type(constant, constant.const_.ty());
self.cx.infcx.tcx.for_each_free_region(&ty, |live_region| { self.cx.infcx.tcx.for_each_free_region(&ty, |live_region| {

View File

@ -1287,7 +1287,7 @@ fn use_verbose(ty: Ty<'_>, fn_def: bool) -> bool {
} }
impl<'tcx> Visitor<'tcx> for ExtraComments<'tcx> { impl<'tcx> Visitor<'tcx> for ExtraComments<'tcx> {
fn visit_constant(&mut self, constant: &ConstOperand<'tcx>, _location: Location) { fn visit_const_operand(&mut self, constant: &ConstOperand<'tcx>, _location: Location) {
let ConstOperand { span, user_ty, const_ } = constant; let ConstOperand { span, user_ty, const_ } = constant;
if use_verbose(const_.ty(), true) { if use_verbose(const_.ty(), true) {
self.push("mir::ConstOperand"); self.push("mir::ConstOperand");
@ -1415,7 +1415,7 @@ pub fn write_allocations<'tcx>(
struct CollectAllocIds(BTreeSet<AllocId>); struct CollectAllocIds(BTreeSet<AllocId>);
impl<'tcx> Visitor<'tcx> for CollectAllocIds { impl<'tcx> Visitor<'tcx> for CollectAllocIds {
fn visit_constant(&mut self, c: &ConstOperand<'tcx>, _: Location) { fn visit_const_operand(&mut self, c: &ConstOperand<'tcx>, _: Location) {
match c.const_ { match c.const_ {
Const::Ty(_, _) | Const::Unevaluated(..) => {} Const::Ty(_, _) | Const::Unevaluated(..) => {}
Const::Val(val, _) => { Const::Val(val, _) => {

View File

@ -184,12 +184,12 @@ macro_rules! make_mir_visitor {
/// This is called for every constant in the MIR body and every `required_consts` /// This is called for every constant in the MIR body and every `required_consts`
/// (i.e., including consts that have been dead-code-eliminated). /// (i.e., including consts that have been dead-code-eliminated).
fn visit_constant( fn visit_const_operand(
&mut self, &mut self,
constant: & $($mutability)? ConstOperand<'tcx>, constant: & $($mutability)? ConstOperand<'tcx>,
location: Location, location: Location,
) { ) {
self.super_constant(constant, location); self.super_const_operand(constant, location);
} }
fn visit_ty_const( fn visit_ty_const(
@ -597,7 +597,7 @@ macro_rules! make_mir_visitor {
} }
InlineAsmOperand::Const { value } InlineAsmOperand::Const { value }
| InlineAsmOperand::SymFn { value } => { | InlineAsmOperand::SymFn { value } => {
self.visit_constant(value, location); self.visit_const_operand(value, location);
} }
InlineAsmOperand::Out { place: None, .. } InlineAsmOperand::Out { place: None, .. }
| InlineAsmOperand::SymStatic { def_id: _ } | InlineAsmOperand::SymStatic { def_id: _ }
@ -788,7 +788,7 @@ macro_rules! make_mir_visitor {
); );
} }
Operand::Constant(constant) => { Operand::Constant(constant) => {
self.visit_constant(constant, location); self.visit_const_operand(constant, location);
} }
} }
} }
@ -867,7 +867,7 @@ macro_rules! make_mir_visitor {
} }
} }
match value { match value {
VarDebugInfoContents::Const(c) => self.visit_constant(c, location), VarDebugInfoContents::Const(c) => self.visit_const_operand(c, location),
VarDebugInfoContents::Place(place) => VarDebugInfoContents::Place(place) =>
self.visit_place( self.visit_place(
place, place,
@ -882,7 +882,7 @@ macro_rules! make_mir_visitor {
_scope: $(& $mutability)? SourceScope _scope: $(& $mutability)? SourceScope
) {} ) {}
fn super_constant( fn super_const_operand(
&mut self, &mut self,
constant: & $($mutability)? ConstOperand<'tcx>, constant: & $($mutability)? ConstOperand<'tcx>,
location: Location location: Location
@ -1057,7 +1057,7 @@ macro_rules! super_body {
for const_ in &$($mutability)? $body.required_consts { for const_ in &$($mutability)? $body.required_consts {
let location = Location::START; let location = Location::START;
$self.visit_constant(const_, location); $self.visit_const_operand(const_, location);
} }
} }
} }

View File

@ -706,9 +706,9 @@ impl<'tcx> Visitor<'tcx> for ConstPropagator<'_, 'tcx> {
self.super_operand(operand, location); self.super_operand(operand, location);
} }
fn visit_constant(&mut self, constant: &ConstOperand<'tcx>, location: Location) { fn visit_const_operand(&mut self, constant: &ConstOperand<'tcx>, location: Location) {
trace!("visit_constant: {:?}", constant); trace!("visit_const_operand: {:?}", constant);
self.super_constant(constant, location); self.super_const_operand(constant, location);
self.eval_constant(constant); self.eval_constant(constant);
} }

View File

@ -956,7 +956,7 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Promoter<'a, 'tcx> {
} }
} }
fn visit_constant(&mut self, constant: &mut ConstOperand<'tcx>, _location: Location) { fn visit_const_operand(&mut self, constant: &mut ConstOperand<'tcx>, _location: Location) {
if constant.const_.is_required_const() { if constant.const_.is_required_const() {
self.promoted.required_consts.push(*constant); self.promoted.required_consts.push(*constant);
} }

View File

@ -12,7 +12,7 @@ impl<'a, 'tcx> RequiredConstsVisitor<'a, 'tcx> {
} }
impl<'tcx> Visitor<'tcx> for RequiredConstsVisitor<'_, 'tcx> { impl<'tcx> Visitor<'tcx> for RequiredConstsVisitor<'_, 'tcx> {
fn visit_constant(&mut self, constant: &ConstOperand<'tcx>, _: Location) { fn visit_const_operand(&mut self, constant: &ConstOperand<'tcx>, _: Location) {
if constant.const_.is_required_const() { if constant.const_.is_required_const() {
self.required_consts.push(*constant); self.required_consts.push(*constant);
} }

View File

@ -49,14 +49,14 @@ impl<'tcx> MutVisitor<'tcx> for RevealAllVisitor<'tcx> {
} }
#[inline] #[inline]
fn visit_constant(&mut self, constant: &mut ConstOperand<'tcx>, location: Location) { fn visit_const_operand(&mut self, constant: &mut ConstOperand<'tcx>, location: Location) {
// We have to use `try_normalize_erasing_regions` here, since it's // We have to use `try_normalize_erasing_regions` here, since it's
// possible that we visit impossible-to-satisfy where clauses here, // possible that we visit impossible-to-satisfy where clauses here,
// see #91745 // see #91745
if let Ok(c) = self.tcx.try_normalize_erasing_regions(self.param_env, constant.const_) { if let Ok(c) = self.tcx.try_normalize_erasing_regions(self.param_env, constant.const_) {
constant.const_ = c; constant.const_ = c;
} }
self.super_constant(constant, location); self.super_const_operand(constant, location);
} }
#[inline] #[inline]

View File

@ -799,7 +799,7 @@ impl<'a, 'tcx> MirVisitor<'tcx> for MirUsedCollector<'a, 'tcx> {
/// This does not walk the MIR of the constant as that is not needed for codegen, all we need is /// This does not walk the MIR of the constant as that is not needed for codegen, all we need is
/// to ensure that the constant evaluates successfully and walk the result. /// to ensure that the constant evaluates successfully and walk the result.
#[instrument(skip(self), level = "debug")] #[instrument(skip(self), level = "debug")]
fn visit_constant(&mut self, constant: &mir::ConstOperand<'tcx>, location: Location) { fn visit_const_operand(&mut self, constant: &mir::ConstOperand<'tcx>, location: Location) {
// No `super_constant` as we don't care about `visit_ty`/`visit_ty_const`. // No `super_constant` as we don't care about `visit_ty`/`visit_ty_const`.
let Some(val) = self.eval_constant(constant) else { return }; let Some(val) = self.eval_constant(constant) else { return };
collect_const_value(self.tcx, val, self.used_items); collect_const_value(self.tcx, val, self.used_items);

View File

@ -261,7 +261,7 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
self.super_local_decl(local, local_decl); self.super_local_decl(local, local_decl);
} }
fn visit_constant(&mut self, ct: &mir::ConstOperand<'tcx>, location: Location) { fn visit_const_operand(&mut self, ct: &mir::ConstOperand<'tcx>, location: Location) {
match ct.const_ { match ct.const_ {
mir::Const::Ty(_, c) => { mir::Const::Ty(_, c) => {
c.visit_with(self); c.visit_with(self);

View File

@ -52,7 +52,11 @@ impl<'tcx> BodyBuilder<'tcx> {
} }
impl<'tcx> MutVisitor<'tcx> for BodyBuilder<'tcx> { impl<'tcx> MutVisitor<'tcx> for BodyBuilder<'tcx> {
fn visit_constant(&mut self, constant: &mut mir::ConstOperand<'tcx>, location: mir::Location) { fn visit_const_operand(
&mut self,
constant: &mut mir::ConstOperand<'tcx>,
location: mir::Location,
) {
let const_ = constant.const_; let const_ = constant.const_;
let val = match const_.eval(self.tcx, ty::ParamEnv::reveal_all(), constant.span) { let val = match const_.eval(self.tcx, ty::ParamEnv::reveal_all(), constant.span) {
Ok(v) => v, Ok(v) => v,
@ -63,7 +67,7 @@ impl<'tcx> MutVisitor<'tcx> for BodyBuilder<'tcx> {
}; };
let ty = constant.ty(); let ty = constant.ty();
constant.const_ = mir::Const::Val(val, ty); constant.const_ = mir::Const::Val(val, ty);
self.super_constant(constant, location); self.super_const_operand(constant, location);
} }
fn tcx(&self) -> TyCtxt<'tcx> { fn tcx(&self) -> TyCtxt<'tcx> {