Skip to content

Commit 392199e

Browse files
authored
Remove unused wasmi_ir codegen and refactor VisitRegs trait (#1649)
* remove visit_input_reg[s] trait methods * remove Res utility type * rename HostVisitor and VisitRegs traits * rename visit_regs -> visit_results * fix broken doc links
1 parent 46c2449 commit 392199e

File tree

5 files changed

+63
-157
lines changed

5 files changed

+63
-157
lines changed

crates/ir/src/enum.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,13 @@ macro_rules! define_enum {
8181
)*
8282
}
8383

84-
impl<'a> $crate::visit_regs::HostVisitor for &'a mut Instruction {
85-
fn host_visitor<V: VisitRegs>(self, visitor: &mut V) {
84+
impl<'a> $crate::visit_results::ResultsVisitor for &'a mut Instruction {
85+
fn host_visitor<V: VisitResults>(self, visitor: &mut V) {
8686
match self {
8787
$(
88-
Instruction::$name { $( $( $result_name, )? $( $field_name, )* )? } => {
88+
Instruction::$name { $( $( $result_name, )? .. )? } => {
8989
$(
90-
$( $crate::visit_regs::Res($result_name).host_visitor(visitor); )?
91-
$( $field_name.host_visitor(visitor); )*
90+
$( $result_name.host_visitor(visitor); )?
9291
)?
9392
}
9493
)*

crates/ir/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ mod immeditate;
1212
pub mod index;
1313
mod primitive;
1414
mod span;
15-
mod visit_regs;
15+
mod visit_results;
1616

1717
#[cfg(test)]
1818
mod tests;
@@ -43,5 +43,5 @@ pub use self::{
4343
},
4444
r#enum::Instruction,
4545
span::{BoundedRegSpan, FixedRegSpan, RegSpan, RegSpanIter},
46-
visit_regs::VisitRegs,
46+
visit_results::VisitResults,
4747
};

crates/ir/src/visit_regs.rs

Lines changed: 0 additions & 141 deletions
This file was deleted.

crates/ir/src/visit_results.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use crate::{index::*, *};
2+
3+
impl Instruction {
4+
/// Visit result [`Reg`]s of `self` via the `visitor`.
5+
pub fn visit_results<V: VisitResults>(&mut self, visitor: &mut V) {
6+
ResultsVisitor::host_visitor(self, visitor)
7+
}
8+
}
9+
10+
/// Implemented by [`Reg`] visitors to visit result [`Reg`]s of an [`Instruction`] via [`Instruction::visit_results`].
11+
pub trait VisitResults {
12+
/// Visits a [`Reg`] storing the result of an [`Instruction`].
13+
fn visit_result_reg(&mut self, reg: &mut Reg);
14+
/// Visits a [`RegSpan`] storing the results of an [`Instruction`].
15+
fn visit_result_regs(&mut self, reg: &mut RegSpan, len: Option<u16>);
16+
}
17+
18+
/// Internal trait used to dispatch to a [`VisitResults`] visitor.
19+
pub trait ResultsVisitor {
20+
/// Host the [`VisitResults`] visitor in the appropriate way.
21+
fn host_visitor<V: VisitResults>(self, visitor: &mut V);
22+
}
23+
24+
impl ResultsVisitor for &'_ mut Reg {
25+
fn host_visitor<V: VisitResults>(self, visitor: &mut V) {
26+
visitor.visit_result_reg(self);
27+
}
28+
}
29+
30+
impl ResultsVisitor for &'_ mut [Reg; 2] {
31+
fn host_visitor<V: VisitResults>(self, visitor: &mut V) {
32+
visitor.visit_result_reg(&mut self[0]);
33+
visitor.visit_result_reg(&mut self[1]);
34+
}
35+
}
36+
37+
impl ResultsVisitor for &'_ mut RegSpan {
38+
fn host_visitor<V: VisitResults>(self, visitor: &mut V) {
39+
visitor.visit_result_regs(self, None);
40+
}
41+
}
42+
43+
impl ResultsVisitor for &'_ mut BoundedRegSpan {
44+
fn host_visitor<V: VisitResults>(self, visitor: &mut V) {
45+
let len = self.len();
46+
visitor.visit_result_regs(self.span_mut(), Some(len));
47+
}
48+
}
49+
50+
impl<const N: u16> ResultsVisitor for &'_ mut FixedRegSpan<N> {
51+
fn host_visitor<V: VisitResults>(self, visitor: &mut V) {
52+
visitor.visit_result_regs(self.span_mut(), Some(N));
53+
}
54+
}

crates/wasmi/src/engine/translator/relink_result.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
engine::EngineFunc,
3-
ir::{index, Instruction, Reg, RegSpan, VisitRegs},
3+
ir::{index, Instruction, Reg, RegSpan, VisitResults},
44
module::ModuleHeader,
55
Engine,
66
Error,
@@ -47,7 +47,7 @@ impl Visitor {
4747
}
4848
}
4949

50-
impl VisitRegs for Visitor {
50+
impl VisitResults for Visitor {
5151
#[inline]
5252
fn visit_result_reg(&mut self, reg: &mut Reg) {
5353
if self.replaced.is_err() {
@@ -58,12 +58,6 @@ impl VisitRegs for Visitor {
5858

5959
#[inline(always)]
6060
fn visit_result_regs(&mut self, _reg: &mut RegSpan, _len: Option<u16>) {}
61-
62-
#[inline(always)]
63-
fn visit_input_reg(&mut self, _reg: &mut Reg) {}
64-
65-
#[inline(always)]
66-
fn visit_input_regs(&mut self, _regs: &mut RegSpan, _len: Option<u16>) {}
6761
}
6862

6963
impl RelinkResult for Instruction {
@@ -97,7 +91,7 @@ impl RelinkResult for Instruction {
9791
instr => {
9892
// Fallback: only relink results of instructions with statically known single results.
9993
let mut visitor = Visitor::new(new_result, old_result);
100-
instr.visit_regs(&mut visitor);
94+
instr.visit_results(&mut visitor);
10195
visitor.replaced
10296
}
10397
}

0 commit comments

Comments
 (0)