Skip to content

Commit b9c5340

Browse files
chapter17: idealize ReadOnly
1 parent 6f5bb3b commit b9c5340

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

src/sea_of_nodes/nodes/idealize.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::datastructures::id::Id;
22
use crate::sea_of_nodes::nodes::node::{
3-
Add, Bool, CProj, Cast, Constant, Div, If, Load, Minus, Mul, Not, Phi, Return, Stop, Store,
4-
Sub, TypedNode,
3+
Add, Bool, CProj, Cast, Constant, Div, If, Load, Minus, Mul, Not, Phi, ReadOnly, Return, Stop,
4+
Store, Sub, TypedNode,
55
};
66
use crate::sea_of_nodes::nodes::node::{IfOp, Region};
77
use crate::sea_of_nodes::nodes::{BoolOp, Node, Nodes};
@@ -28,6 +28,7 @@ impl Node {
2828
TypedNode::Store(n) => n.idealize_store(sea),
2929
TypedNode::Minus(n) => n.idealize_minus(sea),
3030
TypedNode::Div(n) => n.idealize_div(sea),
31+
TypedNode::ReadOnly(n) => n.idealize_read_only(sea),
3132
TypedNode::Constant(_)
3233
| TypedNode::XCtrl(_)
3334
| TypedNode::Start(_)
@@ -624,6 +625,18 @@ impl Div {
624625
}
625626
}
626627

628+
impl ReadOnly {
629+
fn idealize_read_only(self, sea: &mut Nodes) -> Option<Node> {
630+
let in1 = self.inputs(sea)[1].unwrap();
631+
if let Some(tmp) = in1.ty(sea).and_then(Ty::to_mem_ptr) {
632+
if tmp.is_final() {
633+
return Some(in1);
634+
}
635+
}
636+
None
637+
}
638+
}
639+
627640
impl Node {
628641
fn find_dead_input(self, sea: &Nodes) -> Option<usize> {
629642
(1..self.inputs(sea).len())

0 commit comments

Comments
 (0)