cranelift: bump regalloc.rs to 0.0.24 and adapt to latest API changes;
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -1640,9 +1640,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regalloc"
|
name = "regalloc"
|
||||||
version = "0.0.23"
|
version = "0.0.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b36727ea09f6e363ddebb29b2d2620052267cc1fc6e0da7da63317938eb4104c"
|
checksum = "5842bece8a4b1690ffa6d9d959081c1d5d851ee4337a36c0a121fafe8c16add2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ smallvec = { version = "1.0.0" }
|
|||||||
thiserror = "1.0.4"
|
thiserror = "1.0.4"
|
||||||
byteorder = { version = "1.3.2", default-features = false }
|
byteorder = { version = "1.3.2", default-features = false }
|
||||||
peepmatic-runtime = { path = "../peepmatic/crates/runtime", optional = true }
|
peepmatic-runtime = { path = "../peepmatic/crates/runtime", optional = true }
|
||||||
regalloc = "0.0.23"
|
regalloc = "0.0.24"
|
||||||
# It is a goal of the cranelift-codegen crate to have minimal external dependencies.
|
# It is a goal of the cranelift-codegen crate to have minimal external dependencies.
|
||||||
# Please don't add any unless they are essential to the task of creating binary
|
# Please don't add any unless they are essential to the task of creating binary
|
||||||
# machine code. Integration tests that need external dependencies can be
|
# machine code. Integration tests that need external dependencies can be
|
||||||
|
|||||||
@@ -1168,29 +1168,29 @@ fn aarch64_get_regs(inst: &Inst, collector: &mut RegUsageCollector) {
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
// Instructions: map_regs
|
// Instructions: map_regs
|
||||||
|
|
||||||
fn aarch64_map_regs(inst: &mut Inst, mapper: &RegUsageMapper) {
|
fn aarch64_map_regs<RUM: RegUsageMapper>(inst: &mut Inst, mapper: &RUM) {
|
||||||
fn map_use(m: &RegUsageMapper, r: &mut Reg) {
|
fn map_use<RUM: RegUsageMapper>(m: &RUM, r: &mut Reg) {
|
||||||
if r.is_virtual() {
|
if r.is_virtual() {
|
||||||
let new = m.get_use(r.to_virtual_reg()).unwrap().to_reg();
|
let new = m.get_use(r.to_virtual_reg()).unwrap().to_reg();
|
||||||
*r = new;
|
*r = new;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_def(m: &RegUsageMapper, r: &mut Writable<Reg>) {
|
fn map_def<RUM: RegUsageMapper>(m: &RUM, r: &mut Writable<Reg>) {
|
||||||
if r.to_reg().is_virtual() {
|
if r.to_reg().is_virtual() {
|
||||||
let new = m.get_def(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
let new = m.get_def(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
||||||
*r = Writable::from_reg(new);
|
*r = Writable::from_reg(new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_mod(m: &RegUsageMapper, r: &mut Writable<Reg>) {
|
fn map_mod<RUM: RegUsageMapper>(m: &RUM, r: &mut Writable<Reg>) {
|
||||||
if r.to_reg().is_virtual() {
|
if r.to_reg().is_virtual() {
|
||||||
let new = m.get_mod(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
let new = m.get_mod(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
||||||
*r = Writable::from_reg(new);
|
*r = Writable::from_reg(new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_mem(m: &RegUsageMapper, mem: &mut MemArg) {
|
fn map_mem<RUM: RegUsageMapper>(m: &RUM, mem: &mut MemArg) {
|
||||||
// N.B.: we take only the pre-map here, but this is OK because the
|
// N.B.: we take only the pre-map here, but this is OK because the
|
||||||
// only addressing modes that update registers (pre/post-increment on
|
// only addressing modes that update registers (pre/post-increment on
|
||||||
// AArch64) both read and write registers, so they are "mods" rather
|
// AArch64) both read and write registers, so they are "mods" rather
|
||||||
@@ -1219,7 +1219,7 @@ fn aarch64_map_regs(inst: &mut Inst, mapper: &RegUsageMapper) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_pairmem(m: &RegUsageMapper, mem: &mut PairMemArg) {
|
fn map_pairmem<RUM: RegUsageMapper>(m: &RUM, mem: &mut PairMemArg) {
|
||||||
match mem {
|
match mem {
|
||||||
&mut PairMemArg::SignedOffset(ref mut reg, ..) => map_use(m, reg),
|
&mut PairMemArg::SignedOffset(ref mut reg, ..) => map_use(m, reg),
|
||||||
&mut PairMemArg::PreIndexed(ref mut reg, ..) => map_def(m, reg),
|
&mut PairMemArg::PreIndexed(ref mut reg, ..) => map_def(m, reg),
|
||||||
@@ -1227,7 +1227,7 @@ fn aarch64_map_regs(inst: &mut Inst, mapper: &RegUsageMapper) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_br(m: &RegUsageMapper, br: &mut CondBrKind) {
|
fn map_br<RUM: RegUsageMapper>(m: &RUM, br: &mut CondBrKind) {
|
||||||
match br {
|
match br {
|
||||||
&mut CondBrKind::Zero(ref mut reg) => map_use(m, reg),
|
&mut CondBrKind::Zero(ref mut reg) => map_use(m, reg),
|
||||||
&mut CondBrKind::NotZero(ref mut reg) => map_use(m, reg),
|
&mut CondBrKind::NotZero(ref mut reg) => map_use(m, reg),
|
||||||
@@ -1738,7 +1738,7 @@ impl MachInst for Inst {
|
|||||||
aarch64_get_regs(self, collector)
|
aarch64_get_regs(self, collector)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_regs(&mut self, mapper: &RegUsageMapper) {
|
fn map_regs<RUM: RegUsageMapper>(&mut self, mapper: &RUM) {
|
||||||
aarch64_map_regs(self, mapper);
|
aarch64_map_regs(self, mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -576,21 +576,21 @@ fn x64_get_regs(inst: &Inst, collector: &mut RegUsageCollector) {
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
// Instructions and subcomponents: map_regs
|
// Instructions and subcomponents: map_regs
|
||||||
|
|
||||||
fn map_use(m: &RegUsageMapper, r: &mut Reg) {
|
fn map_use<RUM: RegUsageMapper>(m: &RUM, r: &mut Reg) {
|
||||||
if r.is_virtual() {
|
if r.is_virtual() {
|
||||||
let new = m.get_use(r.to_virtual_reg()).unwrap().to_reg();
|
let new = m.get_use(r.to_virtual_reg()).unwrap().to_reg();
|
||||||
*r = new;
|
*r = new;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_def(m: &RegUsageMapper, r: &mut Writable<Reg>) {
|
fn map_def<RUM: RegUsageMapper>(m: &RUM, r: &mut Writable<Reg>) {
|
||||||
if r.to_reg().is_virtual() {
|
if r.to_reg().is_virtual() {
|
||||||
let new = m.get_def(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
let new = m.get_def(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
||||||
*r = Writable::from_reg(new);
|
*r = Writable::from_reg(new);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_mod(m: &RegUsageMapper, r: &mut Writable<Reg>) {
|
fn map_mod<RUM: RegUsageMapper>(m: &RUM, r: &mut Writable<Reg>) {
|
||||||
if r.to_reg().is_virtual() {
|
if r.to_reg().is_virtual() {
|
||||||
let new = m.get_mod(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
let new = m.get_mod(r.to_reg().to_virtual_reg()).unwrap().to_reg();
|
||||||
*r = Writable::from_reg(new);
|
*r = Writable::from_reg(new);
|
||||||
@@ -598,7 +598,7 @@ fn map_mod(m: &RegUsageMapper, r: &mut Writable<Reg>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Addr {
|
impl Addr {
|
||||||
fn map_uses(&mut self, map: &RegUsageMapper) {
|
fn map_uses<RUM: RegUsageMapper>(&mut self, map: &RUM) {
|
||||||
match self {
|
match self {
|
||||||
Addr::IR {
|
Addr::IR {
|
||||||
simm32: _,
|
simm32: _,
|
||||||
@@ -618,7 +618,7 @@ impl Addr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl RMI {
|
impl RMI {
|
||||||
fn map_uses(&mut self, map: &RegUsageMapper) {
|
fn map_uses<RUM: RegUsageMapper>(&mut self, map: &RUM) {
|
||||||
match self {
|
match self {
|
||||||
RMI::R { ref mut reg } => map_use(map, reg),
|
RMI::R { ref mut reg } => map_use(map, reg),
|
||||||
RMI::M { ref mut addr } => addr.map_uses(map),
|
RMI::M { ref mut addr } => addr.map_uses(map),
|
||||||
@@ -628,7 +628,7 @@ impl RMI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl RM {
|
impl RM {
|
||||||
fn map_uses(&mut self, map: &RegUsageMapper) {
|
fn map_uses<RUM: RegUsageMapper>(&mut self, map: &RUM) {
|
||||||
match self {
|
match self {
|
||||||
RM::R { ref mut reg } => map_use(map, reg),
|
RM::R { ref mut reg } => map_use(map, reg),
|
||||||
RM::M { ref mut addr } => addr.map_uses(map),
|
RM::M { ref mut addr } => addr.map_uses(map),
|
||||||
@@ -636,7 +636,7 @@ impl RM {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn x64_map_regs(inst: &mut Inst, mapper: &RegUsageMapper) {
|
fn x64_map_regs<RUM: RegUsageMapper>(inst: &mut Inst, mapper: &RUM) {
|
||||||
// Note this must be carefully synchronized with x64_get_regs.
|
// Note this must be carefully synchronized with x64_get_regs.
|
||||||
match inst {
|
match inst {
|
||||||
// ** Nop
|
// ** Nop
|
||||||
@@ -739,7 +739,7 @@ impl MachInst for Inst {
|
|||||||
x64_get_regs(&self, collector)
|
x64_get_regs(&self, collector)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_regs(&mut self, mapper: &RegUsageMapper) {
|
fn map_regs<RUM: RegUsageMapper>(&mut self, mapper: &RUM) {
|
||||||
x64_map_regs(self, mapper);
|
x64_map_regs(self, mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ pub trait MachInst: Clone + Debug {
|
|||||||
|
|
||||||
/// Map virtual registers to physical registers using the given virt->phys
|
/// Map virtual registers to physical registers using the given virt->phys
|
||||||
/// maps corresponding to the program points prior to, and after, this instruction.
|
/// maps corresponding to the program points prior to, and after, this instruction.
|
||||||
fn map_regs(&mut self, maps: &RegUsageMapper);
|
fn map_regs<RUM: RegUsageMapper>(&mut self, maps: &RUM);
|
||||||
|
|
||||||
/// If this is a simple move, return the (source, destination) tuple of registers.
|
/// If this is a simple move, return the (source, destination) tuple of registers.
|
||||||
fn is_move(&self) -> Option<(Writable<Reg>, Reg)>;
|
fn is_move(&self) -> Option<(Writable<Reg>, Reg)>;
|
||||||
|
|||||||
@@ -457,7 +457,7 @@ impl<I: VCodeInst> RegallocFunction for VCode<I> {
|
|||||||
insn.get_regs(collector)
|
insn.get_regs(collector)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn map_regs(insn: &mut I, mapper: &RegUsageMapper) {
|
fn map_regs<RUM: RegUsageMapper>(insn: &mut I, mapper: &RUM) {
|
||||||
insn.map_regs(mapper);
|
insn.map_regs(mapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user