Move DefLocation from rustc_codegen_ssa to rustc_middle
This commit is contained in:
parent
6c348b77fe
commit
4357482bfd
2 changed files with 18 additions and 16 deletions
|
@ -8,7 +8,7 @@ use rustc_index::bit_set::BitSet;
|
||||||
use rustc_index::{IndexSlice, IndexVec};
|
use rustc_index::{IndexSlice, IndexVec};
|
||||||
use rustc_middle::mir::traversal;
|
use rustc_middle::mir::traversal;
|
||||||
use rustc_middle::mir::visit::{MutatingUseContext, NonMutatingUseContext, PlaceContext, Visitor};
|
use rustc_middle::mir::visit::{MutatingUseContext, NonMutatingUseContext, PlaceContext, Visitor};
|
||||||
use rustc_middle::mir::{self, Location, TerminatorKind};
|
use rustc_middle::mir::{self, DefLocation, Location, TerminatorKind};
|
||||||
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf};
|
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf};
|
||||||
|
|
||||||
pub fn non_ssa_locals<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
|
pub fn non_ssa_locals<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
|
||||||
|
@ -67,21 +67,6 @@ enum LocalKind {
|
||||||
SSA(DefLocation),
|
SSA(DefLocation),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq)]
|
|
||||||
enum DefLocation {
|
|
||||||
Argument,
|
|
||||||
Body(Location),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DefLocation {
|
|
||||||
fn dominates(self, location: Location, dominators: &Dominators<mir::BasicBlock>) -> bool {
|
|
||||||
match self {
|
|
||||||
DefLocation::Argument => true,
|
|
||||||
DefLocation::Body(def) => def.successor_within_block().dominates(location, dominators),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct LocalAnalyzer<'mir, 'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> {
|
struct LocalAnalyzer<'mir, 'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> {
|
||||||
fx: &'mir FunctionCx<'a, 'tcx, Bx>,
|
fx: &'mir FunctionCx<'a, 'tcx, Bx>,
|
||||||
dominators: &'mir Dominators<mir::BasicBlock>,
|
dominators: &'mir Dominators<mir::BasicBlock>,
|
||||||
|
|
|
@ -1590,6 +1590,23 @@ impl Location {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `DefLocation` represents the location of a definition - either an argument or an assignment
|
||||||
|
/// within MIR body.
|
||||||
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
|
pub enum DefLocation {
|
||||||
|
Argument,
|
||||||
|
Body(Location),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DefLocation {
|
||||||
|
pub fn dominates(self, location: Location, dominators: &Dominators<BasicBlock>) -> bool {
|
||||||
|
match self {
|
||||||
|
DefLocation::Argument => true,
|
||||||
|
DefLocation::Body(def) => def.successor_within_block().dominates(location, dominators),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Some nodes are used a lot. Make sure they don't unintentionally get bigger.
|
// Some nodes are used a lot. Make sure they don't unintentionally get bigger.
|
||||||
#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
|
#[cfg(all(target_arch = "x86_64", target_pointer_width = "64"))]
|
||||||
mod size_asserts {
|
mod size_asserts {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue