Skip to content

Commit 851e396

Browse files
committed
fix rebase
1 parent 4af4090 commit 851e396

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

hugr-llvm/src/utils/fat.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::{cmp::Ordering, fmt, hash::Hash, marker::PhantomData, ops::Deref};
77
use hugr_core::hugr::views::Rerooted;
88
use hugr_core::{
99
core::HugrNode,
10-
ops::{DataflowBlock, ExitBlock, Input, NamedOp, OpType, Output, CFG},
10+
ops::{DataflowBlock, ExitBlock, Input, OpType, Output, CFG},
1111
types::Type,
1212
Hugr, HugrView, IncomingPort, Node, NodeIndex, OutgoingPort,
1313
};

hugr-passes/src/force_order.rs

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22
use std::{cmp::Reverse, collections::BinaryHeap, iter};
33

44
use hugr_core::{
5-
hugr::{
6-
hugrmut::HugrMut,
7-
views::{HierarchyView, SiblingGraph},
8-
HugrError,
9-
},
5+
hugr::{hugrmut::HugrMut, HugrError},
106
ops::{OpTag, OpTrait},
117
types::EdgeKind,
128
HugrView as _, Node,
@@ -58,26 +54,33 @@ pub fn force_order_by_key<H: HugrMut<Node = Node>, K: Ord>(
5854
for dp in dataflow_parents {
5955
// we filter out the input and output nodes from the topological sort
6056
let [i, o] = hugr.get_io(dp).unwrap();
61-
let rank = |n| rank(hugr, n);
62-
let sg = SiblingGraph::<Node>::try_new(hugr, dp)?;
63-
let petgraph = NodeFiltered::from_fn(sg.as_petgraph(), |x| x != dp && x != i && x != o);
64-
let ordered_nodes = ForceOrder::new(&petgraph, &rank)
65-
.iter(&petgraph)
66-
.filter(|&x| {
67-
let expected_edge = Some(EdgeKind::StateOrder);
68-
let optype = hugr.get_optype(x);
69-
if optype.other_input() == expected_edge || optype.other_output() == expected_edge {
70-
assert_eq!(
71-
optype.other_input(),
72-
optype.other_output(),
73-
"Optype does not have both input and output order edge: {optype}"
74-
);
75-
true
76-
} else {
77-
false
78-
}
79-
})
80-
.collect_vec();
57+
let ordered_nodes = {
58+
let i_pg = hugr.to_portgraph_node(i);
59+
let o_pg = hugr.to_portgraph_node(o);
60+
let rank = |n| rank(hugr, hugr.from_portgraph_node(n));
61+
let region = hugr.region_portgraph(dp);
62+
let petgraph = NodeFiltered::from_fn(&region, |x| x != i_pg && x != o_pg);
63+
ForceOrder::<_, portgraph::NodeIndex, _, _>::new(&petgraph, &rank)
64+
.iter(&petgraph)
65+
.filter_map(|x| {
66+
let x = hugr.from_portgraph_node(x);
67+
let expected_edge = Some(EdgeKind::StateOrder);
68+
let optype = hugr.get_optype(x);
69+
if optype.other_input() == expected_edge
70+
|| optype.other_output() == expected_edge
71+
{
72+
assert_eq!(
73+
optype.other_input(),
74+
optype.other_output(),
75+
"Optype does not have both input and output order edge: {optype}"
76+
);
77+
Some(x)
78+
} else {
79+
None
80+
}
81+
})
82+
.collect_vec()
83+
};
8184

8285
// we iterate over the topologically sorted nodes, prepending the input
8386
// node and suffixing the output node.

0 commit comments

Comments
 (0)