diff --git a/hugr-core/src/builder/build_traits.rs b/hugr-core/src/builder/build_traits.rs index 1cb8e242e..d04e44d79 100644 --- a/hugr-core/src/builder/build_traits.rs +++ b/hugr-core/src/builder/build_traits.rs @@ -777,8 +777,8 @@ fn wire_up( }); }; - if !OpTag::BasicBlock.is_superset(base.get_optype(src).tag()) - && !OpTag::BasicBlock.is_superset(base.get_optype(src_sibling).tag()) + if !OpTag::ControlFlowChild.is_superset(base.get_optype(src).tag()) + && !OpTag::ControlFlowChild.is_superset(base.get_optype(src_sibling).tag()) { // Add a state order constraint unless one of the nodes is a CFG BasicBlock base.add_other_edge(src, src_sibling); diff --git a/hugr-core/src/hugr/views/root_checked.rs b/hugr-core/src/hugr/views/root_checked.rs index 94ac05242..83d6aa46c 100644 --- a/hugr-core/src/hugr/views/root_checked.rs +++ b/hugr-core/src/hugr/views/root_checked.rs @@ -107,7 +107,7 @@ mod test { r, Err(HugrError::InvalidTag { required: OpTag::Dfg, - actual: ops::OpTag::BasicBlock + actual: ops::OpTag::DataflowBlock }) ); // That didn't do anything: diff --git a/hugr-core/src/ops/controlflow.rs b/hugr-core/src/ops/controlflow.rs index ad60e7b86..d8f7c39bb 100644 --- a/hugr-core/src/ops/controlflow.rs +++ b/hugr-core/src/ops/controlflow.rs @@ -154,7 +154,7 @@ impl NamedOp for ExitBlock { } impl StaticTag for DataflowBlock { - const TAG: OpTag = OpTag::BasicBlock; + const TAG: OpTag = OpTag::DataflowBlock; } impl StaticTag for ExitBlock { diff --git a/hugr-core/src/ops/handle.rs b/hugr-core/src/ops/handle.rs index f7fd31ed8..d7fe16419 100644 --- a/hugr-core/src/ops/handle.rs +++ b/hugr-core/src/ops/handle.rs @@ -154,7 +154,7 @@ impl_nodehandle!(ModuleRootID, OpTag::ModuleRoot); impl_nodehandle!(ModuleID, OpTag::ModuleOp); impl_nodehandle!(ConstID, OpTag::Const); -impl_nodehandle!(BasicBlockID, OpTag::BasicBlock); +impl_nodehandle!(BasicBlockID, OpTag::DataflowBlock); impl NodeHandle for FuncID { const TAG: OpTag = OpTag::Function; diff --git a/hugr-core/src/ops/tag.rs b/hugr-core/src/ops/tag.rs index 9bc55843c..b9edcf84e 100644 --- a/hugr-core/src/ops/tag.rs +++ b/hugr-core/src/ops/tag.rs @@ -67,8 +67,8 @@ pub enum OpTag { /// A leaf operation. Leaf, - /// A control flow basic block. - BasicBlock, + /// A control flow basic block defining a dataflow graph. + DataflowBlock, /// A control flow exit node. BasicBlockExit, } @@ -113,8 +113,8 @@ impl OpTag { OpTag::Function => &[OpTag::ModuleOp, OpTag::StaticOutput], OpTag::Alias => &[OpTag::ScopedDefn], OpTag::FuncDefn => &[OpTag::Function, OpTag::ScopedDefn, OpTag::DataflowParent], - OpTag::BasicBlock => &[OpTag::ControlFlowChild, OpTag::DataflowParent], - OpTag::BasicBlockExit => &[OpTag::BasicBlock], + OpTag::DataflowBlock => &[OpTag::ControlFlowChild, OpTag::DataflowParent], + OpTag::BasicBlockExit => &[OpTag::ControlFlowChild], OpTag::Case => &[OpTag::Any, OpTag::DataflowParent], OpTag::ModuleRoot => &[OpTag::Any], OpTag::Const => &[OpTag::ScopedDefn, OpTag::StaticOutput], @@ -148,7 +148,7 @@ impl OpTag { OpTag::Input => "Input node", OpTag::Output => "Output node", OpTag::FuncDefn => "Function definition", - OpTag::BasicBlock => "Basic block", + OpTag::DataflowBlock => "Basic block containing a dataflow graph", OpTag::BasicBlockExit => "Exit basic block node", OpTag::Case => "Case", OpTag::ModuleRoot => "Module root node", @@ -213,16 +213,20 @@ mod test { assert!(OpTag::None.is_superset(OpTag::None)); assert!(OpTag::ModuleOp.is_superset(OpTag::ModuleOp)); assert!(OpTag::DataflowChild.is_superset(OpTag::DataflowChild)); - assert!(OpTag::BasicBlock.is_superset(OpTag::BasicBlock)); + assert!(OpTag::ControlFlowChild.is_superset(OpTag::ControlFlowChild)); assert!(OpTag::Any.is_superset(OpTag::None)); assert!(OpTag::Any.is_superset(OpTag::ModuleOp)); assert!(OpTag::Any.is_superset(OpTag::DataflowChild)); - assert!(OpTag::Any.is_superset(OpTag::BasicBlock)); + assert!(OpTag::Any.is_superset(OpTag::ControlFlowChild)); assert!(!OpTag::None.is_superset(OpTag::Any)); assert!(!OpTag::None.is_superset(OpTag::ModuleOp)); assert!(!OpTag::None.is_superset(OpTag::DataflowChild)); - assert!(!OpTag::None.is_superset(OpTag::BasicBlock)); + assert!(!OpTag::None.is_superset(OpTag::ControlFlowChild)); + + // Other specific checks + assert!(!OpTag::DataflowParent.is_superset(OpTag::BasicBlockExit)); + assert!(!OpTag::DataflowParent.is_superset(OpTag::Cfg)); } } diff --git a/hugr-core/src/ops/validate.rs b/hugr-core/src/ops/validate.rs index 8f2e077fb..d56818b55 100644 --- a/hugr-core/src/ops/validate.rs +++ b/hugr-core/src/ops/validate.rs @@ -110,7 +110,7 @@ impl ValidateOp for super::CFG { fn validity_flags(&self) -> OpValidityFlags { OpValidityFlags { allowed_children: OpTag::ControlFlowChild, - allowed_first_child: OpTag::BasicBlock, + allowed_first_child: OpTag::DataflowBlock, allowed_second_child: OpTag::BasicBlockExit, requires_children: true, requires_dag: false,