diff --git a/libs/@local/hashql/mir/src/pass/execution/terminator_placement/mod.rs b/libs/@local/hashql/mir/src/pass/execution/terminator_placement/mod.rs index a260ca21170..87579b11c39 100644 --- a/libs/@local/hashql/mir/src/pass/execution/terminator_placement/mod.rs +++ b/libs/@local/hashql/mir/src/pass/execution/terminator_placement/mod.rs @@ -393,13 +393,9 @@ impl PopulateEdgeMatrix { terminator: &TerminatorKind, ) { match terminator { - TerminatorKind::Goto(_) => { + TerminatorKind::Goto(_) | TerminatorKind::SwitchInt(_) => { self.add_goto_transitions(matrix); } - TerminatorKind::SwitchInt(_) => { - // SwitchInt does not allow additional cross-backend transitions - // due to complexity of coordinating branches across backends. - } TerminatorKind::GraphRead(_) => { self.restrict_to_interpreter_only(matrix); } diff --git a/libs/@local/hashql/mir/src/pass/execution/terminator_placement/tests.rs b/libs/@local/hashql/mir/src/pass/execution/terminator_placement/tests.rs index 7fcdbae7058..f81c4509bac 100644 --- a/libs/@local/hashql/mir/src/pass/execution/terminator_placement/tests.rs +++ b/libs/@local/hashql/mir/src/pass/execution/terminator_placement/tests.rs @@ -225,7 +225,7 @@ fn goto_allows_cross_backend_non_postgres() { } #[test] -fn switchint_blocks_cross_backend() { +fn switchint_allows_cross_backend() { let heap = Heap::new(); let interner = Interner::new(&heap); let env = Environment::new(&heap); @@ -263,7 +263,10 @@ fn switchint_blocks_cross_backend() { ); let matrix = costs.of(BasicBlockId::new(0))[0]; - assert_eq!(matrix.get(TargetId::Interpreter, TargetId::Embedding), None); + assert_eq!( + matrix.get(TargetId::Interpreter, TargetId::Embedding), + Some(cost!(5)) + ); // data transfer (1) + backend switch E->I (4) = 5 assert_eq!( matrix.get(TargetId::Embedding, TargetId::Interpreter), @@ -336,7 +339,7 @@ fn switchint_edge_targets_are_branch_specific() { assert!( second .get(TargetId::Interpreter, TargetId::Embedding) - .is_none() + .is_some() ); assert!( second diff --git a/libs/@local/hashql/mir/tests/ui/pass/execution/terminator_placement/terminator_placement_snapshot.snap b/libs/@local/hashql/mir/tests/ui/pass/execution/terminator_placement/terminator_placement_snapshot.snap index 41125ca3f68..77616ecf1a6 100644 --- a/libs/@local/hashql/mir/tests/ui/pass/execution/terminator_placement/terminator_placement_snapshot.snap +++ b/libs/@local/hashql/mir/tests/ui/pass/execution/terminator_placement/terminator_placement_snapshot.snap @@ -27,6 +27,6 @@ fn {graph::read::filter@4294967040}(%0: (), %1: Entity) -> Integer { bb0: edge[0]:I->I=0P->I=10P->P=0E->I=6 - edge[1]:I->I=0P->I=8E->I=4E->E=0 + edge[1]:I->I=0I->E=4P->I=8P->E=12E->I=4E->E=0 bb1: bb2: