From 7ddb4780fa04f82a236dbb14322c3cbfa6fdc1e6 Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Sun, 14 Jun 2026 01:30:59 -0700 Subject: [PATCH] module::transform::deduce_structural_eq_flags: rewrite to use BoolFixedPointSolver for a massive speedup on large inputs --- .../transform/deduce_structural_eq_flags.rs | 1309 +++------- .../tests/deduce_structural_eq_flags.rs | 2146 +++++++++-------- 2 files changed, 1490 insertions(+), 1965 deletions(-) diff --git a/crates/fayalite/src/module/transform/deduce_structural_eq_flags.rs b/crates/fayalite/src/module/transform/deduce_structural_eq_flags.rs index 009293c..8bb6138 100644 --- a/crates/fayalite/src/module/transform/deduce_structural_eq_flags.rs +++ b/crates/fayalite/src/module/transform/deduce_structural_eq_flags.rs @@ -2,8 +2,8 @@ // See Notices.txt for copyright information use crate::{ - bundle::{BundleField, BundleType}, - enum_::{EnumType, EnumVariant}, + bundle::BundleType, + enum_::EnumType, expr::{ ExprEnum, ToLiteralBits, ops::{ @@ -12,491 +12,139 @@ use crate::{ }, target::TargetBase, }, - intern::{Intern, InternSlice, Interned, MemoizeGeneric}, + intern::{Intern, Interned, Memoize}, module::{ ModuleBody, Stmt, StmtConnect, StmtDeclaration, StmtInstance, StmtReg, StmtWire, transform::visit::{Fold, Folder, Visit, Visitor}, }, prelude::*, util::{ - BitSliceWriteWithBase, HashMap, + HashMap, + bool_fixed_point_solver::{BoolFixedPointSolver, Constraint, Variable}, indented_print::{PushIndent, indented_println}, - union_find_map::{Entry, UnionFindMap}, }, }; use bitvec::{order::Lsb0, view::BitView}; +use hashbrown::hash_map::Entry; use std::{convert::Infallible, fmt}; -#[derive(Copy, Clone, PartialEq, Eq, Hash)] -enum FlagsTree { - Enum { - variants: Interned<[Option>]>, - /// invariant -- if this is true all children must also have [`FlagsTree::assume_padding_is_zeroed()`] return true - assume_padding_is_zeroed: bool, - }, - Bundle { - fields: Interned<[Interned]>, - /// invariant -- if this is true all children must also have [`FlagsTree::assume_padding_is_zeroed()`] return true - assume_padding_is_zeroed: bool, - }, - NoPadding, -} +fn has_enums_with_fields(ty: CanonicalType) -> bool { + #[derive(Copy, Clone, PartialEq, Eq, Hash)] + struct MyMemoize; + impl Memoize for MyMemoize { + type Input = CanonicalType; + type InputOwned = CanonicalType; + type Output = bool; -impl fmt::Debug for FlagsTree { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::Enum { - variants, - assume_padding_is_zeroed, - } => f - .debug_struct("Enum") - .field( - "variants", - &fmt::from_fn(|f| { - f.debug_list() - .entries(variants.iter().map(|variant| { - fmt::from_fn(move |f| match variant { - Some(variant) => variant.fmt(f), - None => f.write_str("None"), - }) - })) - .finish() - }), - ) - .field("assume_padding_is_zeroed", assume_padding_is_zeroed) - .finish(), - Self::Bundle { - fields, - assume_padding_is_zeroed, - } => f - .debug_struct("Bundle") - .field("fields", fields) - .field("assume_padding_is_zeroed", assume_padding_is_zeroed) - .finish(), - Self::NoPadding => f.write_str("NoPadding"), - } - } -} - -#[derive(Copy, Clone, PartialEq, Eq, Hash)] -enum FlagsTreeSourceValue<'a> { - LiteralBits { bits: &'a BitSlice }, - Flags { assume_padding_is_zeroed: bool }, -} - -impl<'a> fmt::Debug for FlagsTreeSourceValue<'a> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::LiteralBits { bits } => f - .debug_struct("LiteralBits") - .field( - "bits", - &fmt::from_fn(|f| write!(f, "{:#b}", BitSliceWriteWithBase(bits))), - ) - .finish(), - Self::Flags { - assume_padding_is_zeroed, - } => f - .debug_struct("Flags") - .field("assume_padding_is_zeroed", assume_padding_is_zeroed) - .finish(), - } - } -} - -#[derive(Copy, Clone, PartialEq, Eq, Hash)] -enum FlagsTreeSourceValueOwned { - LiteralBits { bits: Interned }, - Flags { assume_padding_is_zeroed: bool }, -} - -impl FlagsTreeSourceValueOwned { - fn as_ref(&self) -> FlagsTreeSourceValue<'_> { - match *self { - Self::LiteralBits { ref bits } => FlagsTreeSourceValue::LiteralBits { bits }, - Self::Flags { - assume_padding_is_zeroed, - } => FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed, - }, - } - } -} - -impl<'a> FlagsTreeSourceValue<'a> { - fn to_owned(self) -> FlagsTreeSourceValueOwned { - match self { - Self::LiteralBits { bits } => FlagsTreeSourceValueOwned::LiteralBits { - bits: bits.intern(), - }, - Self::Flags { - assume_padding_is_zeroed, - } => FlagsTreeSourceValueOwned::Flags { - assume_padding_is_zeroed, - }, - } - } - fn visit_array_body>( - self, - element_ty: CanonicalType, - f: impl FnMut(Self) -> T, - ) -> R { - match self { - Self::LiteralBits { bits } => { - let bit_width = element_ty.bit_width(); - if bit_width == 0 { - R::from_iter([]) - } else { - bits.chunks(bit_width) - .map(|bits| Self::LiteralBits { bits }) - .map(f) - .collect() - } - } - Self::Flags { .. } => [self].into_iter().map(f).collect(), - } - } - fn visit_bundle_body>( - self, - bundle: Bundle, - mut f: impl FnMut(usize, &BundleField, Self) -> T, - ) -> R { - match self { - Self::LiteralBits { bits } => bundle - .fields() - .iter() - .enumerate() - .scan(bits, |bundle_bits, (field_index, field)| { - let field_bit_width = field.ty.bit_width(); - let bits; - (bits, *bundle_bits) = bundle_bits.split_at(field_bit_width); - Some(f(field_index, field, Self::LiteralBits { bits })) - }) - .collect(), - Self::Flags { .. } => bundle - .fields() - .iter() - .enumerate() - .map(move |(field_index, field)| f(field_index, field, self)) - .collect(), - } - } - fn visit_enum_body>( - self, - enum_: Enum, - debug_trace: bool, - mut f: impl FnMut(&EnumVariant, Self) -> T, - ) -> (R, bool) { - let collected; - let padding_is_zeroed; - match self { - Self::LiteralBits { bits } => { - let mut discriminant = 0usize; - let discriminant_bit_width = enum_.discriminant_bit_width(); - let (discriminant_bits, bits) = bits.split_at(discriminant_bit_width); - if debug_trace { - indented_println!( - "discriminant_bits={:#b}", - BitSliceWriteWithBase(discriminant_bits) - ); - } - discriminant.view_bits_mut::()[..discriminant_bit_width] - .copy_from_bitslice(discriminant_bits); - let (bits, padding) = bits.split_at( - enum_ - .variants() - .get(discriminant) - .and_then(|variant| variant.ty) - .map_or(0, |variant_ty| variant_ty.bit_width()), - ); - if debug_trace { - indented_println!( - "bits={:#b}\npadding={:#b}", - BitSliceWriteWithBase(bits), - BitSliceWriteWithBase(padding), - ); - } - collected = enum_ - .variants() - .iter() - .enumerate() - .map(|(variant_index, variant)| { - f( - variant, - if variant_index == discriminant { - Self::LiteralBits { bits } - } else { - Self::Flags { - assume_padding_is_zeroed: true, - } - }, - ) - }) - .collect(); - padding_is_zeroed = !padding.any(); - if debug_trace { - indented_println!("padding_is_zeroed={padding_is_zeroed:?}"); - } - } - Self::Flags { - assume_padding_is_zeroed, - } => { - collected = enum_ - .variants() - .iter() - .map(|variant| f(variant, self)) - .collect(); - padding_is_zeroed = assume_padding_is_zeroed; - } - } - (collected, padding_is_zeroed) - } -} - -impl FlagsTree { - fn contains_padding(&self) -> bool { - match self { - Self::NoPadding => false, - Self::Enum { .. } | Self::Bundle { .. } => true, - } - } - fn assume_padding_is_zeroed(&self) -> bool { - match *self { - Self::Enum { - assume_padding_is_zeroed, - .. - } - | Self::Bundle { - assume_padding_is_zeroed, - .. - } => assume_padding_is_zeroed, - Self::NoPadding => true, - } - } - fn new_inner<'a>( - ty: &CanonicalType, - source_value: FlagsTreeSourceValue<'a>, - debug_trace: bool, - ) -> Interned { - let _push_indent; - if debug_trace { - indented_println!("FlagsTree::new_inner()"); - _push_indent = PushIndent::new(); - indented_println!("ty: {ty:?}"); - indented_println!("source_value: {source_value:?}"); - } - let retval = match ty { - CanonicalType::UInt(_) - | CanonicalType::SInt(_) - | CanonicalType::Bool(_) - | CanonicalType::AsyncReset(_) - | CanonicalType::SyncReset(_) - | CanonicalType::Reset(_) - | CanonicalType::Clock(_) - | CanonicalType::PhantomConst(_) - | CanonicalType::DynSimOnly(_) => Self::NoPadding.intern_sized(), - CanonicalType::Array(ty) => { - let mut retval = None; - let element_ty = ty.element(); - let () = - source_value.visit_array_body(element_ty, |source_value| match &mut retval { - Some(retval) => { - *retval = FlagsTree::new(element_ty, source_value, debug_trace) - .merged(*retval) - } - None => retval = Some(Self::new(element_ty, source_value, debug_trace)), - }); - retval.unwrap_or_else(|| Self::NoPadding.intern_sized()) - } - CanonicalType::Enum(ty) => { - let mut expected_bit_width = None; - let mut contains_padding = false; - let mut assume_padding_is_zeroed = true; - let (variants, padding_is_zeroed): (Vec<_>, _) = - source_value.visit_enum_body(*ty, debug_trace, |variant, source_value| { - let (variant_flags_tree, bit_width) = if let Some(variant_ty) = variant.ty { - let variant_flags_tree = - Self::new(variant_ty, source_value, debug_trace); - contains_padding |= variant_flags_tree.contains_padding(); - assume_padding_is_zeroed &= - variant_flags_tree.assume_padding_is_zeroed(); - (Some(variant_flags_tree), variant_ty.bit_width()) - } else { - (None, 0) - }; - if expected_bit_width - .replace(bit_width) - .is_some_and(|v| v != bit_width) - { - contains_padding = true; - } - variant_flags_tree - }); - assume_padding_is_zeroed &= padding_is_zeroed; - if contains_padding { - Self::Enum { - variants: variants.intern_slice(), - assume_padding_is_zeroed, + fn inner(self, input: &Self::Input) -> Self::Output { + match input { + CanonicalType::UInt(_) + | CanonicalType::SInt(_) + | CanonicalType::Bool(_) + | CanonicalType::AsyncReset(_) + | CanonicalType::SyncReset(_) + | CanonicalType::Reset(_) + | CanonicalType::Clock(_) + | CanonicalType::PhantomConst(_) + | CanonicalType::DynSimOnly(_) => false, + CanonicalType::Array(ty) => { + if ty.is_empty() { + false + } else { + has_enums_with_fields(ty.element()) } - .intern_sized() - } else { - Self::NoPadding.intern_sized() } + CanonicalType::Enum(ty) => ty.variants().iter().any(|variant| variant.ty.is_some()), + CanonicalType::Bundle(ty) => ty + .fields() + .iter() + .any(|field| has_enums_with_fields(field.ty)), + CanonicalType::TraceAsString(ty) => has_enums_with_fields(ty.inner_ty()), } - CanonicalType::Bundle(ty) => { - let mut contains_padding = false; - let mut assume_padding_is_zeroed = true; - let fields: Vec<_> = - source_value.visit_bundle_body(*ty, |_field_index, field, source_value| { - let flags_tree = Self::new(field.ty, source_value, debug_trace); - contains_padding |= flags_tree.contains_padding(); - assume_padding_is_zeroed &= flags_tree.assume_padding_is_zeroed(); - flags_tree - }); - if contains_padding { - Self::Bundle { - fields: fields.intern_slice(), - assume_padding_is_zeroed, - } - .intern_sized() - } else { - Self::NoPadding.intern_sized() - } - } - CanonicalType::TraceAsString(ty) => Self::new(ty.inner_ty(), source_value, debug_trace), - }; - if debug_trace { - indented_println!("return: {retval:#?}"); } - retval } - fn new( + MyMemoize.get_owned(ty) +} + +fn is_padding_zeroed(ty: CanonicalType, bits: &BitSlice) -> bool { + #[derive(Copy, Clone, PartialEq, Eq, Hash)] + struct MyMemoize { ty: CanonicalType, - source_value: FlagsTreeSourceValue<'_>, - debug_trace: bool, - ) -> Interned { - #[derive(Copy, Clone, PartialEq, Eq, Hash)] - struct MyMemoize { - debug_trace: bool, - } - enum InputCow<'a> { - Borrowed { - ty: &'a CanonicalType, - source_value: FlagsTreeSourceValue<'a>, - }, - Owned { - ty: CanonicalType, - source_value: FlagsTreeSourceValueOwned, - }, - } - impl MemoizeGeneric for MyMemoize { - type InputRef<'a> = (&'a CanonicalType, FlagsTreeSourceValue<'a>); - type InputOwned = (CanonicalType, FlagsTreeSourceValueOwned); - type InputCow<'a> = InputCow<'a>; - type Output = Interned; - - fn input_eq(a: Self::InputRef<'_>, b: Self::InputRef<'_>) -> bool { - a == b - } - - fn input_borrow(input: &Self::InputOwned) -> Self::InputRef<'_> { - let (ty, source_value) = input; - (ty, source_value.as_ref()) - } - - fn input_cow_into_owned(input: Self::InputCow<'_>) -> Self::InputOwned { - match input { - InputCow::Borrowed { ty, source_value } => (*ty, source_value.to_owned()), - InputCow::Owned { ty, source_value } => (ty, source_value), - } - } - - fn input_cow_borrow<'a>(input: &'a Self::InputCow<'_>) -> Self::InputRef<'a> { - match input { - &InputCow::Borrowed { ty, source_value } => (ty, source_value), - InputCow::Owned { ty, source_value } => (ty, source_value.as_ref()), - } - } - - fn input_cow_from_owned<'a>(input: Self::InputOwned) -> Self::InputCow<'a> { - let (ty, source_value) = input; - InputCow::Owned { ty, source_value } - } - - fn input_cow_from_ref(input: Self::InputRef<'_>) -> Self::InputCow<'_> { - let (ty, source_value) = input; - InputCow::Borrowed { ty, source_value } - } - - fn inner(self, input: Self::InputRef<'_>) -> Self::Output { - let (ty, source_value) = input; - FlagsTree::new_inner(ty, source_value, self.debug_trace) - } - } - MyMemoize { debug_trace }.get((&ty, source_value)) } - #[must_use] - fn merged(self, other: Interned) -> Interned { - if self == *other { - return other; - } - match (self, *other) { - ( - Self::Enum { - variants: l_variants, - assume_padding_is_zeroed: l_assume_padding_is_zeroed, - }, - Self::Enum { - variants: r_variants, - assume_padding_is_zeroed: r_assume_padding_is_zeroed, - }, - ) => { - let variants = Interned::from_iter(l_variants.iter().zip(&r_variants).map( - |(&l_variant, &r_variant)| { - l_variant - .zip(r_variant) - .map(|(l_variant, r_variant)| l_variant.merged(r_variant)) - }, - )); - let assume_padding_is_zeroed = - l_assume_padding_is_zeroed & r_assume_padding_is_zeroed; - Self::Enum { - variants, - assume_padding_is_zeroed, + impl Memoize for MyMemoize { + type Input = BitSlice; + type InputOwned = BitVec; + type Output = bool; + + fn inner(self, bits: &Self::Input) -> Self::Output { + assert_eq!(self.ty.bit_width(), bits.len()); + match self.ty { + CanonicalType::UInt(_) + | CanonicalType::SInt(_) + | CanonicalType::Bool(_) + | CanonicalType::AsyncReset(_) + | CanonicalType::SyncReset(_) + | CanonicalType::Reset(_) + | CanonicalType::Clock(_) + | CanonicalType::PhantomConst(_) + | CanonicalType::DynSimOnly(_) => true, + CanonicalType::Array(ty) => { + if bits.is_empty() { + true + } else { + let element_ty = ty.element(); + bits.chunks(element_ty.bit_width()) + .all(|bits| is_padding_zeroed(element_ty, bits)) + } } - .intern_sized() - } - (Self::Enum { .. }, _) => unreachable!("mismatched types"), - ( - Self::Bundle { - fields: l_fields, - assume_padding_is_zeroed: l_assume_padding_is_zeroed, - }, - Self::Bundle { - fields: r_fields, - assume_padding_is_zeroed: r_assume_padding_is_zeroed, - }, - ) => { - let fields = Interned::from_iter( - l_fields + CanonicalType::Enum(ty) => { + let mut discriminant = 0usize; + let discriminant_bit_width = ty.discriminant_bit_width(); + let (discriminant_bits, bits) = bits.split_at(discriminant_bit_width); + discriminant.view_bits_mut::()[..discriminant_bit_width] + .copy_from_bitslice(discriminant_bits); + if let Some(variant) = ty.variants().get(discriminant) + && let Some(variant_ty) = variant.ty + { + let (bits, padding) = bits.split_at(variant_ty.bit_width()); + !padding.any() && is_padding_zeroed(variant_ty, bits) + } else { + !bits.any() + } + } + CanonicalType::Bundle(ty) => { + ty.fields() .iter() - .zip(&r_fields) - .map(|(&l_field, &r_field)| l_field.merged(r_field)), - ); - let assume_padding_is_zeroed = - l_assume_padding_is_zeroed & r_assume_padding_is_zeroed; - Self::Bundle { - fields, - assume_padding_is_zeroed, + .zip(&ty.field_offsets()) + .all(|(field, offset)| { + is_padding_zeroed( + field.ty, + &bits[offset.bit_width..][..field.ty.bit_width()], + ) + }) } - .intern_sized() - } - (Self::Bundle { .. }, _) => unreachable!("mismatched types"), - (Self::NoPadding, _) => { - unreachable!("NoPadding is always caught by the early return above") + CanonicalType::TraceAsString(ty) => is_padding_zeroed(ty.inner_ty(), bits), } } } + MyMemoize { ty }.get(bits) +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +struct ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: Variable, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +enum ExprVariables { + NoEnumsWithFields, + HasEnumsWithFields(ExprVariablesHasEnumsWithFields), +} + +impl From for ExprVariables { + fn from(v: ExprVariablesHasEnumsWithFields) -> Self { + Self::HasEnumsWithFields(v) + } } #[derive(Copy, Clone)] @@ -662,158 +310,10 @@ fn write_expr_enum_path(expr: &ExprEnum, f: &mut fmt::Formatter<'_>) -> fmt::Res } } -fn display_expr_enum_path(expr: ExprEnum) -> impl fmt::Display { - fmt::from_fn(move |f| write_expr_enum_path(&expr, f)) -} - -fn display_expr_path(expr: impl ToExpr) -> impl fmt::Display { - display_expr_enum_path(*Expr::expr_enum(expr.to_expr())) -} - impl fmt::Display for ExprOrUnknown { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - fn fmt_target_base( - target_base: impl Into, - f: &mut fmt::Formatter<'_>, - ) -> fmt::Result { - write!(f, "{:?}", target_base.into().target_name()) - } match *self { - Self::Expr(expr) => match *Expr::expr_enum(expr) { - ExprEnum::FieldAccess(expr) => { - ExprOrUnknown::Expr(expr.base()).fmt(f)?; - write!(f, ".{}", expr.field_name()) - } - ExprEnum::VariantAccess(expr) => { - ExprOrUnknown::Expr(expr.base()).fmt(f)?; - write!(f, ".<{}>", expr.variant_name()) - } - ExprEnum::ArrayIndex(expr) => { - ExprOrUnknown::Expr(expr.base()).fmt(f)?; - write!(f, "[{}]", expr.element_index()) - } - ExprEnum::DynArrayIndex(expr) => { - ExprOrUnknown::Expr(expr.base()).fmt(f)?; - write!(f, "[...]") - } - ExprEnum::ToTraceAsString(expr) => { - ExprOrUnknown::Expr(expr.inner()).fmt(f)?; - write!(f, ".to_trace_as_string()") - } - ExprEnum::TraceAsStringAsInner(expr) => { - ExprOrUnknown::Expr(expr.arg()).fmt(f)?; - write!(f, ".") - } - ExprEnum::ModuleIO(expr) => fmt_target_base(expr, f), - ExprEnum::Instance(expr) => fmt_target_base(expr, f), - ExprEnum::Wire(expr) => fmt_target_base(expr, f), - ExprEnum::Reg(expr) => fmt_target_base(expr, f), - ExprEnum::RegSync(expr) => fmt_target_base(expr, f), - ExprEnum::RegAsync(expr) => fmt_target_base(expr, f), - ExprEnum::MemPort(expr) => fmt_target_base(expr, f), - ExprEnum::FormalInput(expr) => fmt_target_base(expr, f), - - ExprEnum::UIntLiteral(_) - | ExprEnum::SIntLiteral(_) - | ExprEnum::BoolLiteral(_) - | ExprEnum::PhantomConst(_) - | ExprEnum::BundleLiteral(_) - | ExprEnum::ArrayLiteral(_) - | ExprEnum::EnumLiteral(_) - | ExprEnum::Uninit(_) - | ExprEnum::NotU(_) - | ExprEnum::NotS(_) - | ExprEnum::NotB(_) - | ExprEnum::Neg(_) - | ExprEnum::BitAndU(_) - | ExprEnum::BitAndS(_) - | ExprEnum::BitAndB(_) - | ExprEnum::BitOrU(_) - | ExprEnum::BitOrS(_) - | ExprEnum::BitOrB(_) - | ExprEnum::BitXorU(_) - | ExprEnum::BitXorS(_) - | ExprEnum::BitXorB(_) - | ExprEnum::AddU(_) - | ExprEnum::AddS(_) - | ExprEnum::SubU(_) - | ExprEnum::SubS(_) - | ExprEnum::MulU(_) - | ExprEnum::MulS(_) - | ExprEnum::DivU(_) - | ExprEnum::DivS(_) - | ExprEnum::RemU(_) - | ExprEnum::RemS(_) - | ExprEnum::DynShlU(_) - | ExprEnum::DynShlS(_) - | ExprEnum::DynShrU(_) - | ExprEnum::DynShrS(_) - | ExprEnum::FixedShlU(_) - | ExprEnum::FixedShlS(_) - | ExprEnum::FixedShrU(_) - | ExprEnum::FixedShrS(_) - | ExprEnum::CmpLtB(_) - | ExprEnum::CmpLeB(_) - | ExprEnum::CmpGtB(_) - | ExprEnum::CmpGeB(_) - | ExprEnum::CmpEqB(_) - | ExprEnum::CmpNeB(_) - | ExprEnum::CmpLtU(_) - | ExprEnum::CmpLeU(_) - | ExprEnum::CmpGtU(_) - | ExprEnum::CmpGeU(_) - | ExprEnum::CmpEqU(_) - | ExprEnum::CmpNeU(_) - | ExprEnum::CmpLtS(_) - | ExprEnum::CmpLeS(_) - | ExprEnum::CmpGtS(_) - | ExprEnum::CmpGeS(_) - | ExprEnum::CmpEqS(_) - | ExprEnum::CmpNeS(_) - | ExprEnum::CastUIntToUInt(_) - | ExprEnum::CastUIntToSInt(_) - | ExprEnum::CastSIntToUInt(_) - | ExprEnum::CastSIntToSInt(_) - | ExprEnum::CastBoolToUInt(_) - | ExprEnum::CastBoolToSInt(_) - | ExprEnum::CastUIntToBool(_) - | ExprEnum::CastSIntToBool(_) - | ExprEnum::CastBoolToSyncReset(_) - | ExprEnum::CastUIntToSyncReset(_) - | ExprEnum::CastSIntToSyncReset(_) - | ExprEnum::CastBoolToAsyncReset(_) - | ExprEnum::CastUIntToAsyncReset(_) - | ExprEnum::CastSIntToAsyncReset(_) - | ExprEnum::CastSyncResetToBool(_) - | ExprEnum::CastSyncResetToUInt(_) - | ExprEnum::CastSyncResetToSInt(_) - | ExprEnum::CastSyncResetToReset(_) - | ExprEnum::CastAsyncResetToBool(_) - | ExprEnum::CastAsyncResetToUInt(_) - | ExprEnum::CastAsyncResetToSInt(_) - | ExprEnum::CastAsyncResetToReset(_) - | ExprEnum::CastResetToBool(_) - | ExprEnum::CastResetToUInt(_) - | ExprEnum::CastResetToSInt(_) - | ExprEnum::CastBoolToClock(_) - | ExprEnum::CastUIntToClock(_) - | ExprEnum::CastSIntToClock(_) - | ExprEnum::CastClockToBool(_) - | ExprEnum::CastClockToUInt(_) - | ExprEnum::CastClockToSInt(_) - | ExprEnum::ReduceBitAndU(_) - | ExprEnum::ReduceBitAndS(_) - | ExprEnum::ReduceBitOrU(_) - | ExprEnum::ReduceBitOrS(_) - | ExprEnum::ReduceBitXorU(_) - | ExprEnum::ReduceBitXorS(_) - | ExprEnum::SliceUInt(_) - | ExprEnum::SliceSInt(_) - | ExprEnum::CastToBits(_) - | ExprEnum::CastBitsTo(_) - | ExprEnum::StructuralEq(_) - | ExprEnum::SimIoForGlobal(_) => write!(f, "..."), - }, + Self::Expr(expr) => write_expr_path(expr, f), Self::Unknown(_ty) => write!(f, "Unknown(...)"), } } @@ -895,116 +395,95 @@ impl ExprOrUnknown { struct State { root_module: Interned>, debug_trace: bool, - any_changes: bool, - expr_flags: UnionFindMap, Interned>, - exprs_visited: HashMap, bool>, + assume_padding_is_zeroed_solver: BoolFixedPointSolver, + assume_padding_is_zeroed_is_false: Variable, + expr_variables: HashMap, ExprVariables>, modules_visited: HashMap>, bool>, + folded_exprs: HashMap, } impl State { fn new(root_module: Interned>, debug_trace: bool) -> Self { - Self { + let mut assume_padding_is_zeroed_solver = BoolFixedPointSolver::new(true); + let assume_padding_is_zeroed_is_false = assume_padding_is_zeroed_solver.new_variable(); + let mut retval = Self { root_module, debug_trace, - any_changes: false, - expr_flags: UnionFindMap::default(), - exprs_visited: HashMap::default(), + assume_padding_is_zeroed_solver, + assume_padding_is_zeroed_is_false, + expr_variables: HashMap::default(), modules_visited: HashMap::default(), + folded_exprs: HashMap::default(), + }; + retval.assume_padding_is_zeroed_add_constraint(Constraint::MaximallyConstrained { + variable: assume_padding_is_zeroed_is_false, + }); + retval + } + fn assume_padding_is_zeroed_add_constraint(&mut self, constraint: Constraint) { + if self.debug_trace { + indented_println!("assume_padding_is_zeroed_add_constraint: {constraint:?}"); } + self.assume_padding_is_zeroed_solver + .add_constraint(constraint); } - fn merge_expr_flags( - &mut self, - expr: Interned, - new_flags: FlagsTree, - ) -> Interned { - match self.expr_flags.entry(expr) { - Entry::Vacant(entry) => { - let new_flags = new_flags.intern_sized(); - entry.insert(new_flags); - self.any_changes = true; - new_flags - } - Entry::Occupied(mut entry) => { - let merged_flags = new_flags.merged(*entry.get()); - if merged_flags != *entry.get() { - if self.debug_trace { - indented_println!( - "merge_expr_flags({}):\n\ - old flags: {:#?}\n\ - new_flags: {new_flags:#?}\n\ - merged_flags: {merged_flags:#?}", - display_expr_enum_path(*expr), - entry.get(), - ); - } - self.any_changes = true; - } else if self.debug_trace { - if *merged_flags != new_flags { - indented_println!( - "merge_expr_flags({}):\n\ - flags (unchanged): {:#?}\n\ - new_flags: {new_flags:#?}", - display_expr_enum_path(*expr), - entry.get(), - ); - } else { - indented_println!( - "merge_expr_flags({}):\n\ - flags (unchanged): {:#?}", - display_expr_enum_path(*expr), - entry.get(), - ); - } - } - entry.insert(merged_flags); - merged_flags - } - } - } - fn union_exprs( - &mut self, - expr1: Interned, - expr2: Interned, - ) -> Interned { - let (unioned, value) = self - .expr_flags - .union(&expr1, &expr2, |_, v1, _, v2| v1.merged(v2)); - self.any_changes |= unioned; - *value - } - fn visit_expr_or_unknown(&mut self, expr: ExprOrUnknown) -> Interned { + fn visit_expr_or_unknown(&mut self, expr: ExprOrUnknown) -> ExprVariables { match expr { ExprOrUnknown::Expr(expr) => self.visit_canonical_expr(expr), - ExprOrUnknown::Unknown(ty) => FlagsTree::new( - ty, - FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed: false, - }, - self.debug_trace, - ), + ExprOrUnknown::Unknown(ty) => { + if has_enums_with_fields(ty) { + ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: self.assume_padding_is_zeroed_is_false, + } + .into() + } else { + ExprVariables::NoEnumsWithFields + } + } } } fn connect( &mut self, lhs: impl Into>, rhs: impl Into>, - ) -> (Interned, Interned) { + is_bidirectional: bool, + ) { let lhs = lhs.into(); let rhs = rhs.into(); let _push_indent; if self.debug_trace { - indented_println!("connect({lhs}, {rhs}):"); + indented_println!("connect({lhs}, {rhs}, is_bidirectional={is_bidirectional:?}):"); _push_indent = PushIndent::new(); indented_println!("lhs: {lhs:?}"); indented_println!("rhs: {rhs:?}"); } let lhs_ty = lhs.ty(); - let lhs_flags = self.visit_expr_or_unknown(lhs); - let rhs_flags = self.visit_expr_or_unknown(rhs); - if lhs_flags == rhs_flags { - return (lhs_flags, rhs_flags); + let lhs_variables = self.visit_expr_or_unknown(lhs); + let rhs_variables = self.visit_expr_or_unknown(rhs); + let ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: lhs_assume_padding_is_zeroed, + } = match lhs_variables { + ExprVariables::NoEnumsWithFields => return, + ExprVariables::HasEnumsWithFields(v) => v, + }; + let ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: rhs_assume_padding_is_zeroed, + } = match rhs_variables { + ExprVariables::NoEnumsWithFields => unreachable!(), + ExprVariables::HasEnumsWithFields(v) => v, + }; + if is_bidirectional { + self.assume_padding_is_zeroed_add_constraint(Constraint::Equal { + dest: lhs_assume_padding_is_zeroed, + src: rhs_assume_padding_is_zeroed, + }); + } else { + self.assume_padding_is_zeroed_add_constraint(Constraint::And { + dest: lhs_assume_padding_is_zeroed, + src: rhs_assume_padding_is_zeroed, + }); } - let (mut lhs_flags, mut rhs_flags) = match lhs_ty { + match lhs_ty { CanonicalType::UInt(_) | CanonicalType::SInt(_) | CanonicalType::Bool(_) @@ -1014,24 +493,20 @@ impl State { | CanonicalType::Clock(_) | CanonicalType::PhantomConst(_) | CanonicalType::DynSimOnly(_) => { - unreachable!("flags are always FlagsTree::NoPadding") + unreachable!("variables are always ExprVariables::NoEnumsWithFields") } CanonicalType::Array(lhs_ty) => { let lhs = ExprOrUnknown::from_canonical(lhs); let rhs = ExprOrUnknown::::from_canonical(rhs); assert_eq!(lhs_ty.len(), rhs.ty().len()); assert!(lhs_ty.len() > 0); - // FlagsTree treats arrays transparently, so the returned flags don't need to be adjusted. - // All array indexing operations are unioned together so just arbitrarily use index 0 - self.connect(lhs.element(0), rhs.element(0)) + // All array indexing operations are constrained to have equal variables so just arbitrarily use index 0 + self.connect(lhs.element(0), rhs.element(0), is_bidirectional); } CanonicalType::Enum(lhs_ty) => { let lhs = ExprOrUnknown::from_canonical(lhs); let rhs = ExprOrUnknown::::from_canonical(rhs); assert_eq!(lhs_ty.variants().len(), rhs.ty().variants().len()); - let mut lhs_assume_padding_is_zeroed = - lhs_flags.assume_padding_is_zeroed() & rhs_flags.assume_padding_is_zeroed(); - let mut lhs_variants = Vec::with_capacity(lhs_ty.variants().len()); for variant_index in 0..lhs_ty.variants().len() { let lhs_variant = lhs.variant_at_index(variant_index); let rhs_variant = rhs.variant_at_index(variant_index); @@ -1039,29 +514,14 @@ impl State { if let Some(lhs_variant) = lhs_variant && let Some(rhs_variant) = rhs_variant { - let (lhs_field_flags, _rhs_field_flags) = - self.connect(lhs_variant, rhs_variant); - lhs_variants.push(Some(lhs_field_flags)); - lhs_assume_padding_is_zeroed &= lhs_field_flags.assume_padding_is_zeroed(); - } else { - lhs_variants.push(None); + self.connect(lhs_variant, rhs_variant, is_bidirectional); } } - let lhs_flags = FlagsTree::Enum { - variants: lhs_variants.intern_slice(), - assume_padding_is_zeroed: lhs_assume_padding_is_zeroed, - } - .intern_sized(); - (lhs_flags, rhs_flags) } CanonicalType::Bundle(lhs_ty) => { let lhs = ExprOrUnknown::from_canonical(lhs); let rhs = ExprOrUnknown::::from_canonical(rhs); assert_eq!(lhs_ty.fields().len(), rhs.ty().fields().len()); - let mut lhs_assume_padding_is_zeroed = lhs_flags.assume_padding_is_zeroed(); - let mut rhs_assume_padding_is_zeroed = rhs_flags.assume_padding_is_zeroed(); - let mut lhs_fields = Vec::with_capacity(lhs_ty.fields().len()); - let mut rhs_fields = Vec::with_capacity(lhs_ty.fields().len()); for (field_index, (lhs_field, rhs_field)) in lhs_ty .fields() .into_iter() @@ -1069,137 +529,125 @@ impl State { .enumerate() { assert_eq!(lhs_field.flipped, rhs_field.flipped); - let lhs_field_flags; - let rhs_field_flags; if lhs_field.flipped { // flipped, so exchange lhs/rhs when recursively calling connect - (rhs_field_flags, lhs_field_flags) = self.connect( + self.connect( rhs.field_at_index(field_index), lhs.field_at_index(field_index), + is_bidirectional, ); } else { - (lhs_field_flags, rhs_field_flags) = self.connect( + self.connect( lhs.field_at_index(field_index), rhs.field_at_index(field_index), + is_bidirectional, ); } - lhs_fields.push(lhs_field_flags); - rhs_fields.push(rhs_field_flags); - lhs_assume_padding_is_zeroed &= lhs_field_flags.assume_padding_is_zeroed(); - rhs_assume_padding_is_zeroed &= rhs_field_flags.assume_padding_is_zeroed(); } - let lhs_flags = FlagsTree::Bundle { - fields: lhs_fields.intern_slice(), - assume_padding_is_zeroed: lhs_assume_padding_is_zeroed, - } - .intern_sized(); - let rhs_flags = FlagsTree::Bundle { - fields: rhs_fields.intern_slice(), - assume_padding_is_zeroed: rhs_assume_padding_is_zeroed, - } - .intern_sized(); - (lhs_flags, rhs_flags) } CanonicalType::TraceAsString(_) => { let lhs = ExprOrUnknown::from_canonical(lhs); let rhs = ExprOrUnknown::from_canonical(rhs); // FlagsTree treats TraceAsString transparently, so the returned flags don't need to be adjusted. // this expression and the inner expression are unioned together - self.connect(lhs.inner(), rhs.inner()) + self.connect(lhs.inner(), rhs.inner(), is_bidirectional) } - }; - if let ExprOrUnknown::Expr(lhs) = lhs { - lhs_flags = self.merge_expr_flags(Expr::expr_enum(lhs), *lhs_flags); } - if let ExprOrUnknown::Expr(rhs) = rhs { - rhs_flags = self.merge_expr_flags(Expr::expr_enum(rhs), *rhs_flags); - } - let retval = (lhs_flags, rhs_flags); - if self.debug_trace { - indented_println!("returned: {retval:#?}"); - } - retval } - fn visit_canonical_expr(&mut self, expr: Expr) -> Interned { + fn visit_canonical_expr(&mut self, expr: Expr) -> ExprVariables { + let _push_indent; let expr_enum = Expr::expr_enum(expr); let ty = expr.ty(); - let visited = self.exprs_visited.entry(expr_enum).or_insert(false); - let flags = *self.expr_flags.entry(expr_enum).or_insert_with(|| { - self.any_changes = true; - FlagsTree::new( - ty, - FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed: true, - }, - self.debug_trace, - ) - }); - if std::mem::replace(visited, true) { - return flags; + let retval; + match self.expr_variables.entry(expr_enum) { + Entry::Occupied(entry) => return *entry.get(), + Entry::Vacant(entry) => { + if self.debug_trace { + indented_println!( + "visit_canonical_expr({}):", + fmt::from_fn(|f| write_expr_path(expr, f)), + ); + _push_indent = PushIndent::new(); + } + if has_enums_with_fields(ty) { + let assume_padding_is_zeroed = + self.assume_padding_is_zeroed_solver.new_variable(); + retval = ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed, + }; + if self.debug_trace { + indented_println!("{retval:?}"); + } + entry.insert(retval.into()); + let Ok(()) = expr_enum.default_visit(self); + } else { + let retval = ExprVariables::NoEnumsWithFields; + if self.debug_trace { + indented_println!("{retval:?}"); + } + entry.insert(retval); + let Ok(()) = expr_enum.default_visit(self); + return retval; + } + } } - let handle_array_index = |this: &mut Self, base: Expr| -> FlagsTree { - this.visit_canonical_expr(Expr::canonical(base)); - // FlagsTree treats arrays transparently, so just union them together. - *this.union_exprs(Expr::expr_enum(base), expr_enum) + if let Ok(bits) = expr_enum.to_literal_bits() { + let ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed, + } = retval; + if !is_padding_zeroed(ty, &bits) { + self.assume_padding_is_zeroed_add_constraint(Constraint::MaximallyConstrained { + variable: assume_padding_is_zeroed, + }); + } + return retval.into(); + } + let handle_array_index = |this: &mut Self, base: Expr| { + match this.visit_canonical_expr(Expr::canonical(base)) { + ExprVariables::NoEnumsWithFields => unreachable!(), + ExprVariables::HasEnumsWithFields(ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: src, + }) => this.assume_padding_is_zeroed_add_constraint(Constraint::Equal { + dest: retval.assume_padding_is_zeroed, + src, + }), + } + if !base.ty().is_empty() { + this.connect(ArrayIndex::new(base, 0).to_expr(), expr, true); + } }; - let handle_reg = |this: &mut Self, init: Option>| -> FlagsTree { + let handle_reg = |this: &mut Self, init: Option>| { let init = match init { Some(init) => ExprOrUnknown::Expr(init), None => ExprOrUnknown::Unknown(ty), }; - let (flags, _) = this.connect(ExprOrUnknown::Expr(expr), init); - *flags + this.connect(ExprOrUnknown::Expr(expr), init, false); }; - let literal_bits = expr_enum.to_literal_bits(); - let flags = match *expr_enum { - _ if literal_bits.is_ok() => { - let Ok(bits) = &literal_bits else { - unreachable!(); - }; - *FlagsTree::new( - ty, - FlagsTreeSourceValue::LiteralBits { bits }, - self.debug_trace, - ) - } + match *expr_enum { ExprEnum::UIntLiteral(_) | ExprEnum::SIntLiteral(_) | ExprEnum::BoolLiteral(_) - | ExprEnum::PhantomConst(_) => *flags, + | ExprEnum::PhantomConst(_) => unreachable!("has no enums with fields"), ExprEnum::BundleLiteral(bundle_literal) => { let expr = Expr::::from_canonical(expr); - let ty = bundle_literal.ty(); - let mut assume_padding_is_zeroed = flags.assume_padding_is_zeroed(); - let mut fields = Vec::with_capacity(ty.fields().len()); - for (field_index, field) in ty.fields().into_iter().enumerate() { + for (field_index, field) in bundle_literal.ty().fields().into_iter().enumerate() { assert!(!field.flipped); - let (field_flags, _) = self.connect( - FieldAccess::new_by_index(expr, field_index).to_expr(), - bundle_literal.field_values()[field_index], - ); - fields.push(field_flags); - assume_padding_is_zeroed &= field_flags.assume_padding_is_zeroed(); - } - if let FlagsTree::NoPadding = *flags { - *flags - } else { - FlagsTree::Bundle { - fields: fields.intern_slice(), - assume_padding_is_zeroed, - } + let field_expr = FieldAccess::new_by_index(expr, field_index).to_expr(); + self.visit_canonical_expr(field_expr); + self.connect(field_expr, bundle_literal.field_values()[field_index], true); } } ExprEnum::ArrayLiteral(array_literal) => { let expr = Expr::::from_canonical(expr); - for (element_index, element_value) in - array_literal.element_values().into_iter().enumerate() - { - let array_index = ArrayIndex::new(expr, element_index).to_expr(); - self.visit_canonical_expr(array_index); - self.union_exprs(expr_enum, Expr::expr_enum(array_index)); - self.connect(array_index, element_value); + for element_index in 0..array_literal.ty().len() { + let element_expr = ArrayIndex::new(expr, element_index).to_expr(); + self.visit_canonical_expr(element_expr); + self.connect( + element_expr, + array_literal.element_values()[element_index], + false, + ); } - *flags } ExprEnum::EnumLiteral(enum_literal) => { let expr = Expr::::from_canonical(expr); @@ -1207,17 +655,10 @@ impl State { VariantAccess::new_by_index(expr, enum_literal.variant_index()).to_expr(); self.visit_canonical_expr(variant_access); if let Some(variant_value) = enum_literal.variant_value() { - self.connect(variant_access, variant_value); + self.connect(variant_access, variant_value, true); } - *flags } - ExprEnum::Uninit(_) => *FlagsTree::new( - ty, - FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed: false, - }, - self.debug_trace, - ), + ExprEnum::Uninit(_) => self.connect(expr, ExprOrUnknown::Unknown(ty), false), ExprEnum::NotU(_) | ExprEnum::NotS(_) | ExprEnum::NotB(_) @@ -1297,78 +738,31 @@ impl State { | ExprEnum::CastSIntToClock(_) | ExprEnum::CastClockToBool(_) | ExprEnum::CastClockToUInt(_) - | ExprEnum::CastClockToSInt(_) => *flags, + | ExprEnum::CastClockToSInt(_) => {} ExprEnum::FieldAccess(field_access) => { - let base_flags = self.visit_canonical_expr(Expr::canonical(field_access.base())); - match *base_flags { - FlagsTree::Enum { .. } => unreachable!(), - FlagsTree::Bundle { - fields, - assume_padding_is_zeroed, - } => { - let field_flags = fields[field_access.field_index()]; - let flags = field_flags.merged(flags); - if flags != field_flags { - self.merge_expr_flags( - Expr::expr_enum(field_access.base()), - FlagsTree::Bundle { - fields: fields - .iter() - .enumerate() - .map(|(i, field)| { - if i == field_access.field_index() { - flags - } else { - *field - } - }) - .collect(), - assume_padding_is_zeroed: assume_padding_is_zeroed - & flags.assume_padding_is_zeroed(), - }, - ); - } - *flags + match self.visit_canonical_expr(Expr::canonical(field_access.base())) { + ExprVariables::NoEnumsWithFields => unreachable!(), + ExprVariables::HasEnumsWithFields(ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: dest, + }) => { + self.assume_padding_is_zeroed_add_constraint(Constraint::And { + dest, + src: retval.assume_padding_is_zeroed, + }); } - FlagsTree::NoPadding => *flags, } } ExprEnum::VariantAccess(variant_access) => { - let base_flags = self.visit_canonical_expr(Expr::canonical(variant_access.base())); - match *base_flags { - FlagsTree::Enum { - variants, - assume_padding_is_zeroed, - } => { - if let Some(variant_flags) = variants[variant_access.variant_index()] { - let flags = variant_flags.merged(flags); - if flags != variant_flags { - self.merge_expr_flags( - Expr::expr_enum(variant_access.base()), - FlagsTree::Enum { - variants: variants - .iter() - .enumerate() - .map(|(i, field)| { - if i == variant_access.variant_index() { - Some(flags) - } else { - *field - } - }) - .collect(), - assume_padding_is_zeroed: assume_padding_is_zeroed - & flags.assume_padding_is_zeroed(), - }, - ); - } - *flags - } else { - *flags - } + match self.visit_canonical_expr(Expr::canonical(variant_access.base())) { + ExprVariables::NoEnumsWithFields => unreachable!(), + ExprVariables::HasEnumsWithFields(ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: dest, + }) => { + self.assume_padding_is_zeroed_add_constraint(Constraint::And { + dest, + src: retval.assume_padding_is_zeroed, + }); } - FlagsTree::Bundle { .. } => unreachable!(), - FlagsTree::NoPadding => *flags, } } ExprEnum::ArrayIndex(expr) => handle_array_index(self, expr.base()), @@ -1381,26 +775,24 @@ impl State { | ExprEnum::ReduceBitXorS(_) | ExprEnum::SliceUInt(_) | ExprEnum::SliceSInt(_) - | ExprEnum::CastToBits(_) => *flags, - ExprEnum::CastBitsTo(_) => *FlagsTree::new( - ty, - FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed: false, - }, - self.debug_trace, - ), + | ExprEnum::CastToBits(_) => {} + ExprEnum::CastBitsTo(_) => self.connect(expr, ExprOrUnknown::Unknown(ty), false), ExprEnum::ToTraceAsString(expr) => { - self.visit_canonical_expr(Expr::canonical(expr.inner())); - // FlagsTree treats TraceAsString transparently, so just union them together. - *self.union_exprs(Expr::expr_enum(expr.inner()), expr_enum) + self.visit_canonical_expr(expr.inner()); } ExprEnum::TraceAsStringAsInner(expr) => { - self.visit_canonical_expr(Expr::canonical(expr.arg())); - // FlagsTree treats TraceAsString transparently, so just union them together. - *self.union_exprs(Expr::expr_enum(expr.arg()), expr_enum) + match self.visit_canonical_expr(Expr::canonical(expr.arg())) { + ExprVariables::NoEnumsWithFields => unreachable!(), + ExprVariables::HasEnumsWithFields(ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: src, + }) => self.assume_padding_is_zeroed_add_constraint(Constraint::Equal { + dest: retval.assume_padding_is_zeroed, + src, + }), + }; } - ExprEnum::StructuralEq(_) => *flags, - ExprEnum::ModuleIO(_) => *flags, + ExprEnum::StructuralEq(_) => {} + ExprEnum::ModuleIO(_) => {} ExprEnum::Instance(instance) => { let expr = Expr::::from_canonical(expr); for (field_index, module_io) in @@ -1408,37 +800,20 @@ impl State { { let module_io = module_io.module_io.to_expr(); let field_access = FieldAccess::new_by_index(expr, field_index).to_expr(); - self.visit_canonical_expr(module_io); - self.visit_canonical_expr(field_access); - self.union_exprs(Expr::expr_enum(field_access), Expr::expr_enum(module_io)); + self.connect(module_io, field_access, true); } - *flags } - ExprEnum::Wire(_) => *flags, + ExprEnum::Wire(_) => {} ExprEnum::Reg(reg) => handle_reg(self, reg.init()), ExprEnum::RegSync(reg) => handle_reg(self, reg.init()), ExprEnum::RegAsync(reg) => handle_reg(self, reg.init()), - ExprEnum::MemPort(_) => *FlagsTree::new( - ty, - FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed: false, - }, - self.debug_trace, - ), - ExprEnum::FormalInput(_) => *FlagsTree::new( - ty, - FlagsTreeSourceValue::Flags { - assume_padding_is_zeroed: false, - }, - self.debug_trace, - ), + ExprEnum::MemPort(_) => self.connect(expr, ExprOrUnknown::Unknown(ty), false), + ExprEnum::FormalInput(_) => self.connect(expr, ExprOrUnknown::Unknown(ty), false), ExprEnum::SimIoForGlobal(_) => { unreachable!("Module is known to not contain SimIoForGlobal from validation") } - }; - self.merge_expr_flags(expr_enum, flags); - let Ok(()) = expr_enum.default_visit(self); - *self.expr_flags.find_mut(&expr_enum) + } + retval.into() } } @@ -1483,7 +858,7 @@ impl Visitor for State { rhs, source_location: _, }) => { - self.connect(lhs, rhs); + self.connect(lhs, rhs, false); } Stmt::Formal(_) | Stmt::If(_) | Stmt::Match(_) => stmt.default_visit(self)?, Stmt::Declaration(stmt) => self.visit_stmt_declaration(stmt)?, @@ -1497,6 +872,11 @@ impl Visitor for State { if std::mem::replace(visited, true) { return Ok(()); } + let _push_indent; + if self.debug_trace { + indented_println!("visit_module({})", module.name()); + _push_indent = PushIndent::new(); + } let external = match module.body() { ModuleBody::Normal(_) => false, ModuleBody::Extern(_) => true, @@ -1507,9 +887,9 @@ impl Visitor for State { let expr = module_io.module_io.to_expr(); let mut connect_unknown = |is_lhs| { if is_lhs { - self.connect(expr, ExprOrUnknown::Unknown(expr.ty())); + self.connect(expr, ExprOrUnknown::Unknown(expr.ty()), false); } else { - self.connect(ExprOrUnknown::Unknown(expr.ty()), expr); + self.connect(ExprOrUnknown::Unknown(expr.ty()), expr, false); } }; // all main/external module I/O can have non-zeroed padding @@ -1531,10 +911,33 @@ impl Visitor for State { impl Folder for State { type Error = Infallible; fn fold_structural_eq(&mut self, v: StructuralEq) -> Result { - let lhs_flags = *self.expr_flags.find_mut(&Expr::expr_enum(v.lhs())); - let rhs_flags = *self.expr_flags.find_mut(&Expr::expr_enum(v.rhs())); + let mut input_flags = |expr: Expr| -> StructuralEqFlags { + match self.expr_variables[&Expr::expr_enum(expr)] { + ExprVariables::NoEnumsWithFields => StructuralEqFlags { + assume_padding_is_zeroed: true, + }, + ExprVariables::HasEnumsWithFields(ExprVariablesHasEnumsWithFields { + assume_padding_is_zeroed: assume_padding_is_zeroed_var, + }) => { + let assume_padding_is_zeroed = self + .assume_padding_is_zeroed_solver + .value(assume_padding_is_zeroed_var); + if self.debug_trace { + indented_println!( + "fold_structural_eq::input_flags({}): {assume_padding_is_zeroed_var} => {assume_padding_is_zeroed:?}", + fmt::from_fn(|f| write_expr_path(expr, f)), + ); + } + StructuralEqFlags { + assume_padding_is_zeroed, + } + } + } + }; + let lhs_flags = input_flags(v.lhs()); + let rhs_flags = input_flags(v.rhs()); let inputs_assume_padding_is_zeroed = - lhs_flags.assume_padding_is_zeroed() & rhs_flags.assume_padding_is_zeroed(); + lhs_flags.assume_padding_is_zeroed & rhs_flags.assume_padding_is_zeroed; let new_lhs = v.lhs().fold(self)?; let new_rhs = v.rhs().fold(self)?; let StructuralEqFlags { @@ -1549,6 +952,14 @@ impl Folder for State { }, )) } + fn fold_expr_enum(&mut self, v: ExprEnum) -> Result { + if let Some(&retval) = self.folded_exprs.get(&v) { + return Ok(retval); + } + let retval = v.default_fold(self)?; + self.folded_exprs.insert(v, retval); + Ok(retval) + } } pub fn deduce_structural_eq_flags(module: Interned>) -> Interned> { @@ -1567,36 +978,30 @@ pub fn deduce_structural_eq_flags_with_debug_tracing( return *retval; } drop(cache); - // the algorithm proceeds in two stages: - // 1. Visitor for State: a fixed-point data-flow algorithm to determine what flags should be - // 2. Folder for State: transforming the StructuralEq operations to have the deduced flags + // the algorithm proceeds in three stages: + // 1. Visitor for State: build a BoolFixedPointSolver with all the variables and constraints to determine what flags should be + // 2. BoolFixedPointSolver solves for the variables + // 3. Folder for State: transforming the StructuralEq operations to have the deduced flags let mut state = State::new(module, debug_trace); - let mut loops = 0; - const LOOP_LIMIT: u32 = 10000; - loop { - loops += 1; - let Ok(()) = module.visit(&mut state); - if loops > LOOP_LIMIT { - panic!("deduce_structural_eq_flags: looped too many times! state:\n{state:#?}"); - } - let State { - root_module: _, - debug_trace: _, - any_changes, - expr_flags: _, - exprs_visited: expr_visited, - modules_visited: module_visited, - } = &mut state; - if !std::mem::replace(any_changes, false) { - break; - } - expr_visited.values_mut().for_each(|v| *v = false); - module_visited.values_mut().for_each(|v| *v = false); - } if debug_trace { - indented_println!("{state:#?}"); + indented_println!("deduce_structural_eq_flags_with_debug_tracing: start"); + } + let Ok(()) = module.visit(&mut state); + if debug_trace { + indented_println!( + "deduce_structural_eq_flags_with_debug_tracing: added variables and constraints" + ); + } + state.assume_padding_is_zeroed_solver.solve(); + if debug_trace { + indented_println!("deduce_structural_eq_flags_with_debug_tracing: solved"); } let Ok(retval) = module.fold(&mut state); + if debug_trace { + indented_println!( + "deduce_structural_eq_flags_with_debug_tracing: transformed all StructuralEq operations" + ); + } CACHE .lock() .expect("not poisoned") diff --git a/crates/fayalite/tests/deduce_structural_eq_flags.rs b/crates/fayalite/tests/deduce_structural_eq_flags.rs index 4633132..1d43a0c 100644 --- a/crates/fayalite/tests/deduce_structural_eq_flags.rs +++ b/crates/fayalite/tests/deduce_structural_eq_flags.rs @@ -1010,7 +1010,7 @@ circuit check_deduce_structural_eq_flags_parent: } connects! { - "check_deduce_structural_eq_flags_parent::parent_out.opt_unit": true, + "check_deduce_structural_eq_flags_parent::parent_out.opt_unit": false, "check_deduce_structural_eq_flags_parent::parent_out.opt_unit_flip": true, "check_deduce_structural_eq_flags_parent::parent_out.opt_bool": false, "check_deduce_structural_eq_flags_parent::parent_out.opt_bool_flip": true, @@ -1020,7 +1020,7 @@ circuit check_deduce_structural_eq_flags_parent: "check_deduce_structural_eq_flags_parent::parent_out.array_opt_bool_flip": true, "check_deduce_structural_eq_flags_parent::parent_out.struct_opt_bool": false, "check_deduce_structural_eq_flags_parent::parent_out.struct_opt_bool_flip": true, - "check_deduce_structural_eq_flags_parent::parent_zeros_out.opt_unit": true, + "check_deduce_structural_eq_flags_parent::parent_zeros_out.opt_unit": false, "check_deduce_structural_eq_flags_parent::parent_zeros_out.opt_unit_flip": true, "check_deduce_structural_eq_flags_parent::parent_zeros_out.opt_bool": false, "check_deduce_structural_eq_flags_parent::parent_zeros_out.opt_bool_flip": true, @@ -1030,7 +1030,7 @@ circuit check_deduce_structural_eq_flags_parent: "check_deduce_structural_eq_flags_parent::parent_zeros_out.array_opt_bool_flip": true, "check_deduce_structural_eq_flags_parent::parent_zeros_out.struct_opt_bool": false, "check_deduce_structural_eq_flags_parent::parent_zeros_out.struct_opt_bool_flip": true, - "check_deduce_structural_eq_flags_parent::parent_alternating_out.opt_unit": true, + "check_deduce_structural_eq_flags_parent::parent_alternating_out.opt_unit": false, "check_deduce_structural_eq_flags_parent::parent_alternating_out.opt_unit_flip": true, "check_deduce_structural_eq_flags_parent::parent_alternating_out.opt_bool": false, "check_deduce_structural_eq_flags_parent::parent_alternating_out.opt_bool_flip": false, @@ -1040,7 +1040,7 @@ circuit check_deduce_structural_eq_flags_parent: "check_deduce_structural_eq_flags_parent::parent_alternating_out.array_opt_bool_flip": false, "check_deduce_structural_eq_flags_parent::parent_alternating_out.struct_opt_bool": false, "check_deduce_structural_eq_flags_parent::parent_alternating_out.struct_opt_bool_flip": false, - "check_deduce_structural_eq_flags_parent::extern_child_out.opt_unit": true, + "check_deduce_structural_eq_flags_parent::extern_child_out.opt_unit": false, "check_deduce_structural_eq_flags_parent::extern_child_out.opt_unit_flip": true, "check_deduce_structural_eq_flags_parent::extern_child_out.opt_bool": false, "check_deduce_structural_eq_flags_parent::extern_child_out.opt_bool_flip": true, @@ -1971,6 +1971,10 @@ circuit check_deduce_structural_eq_flags_parent: wire __enum_structural_eq_22: UInt<1> @[module-XXXXXXXXXX.rs 1:1] wire __enum_structural_eq_23: UInt<1> @[module-XXXXXXXXXX.rs 1:1] wire __enum_structural_eq_24: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_25: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_26: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_27: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_28: UInt<1> @[module-XXXXXXXXXX.rs 1:1] inst extern_child of check_deduce_structural_eq_flags_extern_child @[module-XXXXXXXXXX.rs 10:1] inst child of check_deduce_structural_eq_flags_child @[module-XXXXXXXXXX.rs 11:1] wire _bundle_literal_expr: Ty1 @@ -1979,8 +1983,9 @@ circuit check_deduce_structural_eq_flags_parent: invalidate _bundle_literal_expr_1 connect _bundle_literal_expr.body, UInt<0>(0) connect io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] + connect parent_out.opt_unit, __enum_structural_eq @[module-XXXXXXXXXX.rs 13:1] wire _cast_enum_to_bits_expr: UInt<1> - match io.opt_unit.tag: + match io.opt_unit_flip.tag: HdlNone: connect _cast_enum_to_bits_expr, UInt<1>(0) HdlSome: @@ -1992,37 +1997,28 @@ circuit check_deduce_structural_eq_flags_parent: HdlSome: connect _cast_enum_to_bits_expr_1, UInt<1>(1) wire _bundle_structural_eq: UInt<1> - connect _bundle_structural_eq, and(eq(_cast_enum_to_bits_expr, _cast_enum_to_bits_expr_1), eq(io.opt_unit.body, _bundle_literal_expr.body)) - connect parent_out.opt_unit, _bundle_structural_eq @[module-XXXXXXXXXX.rs 13:1] - wire _cast_enum_to_bits_expr_2: UInt<1> - match io.opt_unit_flip.tag: - HdlNone: - connect _cast_enum_to_bits_expr_2, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_2, UInt<1>(1) - wire _bundle_structural_eq_1: UInt<1> - connect _bundle_structural_eq_1, and(eq(_cast_enum_to_bits_expr_2, _cast_enum_to_bits_expr_1), eq(io.opt_unit_flip.body, _bundle_literal_expr.body)) - connect parent_out.opt_unit_flip, _bundle_structural_eq_1 @[module-XXXXXXXXXX.rs 13:1] + connect _bundle_structural_eq, and(eq(_cast_enum_to_bits_expr, _cast_enum_to_bits_expr_1), eq(io.opt_unit_flip.body, _bundle_literal_expr.body)) + connect parent_out.opt_unit_flip, _bundle_structural_eq @[module-XXXXXXXXXX.rs 13:1] wire _bundle_literal_expr_2: Ty2 connect _bundle_literal_expr_2.tag, {|HdlNone, HdlSome|}(HdlSome) connect _bundle_literal_expr_2.body, UInt<1>(0h1) connect io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] - connect parent_out.opt_bool, __enum_structural_eq @[module-XXXXXXXXXX.rs 14:1] - wire _cast_enum_to_bits_expr_3: UInt<1> + connect parent_out.opt_bool, __enum_structural_eq_1 @[module-XXXXXXXXXX.rs 14:1] + wire _cast_enum_to_bits_expr_2: UInt<1> match io.opt_bool_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_2, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_2, UInt<1>(1) + wire _cast_enum_to_bits_expr_3: UInt<1> + match _bundle_literal_expr_2.tag: HdlNone: connect _cast_enum_to_bits_expr_3, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_3, UInt<1>(1) - wire _cast_enum_to_bits_expr_4: UInt<1> - match _bundle_literal_expr_2.tag: - HdlNone: - connect _cast_enum_to_bits_expr_4, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_4, UInt<1>(1) - wire _bundle_structural_eq_2: UInt<1> - connect _bundle_structural_eq_2, and(eq(_cast_enum_to_bits_expr_3, _cast_enum_to_bits_expr_4), eq(io.opt_bool_flip.body, _bundle_literal_expr_2.body)) - connect parent_out.opt_bool_flip, _bundle_structural_eq_2 @[module-XXXXXXXXXX.rs 14:1] + wire _bundle_structural_eq_1: UInt<1> + connect _bundle_structural_eq_1, and(eq(_cast_enum_to_bits_expr_2, _cast_enum_to_bits_expr_3), eq(io.opt_bool_flip.body, _bundle_literal_expr_2.body)) + connect parent_out.opt_bool_flip, _bundle_structural_eq_1 @[module-XXXXXXXXXX.rs 14:1] wire _bundle_literal_expr_3: Ty2 connect _bundle_literal_expr_3.tag, {|HdlNone, HdlSome|}(HdlSome) wire _cast_bundle_to_bits_expr: Ty7 @@ -2032,22 +2028,22 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_to_bits_expr, cat(_cast_bundle_to_bits_expr.body, _cast_bundle_to_bits_expr.tag) connect _bundle_literal_expr_3.body, _cast_to_bits_expr connect io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] - connect parent_out.opt_opt_unit, __enum_structural_eq_1 @[module-XXXXXXXXXX.rs 15:1] - wire _cast_enum_to_bits_expr_5: UInt<1> + connect parent_out.opt_opt_unit, __enum_structural_eq_2 @[module-XXXXXXXXXX.rs 15:1] + wire _cast_enum_to_bits_expr_4: UInt<1> match io.opt_opt_unit_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_4, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_4, UInt<1>(1) + wire _cast_enum_to_bits_expr_5: UInt<1> + match _bundle_literal_expr_3.tag: HdlNone: connect _cast_enum_to_bits_expr_5, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_5, UInt<1>(1) - wire _cast_enum_to_bits_expr_6: UInt<1> - match _bundle_literal_expr_3.tag: - HdlNone: - connect _cast_enum_to_bits_expr_6, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_6, UInt<1>(1) - wire _bundle_structural_eq_3: UInt<1> - connect _bundle_structural_eq_3, and(eq(_cast_enum_to_bits_expr_5, _cast_enum_to_bits_expr_6), eq(io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) - connect parent_out.opt_opt_unit_flip, _bundle_structural_eq_3 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_2: UInt<1> + connect _bundle_structural_eq_2, and(eq(_cast_enum_to_bits_expr_4, _cast_enum_to_bits_expr_5), eq(io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) + connect parent_out.opt_opt_unit_flip, _bundle_structural_eq_2 @[module-XXXXXXXXXX.rs 15:1] wire _array_literal_expr: Ty2[2] wire _bundle_literal_expr_4: Ty2 connect _bundle_literal_expr_4.tag, {|HdlNone, HdlSome|}(HdlSome) @@ -2055,56 +2051,56 @@ circuit check_deduce_structural_eq_flags_parent: connect _array_literal_expr[0], _bundle_literal_expr_4 connect _array_literal_expr[1], _bundle_literal_expr_2 connect io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - connect parent_out.array_opt_bool, and(__enum_structural_eq_2, __enum_structural_eq_3) @[module-XXXXXXXXXX.rs 16:1] - wire _cast_enum_to_bits_expr_7: UInt<1> + connect parent_out.array_opt_bool, and(__enum_structural_eq_3, __enum_structural_eq_4) @[module-XXXXXXXXXX.rs 16:1] + wire _cast_enum_to_bits_expr_6: UInt<1> match io.array_opt_bool_flip[0].tag: + HdlNone: + connect _cast_enum_to_bits_expr_6, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_6, UInt<1>(1) + wire _cast_enum_to_bits_expr_7: UInt<1> + match _array_literal_expr[0].tag: HdlNone: connect _cast_enum_to_bits_expr_7, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_7, UInt<1>(1) + wire _bundle_structural_eq_3: UInt<1> + connect _bundle_structural_eq_3, and(eq(_cast_enum_to_bits_expr_6, _cast_enum_to_bits_expr_7), eq(io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) wire _cast_enum_to_bits_expr_8: UInt<1> - match _array_literal_expr[0].tag: + match io.array_opt_bool_flip[1].tag: HdlNone: connect _cast_enum_to_bits_expr_8, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_8, UInt<1>(1) - wire _bundle_structural_eq_4: UInt<1> - connect _bundle_structural_eq_4, and(eq(_cast_enum_to_bits_expr_7, _cast_enum_to_bits_expr_8), eq(io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) wire _cast_enum_to_bits_expr_9: UInt<1> - match io.array_opt_bool_flip[1].tag: + match _array_literal_expr[1].tag: HdlNone: connect _cast_enum_to_bits_expr_9, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_9, UInt<1>(1) - wire _cast_enum_to_bits_expr_10: UInt<1> - match _array_literal_expr[1].tag: - HdlNone: - connect _cast_enum_to_bits_expr_10, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_10, UInt<1>(1) - wire _bundle_structural_eq_5: UInt<1> - connect _bundle_structural_eq_5, and(eq(_cast_enum_to_bits_expr_9, _cast_enum_to_bits_expr_10), eq(io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) - connect parent_out.array_opt_bool_flip, and(_bundle_structural_eq_4, _bundle_structural_eq_5) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_4: UInt<1> + connect _bundle_structural_eq_4, and(eq(_cast_enum_to_bits_expr_8, _cast_enum_to_bits_expr_9), eq(io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) + connect parent_out.array_opt_bool_flip, and(_bundle_structural_eq_3, _bundle_structural_eq_4) @[module-XXXXXXXXXX.rs 16:1] wire _bundle_literal_expr_5: Ty3 connect _bundle_literal_expr_5.`0`, _bundle_literal_expr_2 connect _bundle_literal_expr_5.`1`, UInt<1>(0h1) connect io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - connect parent_out.struct_opt_bool, and(__enum_structural_eq_4, eq(io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _cast_enum_to_bits_expr_11: UInt<1> + connect parent_out.struct_opt_bool, and(__enum_structural_eq_5, eq(io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _cast_enum_to_bits_expr_10: UInt<1> match io.struct_opt_bool_flip.`0`.tag: + HdlNone: + connect _cast_enum_to_bits_expr_10, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_10, UInt<1>(1) + wire _cast_enum_to_bits_expr_11: UInt<1> + match _bundle_literal_expr_5.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_11, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_11, UInt<1>(1) - wire _cast_enum_to_bits_expr_12: UInt<1> - match _bundle_literal_expr_5.`0`.tag: - HdlNone: - connect _cast_enum_to_bits_expr_12, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_12, UInt<1>(1) - wire _bundle_structural_eq_6: UInt<1> - connect _bundle_structural_eq_6, and(eq(_cast_enum_to_bits_expr_11, _cast_enum_to_bits_expr_12), eq(io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect parent_out.struct_opt_bool_flip, and(_bundle_structural_eq_6, eq(io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _bundle_structural_eq_5: UInt<1> + connect _bundle_structural_eq_5, and(eq(_cast_enum_to_bits_expr_10, _cast_enum_to_bits_expr_11), eq(io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect parent_out.struct_opt_bool_flip, and(_bundle_structural_eq_5, eq(io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] wire _cast_bits_to_bundle_expr: Ty1 wire _cast_bits_to_bundle_expr_flattened: Ty7 connect _cast_bits_to_bundle_expr_flattened.tag, bits(UInt<1>(0h0), 0, 0) @@ -2117,30 +2113,22 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened.body, UInt<0>(0) connect _cast_bits_to_bundle_expr.body, _cast_bits_to_bundle_expr_flattened.body connect io_zeros.opt_unit_flip, _cast_bits_to_bundle_expr @[module-XXXXXXXXXX.rs 13:1] + connect parent_zeros_out.opt_unit, __enum_structural_eq_6 @[module-XXXXXXXXXX.rs 13:1] + wire _cast_enum_to_bits_expr_12: UInt<1> + match io_zeros.opt_unit_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_12, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_12, UInt<1>(1) wire _cast_enum_to_bits_expr_13: UInt<1> - match io_zeros.opt_unit.tag: + match _cast_bits_to_bundle_expr.tag: HdlNone: connect _cast_enum_to_bits_expr_13, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_13, UInt<1>(1) - wire _cast_enum_to_bits_expr_14: UInt<1> - match _cast_bits_to_bundle_expr.tag: - HdlNone: - connect _cast_enum_to_bits_expr_14, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_14, UInt<1>(1) - wire _bundle_structural_eq_7: UInt<1> - connect _bundle_structural_eq_7, and(eq(_cast_enum_to_bits_expr_13, _cast_enum_to_bits_expr_14), eq(io_zeros.opt_unit.body, _cast_bits_to_bundle_expr.body)) - connect parent_zeros_out.opt_unit, _bundle_structural_eq_7 @[module-XXXXXXXXXX.rs 13:1] - wire _cast_enum_to_bits_expr_15: UInt<1> - match io_zeros.opt_unit_flip.tag: - HdlNone: - connect _cast_enum_to_bits_expr_15, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_15, UInt<1>(1) - wire _bundle_structural_eq_8: UInt<1> - connect _bundle_structural_eq_8, and(eq(_cast_enum_to_bits_expr_15, _cast_enum_to_bits_expr_14), eq(io_zeros.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) - connect parent_zeros_out.opt_unit_flip, _bundle_structural_eq_8 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_6: UInt<1> + connect _bundle_structural_eq_6, and(eq(_cast_enum_to_bits_expr_12, _cast_enum_to_bits_expr_13), eq(io_zeros.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) + connect parent_zeros_out.opt_unit_flip, _bundle_structural_eq_6 @[module-XXXXXXXXXX.rs 13:1] wire _cast_bits_to_bundle_expr_1: Ty2 wire _cast_bits_to_bundle_expr_flattened_1: Ty8 connect _cast_bits_to_bundle_expr_flattened_1.tag, bits(UInt<2>(0h0), 0, 0) @@ -2153,33 +2141,33 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_1.body, bits(UInt<2>(0h0), 1, 1) connect _cast_bits_to_bundle_expr_1.body, _cast_bits_to_bundle_expr_flattened_1.body connect io_zeros.opt_bool_flip, _cast_bits_to_bundle_expr_1 @[module-XXXXXXXXXX.rs 14:1] - connect parent_zeros_out.opt_bool, __enum_structural_eq_5 @[module-XXXXXXXXXX.rs 14:1] - wire _cast_enum_to_bits_expr_16: UInt<1> + connect parent_zeros_out.opt_bool, __enum_structural_eq_7 @[module-XXXXXXXXXX.rs 14:1] + wire _cast_enum_to_bits_expr_14: UInt<1> match io_zeros.opt_bool_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_14, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_14, UInt<1>(1) + wire _cast_enum_to_bits_expr_15: UInt<1> + match _cast_bits_to_bundle_expr_1.tag: + HdlNone: + connect _cast_enum_to_bits_expr_15, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_15, UInt<1>(1) + wire _bundle_structural_eq_7: UInt<1> + connect _bundle_structural_eq_7, and(eq(_cast_enum_to_bits_expr_14, _cast_enum_to_bits_expr_15), eq(io_zeros.opt_bool_flip.body, _cast_bits_to_bundle_expr_1.body)) + connect parent_zeros_out.opt_bool_flip, _bundle_structural_eq_7 @[module-XXXXXXXXXX.rs 14:1] + connect io_zeros.opt_opt_unit_flip, _cast_bits_to_bundle_expr_1 @[module-XXXXXXXXXX.rs 15:1] + connect parent_zeros_out.opt_opt_unit, __enum_structural_eq_8 @[module-XXXXXXXXXX.rs 15:1] + wire _cast_enum_to_bits_expr_16: UInt<1> + match io_zeros.opt_opt_unit_flip.tag: HdlNone: connect _cast_enum_to_bits_expr_16, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_16, UInt<1>(1) - wire _cast_enum_to_bits_expr_17: UInt<1> - match _cast_bits_to_bundle_expr_1.tag: - HdlNone: - connect _cast_enum_to_bits_expr_17, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_17, UInt<1>(1) - wire _bundle_structural_eq_9: UInt<1> - connect _bundle_structural_eq_9, and(eq(_cast_enum_to_bits_expr_16, _cast_enum_to_bits_expr_17), eq(io_zeros.opt_bool_flip.body, _cast_bits_to_bundle_expr_1.body)) - connect parent_zeros_out.opt_bool_flip, _bundle_structural_eq_9 @[module-XXXXXXXXXX.rs 14:1] - connect io_zeros.opt_opt_unit_flip, _cast_bits_to_bundle_expr_1 @[module-XXXXXXXXXX.rs 15:1] - connect parent_zeros_out.opt_opt_unit, __enum_structural_eq_6 @[module-XXXXXXXXXX.rs 15:1] - wire _cast_enum_to_bits_expr_18: UInt<1> - match io_zeros.opt_opt_unit_flip.tag: - HdlNone: - connect _cast_enum_to_bits_expr_18, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_18, UInt<1>(1) - wire _bundle_structural_eq_10: UInt<1> - connect _bundle_structural_eq_10, and(eq(_cast_enum_to_bits_expr_18, _cast_enum_to_bits_expr_17), eq(io_zeros.opt_opt_unit_flip.body, _cast_bits_to_bundle_expr_1.body)) - connect parent_zeros_out.opt_opt_unit_flip, _bundle_structural_eq_10 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_8: UInt<1> + connect _bundle_structural_eq_8, and(eq(_cast_enum_to_bits_expr_16, _cast_enum_to_bits_expr_15), eq(io_zeros.opt_opt_unit_flip.body, _cast_bits_to_bundle_expr_1.body)) + connect parent_zeros_out.opt_opt_unit_flip, _bundle_structural_eq_8 @[module-XXXXXXXXXX.rs 15:1] wire _cast_bits_to_array_expr: Ty2[2] wire _cast_bits_to_array_expr_flattened: UInt<2>[2] connect _cast_bits_to_array_expr_flattened[0], bits(UInt<4>(0h0), 1, 0) @@ -2209,36 +2197,36 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_3.body, _cast_bits_to_bundle_expr_flattened_3.body connect _cast_bits_to_array_expr[1], _cast_bits_to_bundle_expr_3 connect io_zeros.array_opt_bool_flip, _cast_bits_to_array_expr @[module-XXXXXXXXXX.rs 16:1] - connect parent_zeros_out.array_opt_bool, and(__enum_structural_eq_7, __enum_structural_eq_8) @[module-XXXXXXXXXX.rs 16:1] - wire _cast_enum_to_bits_expr_19: UInt<1> + connect parent_zeros_out.array_opt_bool, and(__enum_structural_eq_9, __enum_structural_eq_10) @[module-XXXXXXXXXX.rs 16:1] + wire _cast_enum_to_bits_expr_17: UInt<1> match io_zeros.array_opt_bool_flip[0].tag: + HdlNone: + connect _cast_enum_to_bits_expr_17, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_17, UInt<1>(1) + wire _cast_enum_to_bits_expr_18: UInt<1> + match _cast_bits_to_array_expr[0].tag: + HdlNone: + connect _cast_enum_to_bits_expr_18, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_18, UInt<1>(1) + wire _bundle_structural_eq_9: UInt<1> + connect _bundle_structural_eq_9, and(eq(_cast_enum_to_bits_expr_17, _cast_enum_to_bits_expr_18), eq(io_zeros.array_opt_bool_flip[0].body, _cast_bits_to_array_expr[0].body)) + wire _cast_enum_to_bits_expr_19: UInt<1> + match io_zeros.array_opt_bool_flip[1].tag: HdlNone: connect _cast_enum_to_bits_expr_19, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_19, UInt<1>(1) wire _cast_enum_to_bits_expr_20: UInt<1> - match _cast_bits_to_array_expr[0].tag: + match _cast_bits_to_array_expr[1].tag: HdlNone: connect _cast_enum_to_bits_expr_20, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_20, UInt<1>(1) - wire _bundle_structural_eq_11: UInt<1> - connect _bundle_structural_eq_11, and(eq(_cast_enum_to_bits_expr_19, _cast_enum_to_bits_expr_20), eq(io_zeros.array_opt_bool_flip[0].body, _cast_bits_to_array_expr[0].body)) - wire _cast_enum_to_bits_expr_21: UInt<1> - match io_zeros.array_opt_bool_flip[1].tag: - HdlNone: - connect _cast_enum_to_bits_expr_21, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_21, UInt<1>(1) - wire _cast_enum_to_bits_expr_22: UInt<1> - match _cast_bits_to_array_expr[1].tag: - HdlNone: - connect _cast_enum_to_bits_expr_22, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_22, UInt<1>(1) - wire _bundle_structural_eq_12: UInt<1> - connect _bundle_structural_eq_12, and(eq(_cast_enum_to_bits_expr_21, _cast_enum_to_bits_expr_22), eq(io_zeros.array_opt_bool_flip[1].body, _cast_bits_to_array_expr[1].body)) - connect parent_zeros_out.array_opt_bool_flip, and(_bundle_structural_eq_11, _bundle_structural_eq_12) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_10: UInt<1> + connect _bundle_structural_eq_10, and(eq(_cast_enum_to_bits_expr_19, _cast_enum_to_bits_expr_20), eq(io_zeros.array_opt_bool_flip[1].body, _cast_bits_to_array_expr[1].body)) + connect parent_zeros_out.array_opt_bool_flip, and(_bundle_structural_eq_9, _bundle_structural_eq_10) @[module-XXXXXXXXXX.rs 16:1] wire _cast_bits_to_bundle_expr_4: Ty3 wire _cast_bits_to_bundle_expr_flattened_4: Ty9 connect _cast_bits_to_bundle_expr_flattened_4.`0`, bits(UInt<3>(0h0), 1, 0) @@ -2257,41 +2245,33 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_4.`1`, bits(UInt<3>(0h0), 2, 2) connect _cast_bits_to_bundle_expr_4.`1`, _cast_bits_to_bundle_expr_flattened_4.`1` connect io_zeros.struct_opt_bool_flip, _cast_bits_to_bundle_expr_4 @[module-XXXXXXXXXX.rs 17:1] - connect parent_zeros_out.struct_opt_bool, and(__enum_structural_eq_9, eq(io_zeros.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _cast_enum_to_bits_expr_23: UInt<1> + connect parent_zeros_out.struct_opt_bool, and(__enum_structural_eq_11, eq(io_zeros.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _cast_enum_to_bits_expr_21: UInt<1> match io_zeros.struct_opt_bool_flip.`0`.tag: + HdlNone: + connect _cast_enum_to_bits_expr_21, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_21, UInt<1>(1) + wire _cast_enum_to_bits_expr_22: UInt<1> + match _cast_bits_to_bundle_expr_4.`0`.tag: + HdlNone: + connect _cast_enum_to_bits_expr_22, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_22, UInt<1>(1) + wire _bundle_structural_eq_11: UInt<1> + connect _bundle_structural_eq_11, and(eq(_cast_enum_to_bits_expr_21, _cast_enum_to_bits_expr_22), eq(io_zeros.struct_opt_bool_flip.`0`.body, _cast_bits_to_bundle_expr_4.`0`.body)) + connect parent_zeros_out.struct_opt_bool_flip, and(_bundle_structural_eq_11, eq(io_zeros.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect io_alternating.opt_unit_flip, _cast_bits_to_bundle_expr @[module-XXXXXXXXXX.rs 13:1] + connect parent_alternating_out.opt_unit, __enum_structural_eq_12 @[module-XXXXXXXXXX.rs 13:1] + wire _cast_enum_to_bits_expr_23: UInt<1> + match io_alternating.opt_unit_flip.tag: HdlNone: connect _cast_enum_to_bits_expr_23, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_23, UInt<1>(1) - wire _cast_enum_to_bits_expr_24: UInt<1> - match _cast_bits_to_bundle_expr_4.`0`.tag: - HdlNone: - connect _cast_enum_to_bits_expr_24, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_24, UInt<1>(1) - wire _bundle_structural_eq_13: UInt<1> - connect _bundle_structural_eq_13, and(eq(_cast_enum_to_bits_expr_23, _cast_enum_to_bits_expr_24), eq(io_zeros.struct_opt_bool_flip.`0`.body, _cast_bits_to_bundle_expr_4.`0`.body)) - connect parent_zeros_out.struct_opt_bool_flip, and(_bundle_structural_eq_13, eq(io_zeros.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] - connect io_alternating.opt_unit_flip, _cast_bits_to_bundle_expr @[module-XXXXXXXXXX.rs 13:1] - wire _cast_enum_to_bits_expr_25: UInt<1> - match io_alternating.opt_unit.tag: - HdlNone: - connect _cast_enum_to_bits_expr_25, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_25, UInt<1>(1) - wire _bundle_structural_eq_14: UInt<1> - connect _bundle_structural_eq_14, and(eq(_cast_enum_to_bits_expr_25, _cast_enum_to_bits_expr_14), eq(io_alternating.opt_unit.body, _cast_bits_to_bundle_expr.body)) - connect parent_alternating_out.opt_unit, _bundle_structural_eq_14 @[module-XXXXXXXXXX.rs 13:1] - wire _cast_enum_to_bits_expr_26: UInt<1> - match io_alternating.opt_unit_flip.tag: - HdlNone: - connect _cast_enum_to_bits_expr_26, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_26, UInt<1>(1) - wire _bundle_structural_eq_15: UInt<1> - connect _bundle_structural_eq_15, and(eq(_cast_enum_to_bits_expr_26, _cast_enum_to_bits_expr_14), eq(io_alternating.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) - connect parent_alternating_out.opt_unit_flip, _bundle_structural_eq_15 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_12: UInt<1> + connect _bundle_structural_eq_12, and(eq(_cast_enum_to_bits_expr_23, _cast_enum_to_bits_expr_13), eq(io_alternating.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) + connect parent_alternating_out.opt_unit_flip, _bundle_structural_eq_12 @[module-XXXXXXXXXX.rs 13:1] wire _cast_bits_to_bundle_expr_6: Ty2 wire _cast_bits_to_bundle_expr_flattened_6: Ty8 connect _cast_bits_to_bundle_expr_flattened_6.tag, bits(UInt<2>(0h2), 0, 0) @@ -2304,11 +2284,11 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_6.body, bits(UInt<2>(0h2), 1, 1) connect _cast_bits_to_bundle_expr_6.body, _cast_bits_to_bundle_expr_flattened_6.body connect io_alternating.opt_bool_flip, _cast_bits_to_bundle_expr_6 @[module-XXXXXXXXXX.rs 14:1] - connect parent_alternating_out.opt_bool, __enum_structural_eq_10 @[module-XXXXXXXXXX.rs 14:1] - connect parent_alternating_out.opt_bool_flip, __enum_structural_eq_11 @[module-XXXXXXXXXX.rs 14:1] + connect parent_alternating_out.opt_bool, __enum_structural_eq_13 @[module-XXXXXXXXXX.rs 14:1] + connect parent_alternating_out.opt_bool_flip, __enum_structural_eq_14 @[module-XXXXXXXXXX.rs 14:1] connect io_alternating.opt_opt_unit_flip, _cast_bits_to_bundle_expr_6 @[module-XXXXXXXXXX.rs 15:1] - connect parent_alternating_out.opt_opt_unit, __enum_structural_eq_12 @[module-XXXXXXXXXX.rs 15:1] - connect parent_alternating_out.opt_opt_unit_flip, __enum_structural_eq_13 @[module-XXXXXXXXXX.rs 15:1] + connect parent_alternating_out.opt_opt_unit, __enum_structural_eq_15 @[module-XXXXXXXXXX.rs 15:1] + connect parent_alternating_out.opt_opt_unit_flip, __enum_structural_eq_16 @[module-XXXXXXXXXX.rs 15:1] wire _cast_bits_to_array_expr_1: Ty2[2] wire _cast_bits_to_array_expr_flattened_1: UInt<2>[2] connect _cast_bits_to_array_expr_flattened_1[0], bits(UInt<4>(0hA), 1, 0) @@ -2338,8 +2318,8 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_8.body, _cast_bits_to_bundle_expr_flattened_8.body connect _cast_bits_to_array_expr_1[1], _cast_bits_to_bundle_expr_8 connect io_alternating.array_opt_bool_flip, _cast_bits_to_array_expr_1 @[module-XXXXXXXXXX.rs 16:1] - connect parent_alternating_out.array_opt_bool, and(__enum_structural_eq_14, __enum_structural_eq_15) @[module-XXXXXXXXXX.rs 16:1] - connect parent_alternating_out.array_opt_bool_flip, and(__enum_structural_eq_16, __enum_structural_eq_17) @[module-XXXXXXXXXX.rs 16:1] + connect parent_alternating_out.array_opt_bool, and(__enum_structural_eq_17, __enum_structural_eq_18) @[module-XXXXXXXXXX.rs 16:1] + connect parent_alternating_out.array_opt_bool_flip, and(__enum_structural_eq_19, __enum_structural_eq_20) @[module-XXXXXXXXXX.rs 16:1] wire _cast_bits_to_bundle_expr_9: Ty3 wire _cast_bits_to_bundle_expr_flattened_9: Ty9 connect _cast_bits_to_bundle_expr_flattened_9.`0`, bits(UInt<3>(0h2), 1, 0) @@ -2358,219 +2338,228 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_9.`1`, bits(UInt<3>(0h2), 2, 2) connect _cast_bits_to_bundle_expr_9.`1`, _cast_bits_to_bundle_expr_flattened_9.`1` connect io_alternating.struct_opt_bool_flip, _cast_bits_to_bundle_expr_9 @[module-XXXXXXXXXX.rs 17:1] - connect parent_alternating_out.struct_opt_bool, and(__enum_structural_eq_18, eq(io_alternating.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] - connect parent_alternating_out.struct_opt_bool_flip, and(__enum_structural_eq_19, eq(io_alternating.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_alternating_out.struct_opt_bool, and(__enum_structural_eq_21, eq(io_alternating.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_alternating_out.struct_opt_bool_flip, and(__enum_structural_eq_22, eq(io_alternating.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect extern_child.io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] + connect extern_child_out.opt_unit, __enum_structural_eq_23 @[module-XXXXXXXXXX.rs 13:1] + wire _cast_enum_to_bits_expr_24: UInt<1> + match extern_child.io.opt_unit_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_24, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_24, UInt<1>(1) + wire _bundle_structural_eq_13: UInt<1> + connect _bundle_structural_eq_13, and(eq(_cast_enum_to_bits_expr_24, _cast_enum_to_bits_expr_1), eq(extern_child.io.opt_unit_flip.body, _bundle_literal_expr.body)) + connect extern_child_out.opt_unit_flip, _bundle_structural_eq_13 @[module-XXXXXXXXXX.rs 13:1] + connect extern_child.io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] + connect extern_child_out.opt_bool, __enum_structural_eq_24 @[module-XXXXXXXXXX.rs 14:1] + wire _cast_enum_to_bits_expr_25: UInt<1> + match extern_child.io.opt_bool_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_25, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_25, UInt<1>(1) + wire _bundle_structural_eq_14: UInt<1> + connect _bundle_structural_eq_14, and(eq(_cast_enum_to_bits_expr_25, _cast_enum_to_bits_expr_3), eq(extern_child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) + connect extern_child_out.opt_bool_flip, _bundle_structural_eq_14 @[module-XXXXXXXXXX.rs 14:1] + connect extern_child.io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] + connect extern_child_out.opt_opt_unit, __enum_structural_eq_25 @[module-XXXXXXXXXX.rs 15:1] + wire _cast_enum_to_bits_expr_26: UInt<1> + match extern_child.io.opt_opt_unit_flip.tag: + HdlNone: + connect _cast_enum_to_bits_expr_26, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_26, UInt<1>(1) + wire _bundle_structural_eq_15: UInt<1> + connect _bundle_structural_eq_15, and(eq(_cast_enum_to_bits_expr_26, _cast_enum_to_bits_expr_5), eq(extern_child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) + connect extern_child_out.opt_opt_unit_flip, _bundle_structural_eq_15 @[module-XXXXXXXXXX.rs 15:1] + connect extern_child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] + connect extern_child_out.array_opt_bool, and(__enum_structural_eq_26, __enum_structural_eq_27) @[module-XXXXXXXXXX.rs 16:1] wire _cast_enum_to_bits_expr_27: UInt<1> - match extern_child.io.opt_unit.tag: + match extern_child.io.array_opt_bool_flip[0].tag: HdlNone: connect _cast_enum_to_bits_expr_27, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_27, UInt<1>(1) wire _bundle_structural_eq_16: UInt<1> - connect _bundle_structural_eq_16, and(eq(_cast_enum_to_bits_expr_27, _cast_enum_to_bits_expr_1), eq(extern_child.io.opt_unit.body, _bundle_literal_expr.body)) - connect extern_child_out.opt_unit, _bundle_structural_eq_16 @[module-XXXXXXXXXX.rs 13:1] + connect _bundle_structural_eq_16, and(eq(_cast_enum_to_bits_expr_27, _cast_enum_to_bits_expr_7), eq(extern_child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) wire _cast_enum_to_bits_expr_28: UInt<1> - match extern_child.io.opt_unit_flip.tag: + match extern_child.io.array_opt_bool_flip[1].tag: HdlNone: connect _cast_enum_to_bits_expr_28, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_28, UInt<1>(1) wire _bundle_structural_eq_17: UInt<1> - connect _bundle_structural_eq_17, and(eq(_cast_enum_to_bits_expr_28, _cast_enum_to_bits_expr_1), eq(extern_child.io.opt_unit_flip.body, _bundle_literal_expr.body)) - connect extern_child_out.opt_unit_flip, _bundle_structural_eq_17 @[module-XXXXXXXXXX.rs 13:1] - connect extern_child.io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] - connect extern_child_out.opt_bool, __enum_structural_eq_20 @[module-XXXXXXXXXX.rs 14:1] + connect _bundle_structural_eq_17, and(eq(_cast_enum_to_bits_expr_28, _cast_enum_to_bits_expr_9), eq(extern_child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) + connect extern_child_out.array_opt_bool_flip, and(_bundle_structural_eq_16, _bundle_structural_eq_17) @[module-XXXXXXXXXX.rs 16:1] + connect extern_child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] + connect extern_child_out.struct_opt_bool, and(__enum_structural_eq_28, eq(extern_child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] wire _cast_enum_to_bits_expr_29: UInt<1> - match extern_child.io.opt_bool_flip.tag: + match extern_child.io.struct_opt_bool_flip.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_29, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_29, UInt<1>(1) wire _bundle_structural_eq_18: UInt<1> - connect _bundle_structural_eq_18, and(eq(_cast_enum_to_bits_expr_29, _cast_enum_to_bits_expr_4), eq(extern_child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) - connect extern_child_out.opt_bool_flip, _bundle_structural_eq_18 @[module-XXXXXXXXXX.rs 14:1] - connect extern_child.io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] - connect extern_child_out.opt_opt_unit, __enum_structural_eq_21 @[module-XXXXXXXXXX.rs 15:1] + connect _bundle_structural_eq_18, and(eq(_cast_enum_to_bits_expr_29, _cast_enum_to_bits_expr_11), eq(extern_child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect extern_child_out.struct_opt_bool_flip, and(_bundle_structural_eq_18, eq(extern_child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect child.io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] wire _cast_enum_to_bits_expr_30: UInt<1> - match extern_child.io.opt_opt_unit_flip.tag: + match child.io.opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_30, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_30, UInt<1>(1) wire _bundle_structural_eq_19: UInt<1> - connect _bundle_structural_eq_19, and(eq(_cast_enum_to_bits_expr_30, _cast_enum_to_bits_expr_6), eq(extern_child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) - connect extern_child_out.opt_opt_unit_flip, _bundle_structural_eq_19 @[module-XXXXXXXXXX.rs 15:1] - connect extern_child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - connect extern_child_out.array_opt_bool, and(__enum_structural_eq_22, __enum_structural_eq_23) @[module-XXXXXXXXXX.rs 16:1] + connect _bundle_structural_eq_19, and(eq(_cast_enum_to_bits_expr_30, _cast_enum_to_bits_expr_1), eq(child.io.opt_unit.body, _bundle_literal_expr.body)) + connect child_out.opt_unit, _bundle_structural_eq_19 @[module-XXXXXXXXXX.rs 13:1] wire _cast_enum_to_bits_expr_31: UInt<1> - match extern_child.io.array_opt_bool_flip[0].tag: + match child.io.opt_unit_flip.tag: HdlNone: connect _cast_enum_to_bits_expr_31, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_31, UInt<1>(1) wire _bundle_structural_eq_20: UInt<1> - connect _bundle_structural_eq_20, and(eq(_cast_enum_to_bits_expr_31, _cast_enum_to_bits_expr_8), eq(extern_child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) + connect _bundle_structural_eq_20, and(eq(_cast_enum_to_bits_expr_31, _cast_enum_to_bits_expr_1), eq(child.io.opt_unit_flip.body, _bundle_literal_expr.body)) + connect child_out.opt_unit_flip, _bundle_structural_eq_20 @[module-XXXXXXXXXX.rs 13:1] + connect child.io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] wire _cast_enum_to_bits_expr_32: UInt<1> - match extern_child.io.array_opt_bool_flip[1].tag: + match child.io.opt_bool.tag: HdlNone: connect _cast_enum_to_bits_expr_32, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_32, UInt<1>(1) wire _bundle_structural_eq_21: UInt<1> - connect _bundle_structural_eq_21, and(eq(_cast_enum_to_bits_expr_32, _cast_enum_to_bits_expr_10), eq(extern_child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) - connect extern_child_out.array_opt_bool_flip, and(_bundle_structural_eq_20, _bundle_structural_eq_21) @[module-XXXXXXXXXX.rs 16:1] - connect extern_child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - connect extern_child_out.struct_opt_bool, and(__enum_structural_eq_24, eq(extern_child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect _bundle_structural_eq_21, and(eq(_cast_enum_to_bits_expr_32, _cast_enum_to_bits_expr_3), eq(child.io.opt_bool.body, _bundle_literal_expr_2.body)) + connect child_out.opt_bool, _bundle_structural_eq_21 @[module-XXXXXXXXXX.rs 14:1] wire _cast_enum_to_bits_expr_33: UInt<1> - match extern_child.io.struct_opt_bool_flip.`0`.tag: + match child.io.opt_bool_flip.tag: HdlNone: connect _cast_enum_to_bits_expr_33, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_33, UInt<1>(1) wire _bundle_structural_eq_22: UInt<1> - connect _bundle_structural_eq_22, and(eq(_cast_enum_to_bits_expr_33, _cast_enum_to_bits_expr_12), eq(extern_child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect extern_child_out.struct_opt_bool_flip, and(_bundle_structural_eq_22, eq(extern_child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - connect child.io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] + connect _bundle_structural_eq_22, and(eq(_cast_enum_to_bits_expr_33, _cast_enum_to_bits_expr_3), eq(child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) + connect child_out.opt_bool_flip, _bundle_structural_eq_22 @[module-XXXXXXXXXX.rs 14:1] + connect child.io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] wire _cast_enum_to_bits_expr_34: UInt<1> - match child.io.opt_unit.tag: + match child.io.opt_opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_34, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_34, UInt<1>(1) wire _bundle_structural_eq_23: UInt<1> - connect _bundle_structural_eq_23, and(eq(_cast_enum_to_bits_expr_34, _cast_enum_to_bits_expr_1), eq(child.io.opt_unit.body, _bundle_literal_expr.body)) - connect child_out.opt_unit, _bundle_structural_eq_23 @[module-XXXXXXXXXX.rs 13:1] + connect _bundle_structural_eq_23, and(eq(_cast_enum_to_bits_expr_34, _cast_enum_to_bits_expr_5), eq(child.io.opt_opt_unit.body, _bundle_literal_expr_3.body)) + connect child_out.opt_opt_unit, _bundle_structural_eq_23 @[module-XXXXXXXXXX.rs 15:1] wire _cast_enum_to_bits_expr_35: UInt<1> - match child.io.opt_unit_flip.tag: + match child.io.opt_opt_unit_flip.tag: HdlNone: connect _cast_enum_to_bits_expr_35, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_35, UInt<1>(1) wire _bundle_structural_eq_24: UInt<1> - connect _bundle_structural_eq_24, and(eq(_cast_enum_to_bits_expr_35, _cast_enum_to_bits_expr_1), eq(child.io.opt_unit_flip.body, _bundle_literal_expr.body)) - connect child_out.opt_unit_flip, _bundle_structural_eq_24 @[module-XXXXXXXXXX.rs 13:1] - connect child.io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] + connect _bundle_structural_eq_24, and(eq(_cast_enum_to_bits_expr_35, _cast_enum_to_bits_expr_5), eq(child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) + connect child_out.opt_opt_unit_flip, _bundle_structural_eq_24 @[module-XXXXXXXXXX.rs 15:1] + connect child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] wire _cast_enum_to_bits_expr_36: UInt<1> - match child.io.opt_bool.tag: + match child.io.array_opt_bool[0].tag: HdlNone: connect _cast_enum_to_bits_expr_36, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_36, UInt<1>(1) wire _bundle_structural_eq_25: UInt<1> - connect _bundle_structural_eq_25, and(eq(_cast_enum_to_bits_expr_36, _cast_enum_to_bits_expr_4), eq(child.io.opt_bool.body, _bundle_literal_expr_2.body)) - connect child_out.opt_bool, _bundle_structural_eq_25 @[module-XXXXXXXXXX.rs 14:1] + connect _bundle_structural_eq_25, and(eq(_cast_enum_to_bits_expr_36, _cast_enum_to_bits_expr_7), eq(child.io.array_opt_bool[0].body, _array_literal_expr[0].body)) wire _cast_enum_to_bits_expr_37: UInt<1> - match child.io.opt_bool_flip.tag: + match child.io.array_opt_bool[1].tag: HdlNone: connect _cast_enum_to_bits_expr_37, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_37, UInt<1>(1) wire _bundle_structural_eq_26: UInt<1> - connect _bundle_structural_eq_26, and(eq(_cast_enum_to_bits_expr_37, _cast_enum_to_bits_expr_4), eq(child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) - connect child_out.opt_bool_flip, _bundle_structural_eq_26 @[module-XXXXXXXXXX.rs 14:1] - connect child.io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] + connect _bundle_structural_eq_26, and(eq(_cast_enum_to_bits_expr_37, _cast_enum_to_bits_expr_9), eq(child.io.array_opt_bool[1].body, _array_literal_expr[1].body)) + connect child_out.array_opt_bool, and(_bundle_structural_eq_25, _bundle_structural_eq_26) @[module-XXXXXXXXXX.rs 16:1] wire _cast_enum_to_bits_expr_38: UInt<1> - match child.io.opt_opt_unit.tag: + match child.io.array_opt_bool_flip[0].tag: HdlNone: connect _cast_enum_to_bits_expr_38, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_38, UInt<1>(1) wire _bundle_structural_eq_27: UInt<1> - connect _bundle_structural_eq_27, and(eq(_cast_enum_to_bits_expr_38, _cast_enum_to_bits_expr_6), eq(child.io.opt_opt_unit.body, _bundle_literal_expr_3.body)) - connect child_out.opt_opt_unit, _bundle_structural_eq_27 @[module-XXXXXXXXXX.rs 15:1] + connect _bundle_structural_eq_27, and(eq(_cast_enum_to_bits_expr_38, _cast_enum_to_bits_expr_7), eq(child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) wire _cast_enum_to_bits_expr_39: UInt<1> - match child.io.opt_opt_unit_flip.tag: + match child.io.array_opt_bool_flip[1].tag: HdlNone: connect _cast_enum_to_bits_expr_39, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_39, UInt<1>(1) wire _bundle_structural_eq_28: UInt<1> - connect _bundle_structural_eq_28, and(eq(_cast_enum_to_bits_expr_39, _cast_enum_to_bits_expr_6), eq(child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) - connect child_out.opt_opt_unit_flip, _bundle_structural_eq_28 @[module-XXXXXXXXXX.rs 15:1] - connect child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] + connect _bundle_structural_eq_28, and(eq(_cast_enum_to_bits_expr_39, _cast_enum_to_bits_expr_9), eq(child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) + connect child_out.array_opt_bool_flip, and(_bundle_structural_eq_27, _bundle_structural_eq_28) @[module-XXXXXXXXXX.rs 16:1] + connect child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] wire _cast_enum_to_bits_expr_40: UInt<1> - match child.io.array_opt_bool[0].tag: + match child.io.struct_opt_bool.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_40, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_40, UInt<1>(1) wire _bundle_structural_eq_29: UInt<1> - connect _bundle_structural_eq_29, and(eq(_cast_enum_to_bits_expr_40, _cast_enum_to_bits_expr_8), eq(child.io.array_opt_bool[0].body, _array_literal_expr[0].body)) + connect _bundle_structural_eq_29, and(eq(_cast_enum_to_bits_expr_40, _cast_enum_to_bits_expr_11), eq(child.io.struct_opt_bool.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect child_out.struct_opt_bool, and(_bundle_structural_eq_29, eq(child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] wire _cast_enum_to_bits_expr_41: UInt<1> - match child.io.array_opt_bool[1].tag: + match child.io.struct_opt_bool_flip.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_41, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_41, UInt<1>(1) wire _bundle_structural_eq_30: UInt<1> - connect _bundle_structural_eq_30, and(eq(_cast_enum_to_bits_expr_41, _cast_enum_to_bits_expr_10), eq(child.io.array_opt_bool[1].body, _array_literal_expr[1].body)) - connect child_out.array_opt_bool, and(_bundle_structural_eq_29, _bundle_structural_eq_30) @[module-XXXXXXXXXX.rs 16:1] + connect _bundle_structural_eq_30, and(eq(_cast_enum_to_bits_expr_41, _cast_enum_to_bits_expr_11), eq(child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect child_out.struct_opt_bool_flip, and(_bundle_structural_eq_30, eq(child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect __enum_structural_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_42: UInt<1> - match child.io.array_opt_bool_flip[0].tag: + match io.opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_42, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_42, UInt<1>(1) - wire _bundle_structural_eq_31: UInt<1> - connect _bundle_structural_eq_31, and(eq(_cast_enum_to_bits_expr_42, _cast_enum_to_bits_expr_8), eq(child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) + when eq(_cast_enum_to_bits_expr_42, _cast_enum_to_bits_expr_1): @[module-XXXXXXXXXX.rs 1:1] + match io.opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + wire _cast_bits_to_bundle_expr_11: Ty6 + invalidate _cast_bits_to_bundle_expr_11 + wire _cast_bits_to_bundle_expr_12: Ty6 + invalidate _cast_bits_to_bundle_expr_12 + connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_1, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_43: UInt<1> - match child.io.array_opt_bool_flip[1].tag: + match io.opt_bool.tag: HdlNone: connect _cast_enum_to_bits_expr_43, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_43, UInt<1>(1) - wire _bundle_structural_eq_32: UInt<1> - connect _bundle_structural_eq_32, and(eq(_cast_enum_to_bits_expr_43, _cast_enum_to_bits_expr_10), eq(child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) - connect child_out.array_opt_bool_flip, and(_bundle_structural_eq_31, _bundle_structural_eq_32) @[module-XXXXXXXXXX.rs 16:1] - connect child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] + when eq(_cast_enum_to_bits_expr_43, _cast_enum_to_bits_expr_3): @[module-XXXXXXXXXX.rs 1:1] + match io.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_1, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_1, eq(bits(io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_2, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_44: UInt<1> - match child.io.struct_opt_bool.`0`.tag: + match io.opt_opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_44, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_44, UInt<1>(1) - wire _bundle_structural_eq_33: UInt<1> - connect _bundle_structural_eq_33, and(eq(_cast_enum_to_bits_expr_44, _cast_enum_to_bits_expr_12), eq(child.io.struct_opt_bool.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect child_out.struct_opt_bool, and(_bundle_structural_eq_33, eq(child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _cast_enum_to_bits_expr_45: UInt<1> - match child.io.struct_opt_bool_flip.`0`.tag: - HdlNone: - connect _cast_enum_to_bits_expr_45, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_45, UInt<1>(1) - wire _bundle_structural_eq_34: UInt<1> - connect _bundle_structural_eq_34, and(eq(_cast_enum_to_bits_expr_45, _cast_enum_to_bits_expr_12), eq(child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect child_out.struct_opt_bool_flip, and(_bundle_structural_eq_34, eq(child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - connect __enum_structural_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_46: UInt<1> - match io.opt_bool.tag: - HdlNone: - connect _cast_enum_to_bits_expr_46, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_46, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_46, _cast_enum_to_bits_expr_4): @[module-XXXXXXXXXX.rs 1:1] - match io.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq, eq(bits(io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_1, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_47: UInt<1> - match io.opt_opt_unit.tag: - HdlNone: - connect _cast_enum_to_bits_expr_47, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_47, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_47, _cast_enum_to_bits_expr_6): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_44, _cast_enum_to_bits_expr_5): @[module-XXXXXXXXXX.rs 1:1] match io.opt_opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_1, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_2, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire __enum_structural_eq_25: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_1, __enum_structural_eq_25 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_25, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_11: Ty1 + wire __enum_structural_eq_29: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_2, __enum_structural_eq_29 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_13: Ty1 wire _cast_bits_to_bundle_expr_flattened_11: Ty7 connect _cast_bits_to_bundle_expr_flattened_11.tag, bits(bits(io.opt_opt_unit.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_9: Ty0 @@ -2578,10 +2567,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_9, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_9, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_11.tag, _cast_bits_to_enum_expr_9 + connect _cast_bits_to_bundle_expr_13.tag, _cast_bits_to_enum_expr_9 connect _cast_bits_to_bundle_expr_flattened_11.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_11.body, _cast_bits_to_bundle_expr_flattened_11.body - wire _cast_bits_to_bundle_expr_12: Ty1 + connect _cast_bits_to_bundle_expr_13.body, _cast_bits_to_bundle_expr_flattened_11.body + wire _cast_bits_to_bundle_expr_14: Ty1 wire _cast_bits_to_bundle_expr_flattened_12: Ty7 connect _cast_bits_to_bundle_expr_flattened_12.tag, bits(bits(_bundle_literal_expr_3.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_10: Ty0 @@ -2589,99 +2578,116 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_10, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_10, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_12.tag, _cast_bits_to_enum_expr_10 + connect _cast_bits_to_bundle_expr_14.tag, _cast_bits_to_enum_expr_10 connect _cast_bits_to_bundle_expr_flattened_12.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_12.body, _cast_bits_to_bundle_expr_flattened_12.body - wire _cast_enum_to_bits_expr_48: UInt<1> - match _cast_bits_to_bundle_expr_11.tag: + connect _cast_bits_to_bundle_expr_14.body, _cast_bits_to_bundle_expr_flattened_12.body + wire _cast_enum_to_bits_expr_45: UInt<1> + match _cast_bits_to_bundle_expr_13.tag: HdlNone: - connect _cast_enum_to_bits_expr_48, UInt<1>(0) + connect _cast_enum_to_bits_expr_45, UInt<1>(0) HdlSome: - connect _cast_enum_to_bits_expr_48, UInt<1>(1) - wire _cast_enum_to_bits_expr_49: UInt<1> - match _cast_bits_to_bundle_expr_12.tag: + connect _cast_enum_to_bits_expr_45, UInt<1>(1) + wire _cast_enum_to_bits_expr_46: UInt<1> + match _cast_bits_to_bundle_expr_14.tag: HdlNone: - connect _cast_enum_to_bits_expr_49, UInt<1>(0) + connect _cast_enum_to_bits_expr_46, UInt<1>(0) HdlSome: - connect _cast_enum_to_bits_expr_49, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_48, _cast_enum_to_bits_expr_49): @[module-XXXXXXXXXX.rs 1:1] - match _cast_bits_to_bundle_expr_11.tag: @[module-XXXXXXXXXX.rs 1:1] + connect _cast_enum_to_bits_expr_46, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_45, _cast_enum_to_bits_expr_46): @[module-XXXXXXXXXX.rs 1:1] + match _cast_bits_to_bundle_expr_13.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire _cast_bits_to_bundle_expr_13: Ty6 - invalidate _cast_bits_to_bundle_expr_13 - wire _cast_bits_to_bundle_expr_14: Ty6 - invalidate _cast_bits_to_bundle_expr_14 - connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_2, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_50: UInt<1> + wire _cast_bits_to_bundle_expr_15: Ty6 + invalidate _cast_bits_to_bundle_expr_15 + wire _cast_bits_to_bundle_expr_16: Ty6 + invalidate _cast_bits_to_bundle_expr_16 + connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_3, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_47: UInt<1> match io.array_opt_bool[0].tag: + HdlNone: + connect _cast_enum_to_bits_expr_47, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_47, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_47, _cast_enum_to_bits_expr_7): @[module-XXXXXXXXXX.rs 1:1] + match io.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_3, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_3, eq(bits(io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_4, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_48: UInt<1> + match io.array_opt_bool[1].tag: + HdlNone: + connect _cast_enum_to_bits_expr_48, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_48, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_48, _cast_enum_to_bits_expr_9): @[module-XXXXXXXXXX.rs 1:1] + match io.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_4, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_4, eq(bits(io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_5, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_49: UInt<1> + match io.struct_opt_bool.`0`.tag: + HdlNone: + connect _cast_enum_to_bits_expr_49, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_49, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_49, _cast_enum_to_bits_expr_11): @[module-XXXXXXXXXX.rs 1:1] + match io.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_5, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_5, eq(bits(io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_6, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_50: UInt<1> + match io_zeros.opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_50, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_50, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_50, _cast_enum_to_bits_expr_8): @[module-XXXXXXXXXX.rs 1:1] - match io.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_50, _cast_enum_to_bits_expr_13): @[module-XXXXXXXXXX.rs 1:1] + match io_zeros.opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_2, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_2, eq(bits(io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_3, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_17: Ty6 + invalidate _cast_bits_to_bundle_expr_17 + wire _cast_bits_to_bundle_expr_18: Ty6 + invalidate _cast_bits_to_bundle_expr_18 + connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_7, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_51: UInt<1> - match io.array_opt_bool[1].tag: + match io_zeros.opt_bool.tag: HdlNone: connect _cast_enum_to_bits_expr_51, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_51, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_51, _cast_enum_to_bits_expr_10): @[module-XXXXXXXXXX.rs 1:1] - match io.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_51, _cast_enum_to_bits_expr_15): @[module-XXXXXXXXXX.rs 1:1] + match io_zeros.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_3, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_7, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_3, eq(bits(io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_4, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_7, eq(bits(io_zeros.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_1.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_8, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_52: UInt<1> - match io.struct_opt_bool.`0`.tag: + match io_zeros.opt_opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_52, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_52, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_52, _cast_enum_to_bits_expr_12): @[module-XXXXXXXXXX.rs 1:1] - match io.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq_4, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq_4, eq(bits(io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_5, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_53: UInt<1> - match io_zeros.opt_bool.tag: - HdlNone: - connect _cast_enum_to_bits_expr_53, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_53, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_53, _cast_enum_to_bits_expr_17): @[module-XXXXXXXXXX.rs 1:1] - match io_zeros.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq_5, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq_5, eq(bits(io_zeros.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_1.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_6, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_54: UInt<1> - match io_zeros.opt_opt_unit.tag: - HdlNone: - connect _cast_enum_to_bits_expr_54, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_54, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_54, _cast_enum_to_bits_expr_17): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_52, _cast_enum_to_bits_expr_15): @[module-XXXXXXXXXX.rs 1:1] match io_zeros.opt_opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_8, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire __enum_structural_eq_26: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_6, __enum_structural_eq_26 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_26, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_15: Ty1 + wire __enum_structural_eq_30: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_8, __enum_structural_eq_30 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_19: Ty1 wire _cast_bits_to_bundle_expr_flattened_13: Ty7 connect _cast_bits_to_bundle_expr_flattened_13.tag, bits(bits(io_zeros.opt_opt_unit.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_11: Ty0 @@ -2689,10 +2695,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_11, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_11, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_15.tag, _cast_bits_to_enum_expr_11 + connect _cast_bits_to_bundle_expr_19.tag, _cast_bits_to_enum_expr_11 connect _cast_bits_to_bundle_expr_flattened_13.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_15.body, _cast_bits_to_bundle_expr_flattened_13.body - wire _cast_bits_to_bundle_expr_16: Ty1 + connect _cast_bits_to_bundle_expr_19.body, _cast_bits_to_bundle_expr_flattened_13.body + wire _cast_bits_to_bundle_expr_20: Ty1 wire _cast_bits_to_bundle_expr_flattened_14: Ty7 connect _cast_bits_to_bundle_expr_flattened_14.tag, bits(bits(_cast_bits_to_bundle_expr_1.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_12: Ty0 @@ -2700,118 +2706,135 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_12, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_12, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_16.tag, _cast_bits_to_enum_expr_12 + connect _cast_bits_to_bundle_expr_20.tag, _cast_bits_to_enum_expr_12 connect _cast_bits_to_bundle_expr_flattened_14.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_16.body, _cast_bits_to_bundle_expr_flattened_14.body - wire _cast_enum_to_bits_expr_55: UInt<1> - match _cast_bits_to_bundle_expr_15.tag: + connect _cast_bits_to_bundle_expr_20.body, _cast_bits_to_bundle_expr_flattened_14.body + wire _cast_enum_to_bits_expr_53: UInt<1> + match _cast_bits_to_bundle_expr_19.tag: HdlNone: - connect _cast_enum_to_bits_expr_55, UInt<1>(0) + connect _cast_enum_to_bits_expr_53, UInt<1>(0) HdlSome: - connect _cast_enum_to_bits_expr_55, UInt<1>(1) - wire _cast_enum_to_bits_expr_56: UInt<1> - match _cast_bits_to_bundle_expr_16.tag: + connect _cast_enum_to_bits_expr_53, UInt<1>(1) + wire _cast_enum_to_bits_expr_54: UInt<1> + match _cast_bits_to_bundle_expr_20.tag: HdlNone: - connect _cast_enum_to_bits_expr_56, UInt<1>(0) + connect _cast_enum_to_bits_expr_54, UInt<1>(0) HdlSome: - connect _cast_enum_to_bits_expr_56, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_55, _cast_enum_to_bits_expr_56): @[module-XXXXXXXXXX.rs 1:1] - match _cast_bits_to_bundle_expr_15.tag: @[module-XXXXXXXXXX.rs 1:1] + connect _cast_enum_to_bits_expr_54, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_53, _cast_enum_to_bits_expr_54): @[module-XXXXXXXXXX.rs 1:1] + match _cast_bits_to_bundle_expr_19.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire _cast_bits_to_bundle_expr_17: Ty6 - invalidate _cast_bits_to_bundle_expr_17 - wire _cast_bits_to_bundle_expr_18: Ty6 - invalidate _cast_bits_to_bundle_expr_18 - connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_7, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_57: UInt<1> + wire _cast_bits_to_bundle_expr_21: Ty6 + invalidate _cast_bits_to_bundle_expr_21 + wire _cast_bits_to_bundle_expr_22: Ty6 + invalidate _cast_bits_to_bundle_expr_22 + connect __enum_structural_eq_30, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_9, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_55: UInt<1> match io_zeros.array_opt_bool[0].tag: + HdlNone: + connect _cast_enum_to_bits_expr_55, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_55, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_55, _cast_enum_to_bits_expr_18): @[module-XXXXXXXXXX.rs 1:1] + match io_zeros.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_9, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_9, eq(bits(io_zeros.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_10, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_56: UInt<1> + match io_zeros.array_opt_bool[1].tag: + HdlNone: + connect _cast_enum_to_bits_expr_56, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_56, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_56, _cast_enum_to_bits_expr_20): @[module-XXXXXXXXXX.rs 1:1] + match io_zeros.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_10, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_10, eq(bits(io_zeros.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_57: UInt<1> + match io_zeros.struct_opt_bool.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_57, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_57, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_57, _cast_enum_to_bits_expr_20): @[module-XXXXXXXXXX.rs 1:1] - match io_zeros.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_57, _cast_enum_to_bits_expr_22): @[module-XXXXXXXXXX.rs 1:1] + match io_zeros.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_7, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_7, eq(bits(io_zeros.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_8, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, eq(bits(io_zeros.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_4.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_12, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_58: UInt<1> - match io_zeros.array_opt_bool[1].tag: + match io_alternating.opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_58, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_58, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_58, _cast_enum_to_bits_expr_22): @[module-XXXXXXXXXX.rs 1:1] - match io_zeros.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_58, _cast_enum_to_bits_expr_13): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_8, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_8, eq(bits(io_zeros.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_9, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_23: Ty6 + invalidate _cast_bits_to_bundle_expr_23 + wire _cast_bits_to_bundle_expr_24: Ty6 + invalidate _cast_bits_to_bundle_expr_24 + connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_13, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_59: UInt<1> - match io_zeros.struct_opt_bool.`0`.tag: + match io_alternating.opt_bool.tag: HdlNone: connect _cast_enum_to_bits_expr_59, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_59, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_59, _cast_enum_to_bits_expr_24): @[module-XXXXXXXXXX.rs 1:1] - match io_zeros.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq_9, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq_9, eq(bits(io_zeros.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_4.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_10, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_60: UInt<1> - match io_alternating.opt_bool.tag: + match _cast_bits_to_bundle_expr_6.tag: HdlNone: connect _cast_enum_to_bits_expr_60, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_60, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_59, _cast_enum_to_bits_expr_60): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_13, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_13, eq(bits(io_alternating.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_14, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_61: UInt<1> - match _cast_bits_to_bundle_expr_6.tag: + match io_alternating.opt_bool_flip.tag: HdlNone: connect _cast_enum_to_bits_expr_61, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_61, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_60, _cast_enum_to_bits_expr_61): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_61, _cast_enum_to_bits_expr_60): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.opt_bool_flip.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_10, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_14, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_10, eq(bits(io_alternating.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_11, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_14, eq(bits(io_alternating.opt_bool_flip.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_15, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_62: UInt<1> - match io_alternating.opt_bool_flip.tag: + match io_alternating.opt_opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_62, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_62, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_62, _cast_enum_to_bits_expr_61): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.opt_bool_flip.tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq_11, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq_11, eq(bits(io_alternating.opt_bool_flip.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_63: UInt<1> - match io_alternating.opt_opt_unit.tag: - HdlNone: - connect _cast_enum_to_bits_expr_63, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_63, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_63, _cast_enum_to_bits_expr_61): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_62, _cast_enum_to_bits_expr_60): @[module-XXXXXXXXXX.rs 1:1] match io_alternating.opt_opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_15, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire __enum_structural_eq_27: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, __enum_structural_eq_27 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_27, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_19: Ty1 + wire __enum_structural_eq_31: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_15, __enum_structural_eq_31 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_31, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_25: Ty1 wire _cast_bits_to_bundle_expr_flattened_15: Ty7 connect _cast_bits_to_bundle_expr_flattened_15.tag, bits(bits(io_alternating.opt_opt_unit.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_13: Ty0 @@ -2819,10 +2842,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_13, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_13, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_19.tag, _cast_bits_to_enum_expr_13 + connect _cast_bits_to_bundle_expr_25.tag, _cast_bits_to_enum_expr_13 connect _cast_bits_to_bundle_expr_flattened_15.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_19.body, _cast_bits_to_bundle_expr_flattened_15.body - wire _cast_bits_to_bundle_expr_20: Ty1 + connect _cast_bits_to_bundle_expr_25.body, _cast_bits_to_bundle_expr_flattened_15.body + wire _cast_bits_to_bundle_expr_26: Ty1 wire _cast_bits_to_bundle_expr_flattened_16: Ty7 connect _cast_bits_to_bundle_expr_flattened_16.tag, bits(bits(_cast_bits_to_bundle_expr_6.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_14: Ty0 @@ -2830,47 +2853,47 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_14, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_14, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_20.tag, _cast_bits_to_enum_expr_14 + connect _cast_bits_to_bundle_expr_26.tag, _cast_bits_to_enum_expr_14 connect _cast_bits_to_bundle_expr_flattened_16.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_20.body, _cast_bits_to_bundle_expr_flattened_16.body + connect _cast_bits_to_bundle_expr_26.body, _cast_bits_to_bundle_expr_flattened_16.body + wire _cast_enum_to_bits_expr_63: UInt<1> + match _cast_bits_to_bundle_expr_25.tag: + HdlNone: + connect _cast_enum_to_bits_expr_63, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_63, UInt<1>(1) wire _cast_enum_to_bits_expr_64: UInt<1> - match _cast_bits_to_bundle_expr_19.tag: + match _cast_bits_to_bundle_expr_26.tag: HdlNone: connect _cast_enum_to_bits_expr_64, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_64, UInt<1>(1) - wire _cast_enum_to_bits_expr_65: UInt<1> - match _cast_bits_to_bundle_expr_20.tag: - HdlNone: - connect _cast_enum_to_bits_expr_65, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_65, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_64, _cast_enum_to_bits_expr_65): @[module-XXXXXXXXXX.rs 1:1] - match _cast_bits_to_bundle_expr_19.tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_63, _cast_enum_to_bits_expr_64): @[module-XXXXXXXXXX.rs 1:1] + match _cast_bits_to_bundle_expr_25.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_31, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire _cast_bits_to_bundle_expr_21: Ty6 - invalidate _cast_bits_to_bundle_expr_21 - wire _cast_bits_to_bundle_expr_22: Ty6 - invalidate _cast_bits_to_bundle_expr_22 - connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_13, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_66: UInt<1> + wire _cast_bits_to_bundle_expr_27: Ty6 + invalidate _cast_bits_to_bundle_expr_27 + wire _cast_bits_to_bundle_expr_28: Ty6 + invalidate _cast_bits_to_bundle_expr_28 + connect __enum_structural_eq_31, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_16, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_65: UInt<1> match io_alternating.opt_opt_unit_flip.tag: HdlNone: - connect _cast_enum_to_bits_expr_66, UInt<1>(0) + connect _cast_enum_to_bits_expr_65, UInt<1>(0) HdlSome: - connect _cast_enum_to_bits_expr_66, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_66, _cast_enum_to_bits_expr_61): @[module-XXXXXXXXXX.rs 1:1] + connect _cast_enum_to_bits_expr_65, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_65, _cast_enum_to_bits_expr_60): @[module-XXXXXXXXXX.rs 1:1] match io_alternating.opt_opt_unit_flip.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_13, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_16, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire __enum_structural_eq_28: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_13, __enum_structural_eq_28 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_28, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_23: Ty1 + wire __enum_structural_eq_32: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_16, __enum_structural_eq_32 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_32, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_29: Ty1 wire _cast_bits_to_bundle_expr_flattened_17: Ty7 connect _cast_bits_to_bundle_expr_flattened_17.tag, bits(bits(io_alternating.opt_opt_unit_flip.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_15: Ty0 @@ -2878,10 +2901,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_15, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_15, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_23.tag, _cast_bits_to_enum_expr_15 + connect _cast_bits_to_bundle_expr_29.tag, _cast_bits_to_enum_expr_15 connect _cast_bits_to_bundle_expr_flattened_17.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_23.body, _cast_bits_to_bundle_expr_flattened_17.body - wire _cast_bits_to_bundle_expr_24: Ty1 + connect _cast_bits_to_bundle_expr_29.body, _cast_bits_to_bundle_expr_flattened_17.body + wire _cast_bits_to_bundle_expr_30: Ty1 wire _cast_bits_to_bundle_expr_flattened_18: Ty7 connect _cast_bits_to_bundle_expr_flattened_18.tag, bits(bits(_cast_bits_to_bundle_expr_6.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_16: Ty0 @@ -2889,156 +2912,173 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_16, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_16, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_24.tag, _cast_bits_to_enum_expr_16 + connect _cast_bits_to_bundle_expr_30.tag, _cast_bits_to_enum_expr_16 connect _cast_bits_to_bundle_expr_flattened_18.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_24.body, _cast_bits_to_bundle_expr_flattened_18.body + connect _cast_bits_to_bundle_expr_30.body, _cast_bits_to_bundle_expr_flattened_18.body + wire _cast_enum_to_bits_expr_66: UInt<1> + match _cast_bits_to_bundle_expr_29.tag: + HdlNone: + connect _cast_enum_to_bits_expr_66, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_66, UInt<1>(1) wire _cast_enum_to_bits_expr_67: UInt<1> - match _cast_bits_to_bundle_expr_23.tag: + match _cast_bits_to_bundle_expr_30.tag: HdlNone: connect _cast_enum_to_bits_expr_67, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_67, UInt<1>(1) - wire _cast_enum_to_bits_expr_68: UInt<1> - match _cast_bits_to_bundle_expr_24.tag: - HdlNone: - connect _cast_enum_to_bits_expr_68, UInt<1>(0) - HdlSome: - connect _cast_enum_to_bits_expr_68, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_67, _cast_enum_to_bits_expr_68): @[module-XXXXXXXXXX.rs 1:1] - match _cast_bits_to_bundle_expr_23.tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_66, _cast_enum_to_bits_expr_67): @[module-XXXXXXXXXX.rs 1:1] + match _cast_bits_to_bundle_expr_29.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_32, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire _cast_bits_to_bundle_expr_25: Ty6 - invalidate _cast_bits_to_bundle_expr_25 - wire _cast_bits_to_bundle_expr_26: Ty6 - invalidate _cast_bits_to_bundle_expr_26 - connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_14, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_enum_to_bits_expr_69: UInt<1> + wire _cast_bits_to_bundle_expr_31: Ty6 + invalidate _cast_bits_to_bundle_expr_31 + wire _cast_bits_to_bundle_expr_32: Ty6 + invalidate _cast_bits_to_bundle_expr_32 + connect __enum_structural_eq_32, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_17, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_enum_to_bits_expr_68: UInt<1> match io_alternating.array_opt_bool[0].tag: + HdlNone: + connect _cast_enum_to_bits_expr_68, UInt<1>(0) + HdlSome: + connect _cast_enum_to_bits_expr_68, UInt<1>(1) + wire _cast_enum_to_bits_expr_69: UInt<1> + match _cast_bits_to_array_expr_1[0].tag: HdlNone: connect _cast_enum_to_bits_expr_69, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_69, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_68, _cast_enum_to_bits_expr_69): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_17, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_17, eq(bits(io_alternating.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_18, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_70: UInt<1> - match _cast_bits_to_array_expr_1[0].tag: + match io_alternating.array_opt_bool[1].tag: HdlNone: connect _cast_enum_to_bits_expr_70, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_70, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_69, _cast_enum_to_bits_expr_70): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq_14, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq_14, eq(bits(io_alternating.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_15, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_71: UInt<1> - match io_alternating.array_opt_bool[1].tag: + match _cast_bits_to_array_expr_1[1].tag: HdlNone: connect _cast_enum_to_bits_expr_71, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_71, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_70, _cast_enum_to_bits_expr_71): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_18, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_18, eq(bits(io_alternating.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_19, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_72: UInt<1> - match _cast_bits_to_array_expr_1[1].tag: + match io_alternating.array_opt_bool_flip[0].tag: HdlNone: connect _cast_enum_to_bits_expr_72, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_72, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_71, _cast_enum_to_bits_expr_72): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_72, _cast_enum_to_bits_expr_69): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.array_opt_bool_flip[0].tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_15, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_19, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_15, eq(bits(io_alternating.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_16, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_19, eq(bits(io_alternating.array_opt_bool_flip[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_20, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_73: UInt<1> - match io_alternating.array_opt_bool_flip[0].tag: + match io_alternating.array_opt_bool_flip[1].tag: HdlNone: connect _cast_enum_to_bits_expr_73, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_73, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_73, _cast_enum_to_bits_expr_70): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.array_opt_bool_flip[0].tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_73, _cast_enum_to_bits_expr_71): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.array_opt_bool_flip[1].tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_16, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_20, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_16, eq(bits(io_alternating.array_opt_bool_flip[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_17, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_20, eq(bits(io_alternating.array_opt_bool_flip[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_21, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_74: UInt<1> - match io_alternating.array_opt_bool_flip[1].tag: + match io_alternating.struct_opt_bool.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_74, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_74, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_74, _cast_enum_to_bits_expr_72): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.array_opt_bool_flip[1].tag: @[module-XXXXXXXXXX.rs 1:1] - HdlNone: - connect __enum_structural_eq_17, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - HdlSome: - connect __enum_structural_eq_17, eq(bits(io_alternating.array_opt_bool_flip[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_18, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_75: UInt<1> - match io_alternating.struct_opt_bool.`0`.tag: + match _cast_bits_to_bundle_expr_9.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_75, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_75, UInt<1>(1) + when eq(_cast_enum_to_bits_expr_74, _cast_enum_to_bits_expr_75): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] + HdlNone: + connect __enum_structural_eq_21, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + HdlSome: + connect __enum_structural_eq_21, eq(bits(io_alternating.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_22, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_76: UInt<1> - match _cast_bits_to_bundle_expr_9.`0`.tag: + match io_alternating.struct_opt_bool_flip.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_76, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_76, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_75, _cast_enum_to_bits_expr_76): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_76, _cast_enum_to_bits_expr_75): @[module-XXXXXXXXXX.rs 1:1] + match io_alternating.struct_opt_bool_flip.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_18, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_22, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_18, eq(bits(io_alternating.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_19, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_22, eq(bits(io_alternating.struct_opt_bool_flip.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_23, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_77: UInt<1> - match io_alternating.struct_opt_bool_flip.`0`.tag: + match extern_child.io.opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_77, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_77, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_77, _cast_enum_to_bits_expr_76): @[module-XXXXXXXXXX.rs 1:1] - match io_alternating.struct_opt_bool_flip.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_77, _cast_enum_to_bits_expr_1): @[module-XXXXXXXXXX.rs 1:1] + match extern_child.io.opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_19, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_19, eq(bits(io_alternating.struct_opt_bool_flip.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_20, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_33: Ty6 + invalidate _cast_bits_to_bundle_expr_33 + wire _cast_bits_to_bundle_expr_34: Ty6 + invalidate _cast_bits_to_bundle_expr_34 + connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_24, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_78: UInt<1> match extern_child.io.opt_bool.tag: HdlNone: connect _cast_enum_to_bits_expr_78, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_78, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_78, _cast_enum_to_bits_expr_4): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_78, _cast_enum_to_bits_expr_3): @[module-XXXXXXXXXX.rs 1:1] match extern_child.io.opt_bool.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_20, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_24, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_20, eq(bits(extern_child.io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_21, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_24, eq(bits(extern_child.io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_79: UInt<1> match extern_child.io.opt_opt_unit.tag: HdlNone: connect _cast_enum_to_bits_expr_79, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_79, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_79, _cast_enum_to_bits_expr_6): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_79, _cast_enum_to_bits_expr_5): @[module-XXXXXXXXXX.rs 1:1] match extern_child.io.opt_opt_unit.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_21, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire __enum_structural_eq_29: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_21, __enum_structural_eq_29 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_29, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_27: Ty1 + wire __enum_structural_eq_33: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, __enum_structural_eq_33 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_33, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_35: Ty1 wire _cast_bits_to_bundle_expr_flattened_19: Ty7 connect _cast_bits_to_bundle_expr_flattened_19.tag, bits(bits(extern_child.io.opt_opt_unit.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_17: Ty0 @@ -3046,10 +3086,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_17, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_17, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_27.tag, _cast_bits_to_enum_expr_17 + connect _cast_bits_to_bundle_expr_35.tag, _cast_bits_to_enum_expr_17 connect _cast_bits_to_bundle_expr_flattened_19.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_27.body, _cast_bits_to_bundle_expr_flattened_19.body - wire _cast_bits_to_bundle_expr_28: Ty1 + connect _cast_bits_to_bundle_expr_35.body, _cast_bits_to_bundle_expr_flattened_19.body + wire _cast_bits_to_bundle_expr_36: Ty1 wire _cast_bits_to_bundle_expr_flattened_20: Ty7 connect _cast_bits_to_bundle_expr_flattened_20.tag, bits(bits(_bundle_literal_expr_3.body, 0, 0), 0, 0) wire _cast_bits_to_enum_expr_18: Ty0 @@ -3057,70 +3097,70 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_enum_expr_18, {|HdlNone, HdlSome|}(HdlNone) else: connect _cast_bits_to_enum_expr_18, {|HdlNone, HdlSome|}(HdlSome) - connect _cast_bits_to_bundle_expr_28.tag, _cast_bits_to_enum_expr_18 + connect _cast_bits_to_bundle_expr_36.tag, _cast_bits_to_enum_expr_18 connect _cast_bits_to_bundle_expr_flattened_20.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_28.body, _cast_bits_to_bundle_expr_flattened_20.body + connect _cast_bits_to_bundle_expr_36.body, _cast_bits_to_bundle_expr_flattened_20.body wire _cast_enum_to_bits_expr_80: UInt<1> - match _cast_bits_to_bundle_expr_27.tag: + match _cast_bits_to_bundle_expr_35.tag: HdlNone: connect _cast_enum_to_bits_expr_80, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_80, UInt<1>(1) wire _cast_enum_to_bits_expr_81: UInt<1> - match _cast_bits_to_bundle_expr_28.tag: + match _cast_bits_to_bundle_expr_36.tag: HdlNone: connect _cast_enum_to_bits_expr_81, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_81, UInt<1>(1) when eq(_cast_enum_to_bits_expr_80, _cast_enum_to_bits_expr_81): @[module-XXXXXXXXXX.rs 1:1] - match _cast_bits_to_bundle_expr_27.tag: @[module-XXXXXXXXXX.rs 1:1] + match _cast_bits_to_bundle_expr_35.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_33, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - wire _cast_bits_to_bundle_expr_29: Ty6 - invalidate _cast_bits_to_bundle_expr_29 - wire _cast_bits_to_bundle_expr_30: Ty6 - invalidate _cast_bits_to_bundle_expr_30 - connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_22, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_37: Ty6 + invalidate _cast_bits_to_bundle_expr_37 + wire _cast_bits_to_bundle_expr_38: Ty6 + invalidate _cast_bits_to_bundle_expr_38 + connect __enum_structural_eq_33, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_82: UInt<1> match extern_child.io.array_opt_bool[0].tag: HdlNone: connect _cast_enum_to_bits_expr_82, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_82, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_82, _cast_enum_to_bits_expr_8): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_82, _cast_enum_to_bits_expr_7): @[module-XXXXXXXXXX.rs 1:1] match extern_child.io.array_opt_bool[0].tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_22, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_22, eq(bits(extern_child.io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_23, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, eq(bits(extern_child.io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_83: UInt<1> match extern_child.io.array_opt_bool[1].tag: HdlNone: connect _cast_enum_to_bits_expr_83, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_83, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_83, _cast_enum_to_bits_expr_10): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_83, _cast_enum_to_bits_expr_9): @[module-XXXXXXXXXX.rs 1:1] match extern_child.io.array_opt_bool[1].tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_23, eq(bits(extern_child.io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_24, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, eq(bits(extern_child.io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_enum_to_bits_expr_84: UInt<1> match extern_child.io.struct_opt_bool.`0`.tag: HdlNone: connect _cast_enum_to_bits_expr_84, UInt<1>(0) HdlSome: connect _cast_enum_to_bits_expr_84, UInt<1>(1) - when eq(_cast_enum_to_bits_expr_84, _cast_enum_to_bits_expr_12): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_enum_to_bits_expr_84, _cast_enum_to_bits_expr_11): @[module-XXXXXXXXXX.rs 1:1] match extern_child.io.struct_opt_bool.`0`.tag: @[module-XXXXXXXXXX.rs 1:1] HdlNone: - connect __enum_structural_eq_24, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] HdlSome: - connect __enum_structural_eq_24, eq(bits(extern_child.io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, eq(bits(extern_child.io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] extmodule check_deduce_structural_eq_flags_extern_child: @[module-XXXXXXXXXX-2.rs 1:1] output io: Ty4 @[module-XXXXXXXXXX-2.rs 2:1] defname = check_deduce_structural_eq_flags_extern_child @@ -3186,6 +3226,10 @@ circuit check_deduce_structural_eq_flags_parent: wire __enum_structural_eq_22: UInt<1> @[module-XXXXXXXXXX.rs 1:1] wire __enum_structural_eq_23: UInt<1> @[module-XXXXXXXXXX.rs 1:1] wire __enum_structural_eq_24: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_25: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_26: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_27: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_28: UInt<1> @[module-XXXXXXXXXX.rs 1:1] inst extern_child of check_deduce_structural_eq_flags_extern_child @[module-XXXXXXXXXX.rs 10:1] inst child of check_deduce_structural_eq_flags_child @[module-XXXXXXXXXX.rs 11:1] wire _bundle_literal_expr: Ty0 @@ -3194,20 +3238,18 @@ circuit check_deduce_structural_eq_flags_parent: invalidate _bundle_literal_expr_1 connect _bundle_literal_expr.body, UInt<0>(0) connect io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] + connect parent_out.opt_unit, __enum_structural_eq @[module-XXXXXXXXXX.rs 13:1] wire _bundle_structural_eq: UInt<1> - connect _bundle_structural_eq, and(eq(io.opt_unit.tag, _bundle_literal_expr.tag), eq(io.opt_unit.body, _bundle_literal_expr.body)) - connect parent_out.opt_unit, _bundle_structural_eq @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_1: UInt<1> - connect _bundle_structural_eq_1, and(eq(io.opt_unit_flip.tag, _bundle_literal_expr.tag), eq(io.opt_unit_flip.body, _bundle_literal_expr.body)) - connect parent_out.opt_unit_flip, _bundle_structural_eq_1 @[module-XXXXXXXXXX.rs 13:1] + connect _bundle_structural_eq, and(eq(io.opt_unit_flip.tag, _bundle_literal_expr.tag), eq(io.opt_unit_flip.body, _bundle_literal_expr.body)) + connect parent_out.opt_unit_flip, _bundle_structural_eq @[module-XXXXXXXXXX.rs 13:1] wire _bundle_literal_expr_2: Ty1 connect _bundle_literal_expr_2.tag, UInt<1>(0h1) connect _bundle_literal_expr_2.body, UInt<1>(0h1) connect io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] - connect parent_out.opt_bool, __enum_structural_eq @[module-XXXXXXXXXX.rs 14:1] - wire _bundle_structural_eq_2: UInt<1> - connect _bundle_structural_eq_2, and(eq(io.opt_bool_flip.tag, _bundle_literal_expr_2.tag), eq(io.opt_bool_flip.body, _bundle_literal_expr_2.body)) - connect parent_out.opt_bool_flip, _bundle_structural_eq_2 @[module-XXXXXXXXXX.rs 14:1] + connect parent_out.opt_bool, __enum_structural_eq_1 @[module-XXXXXXXXXX.rs 14:1] + wire _bundle_structural_eq_1: UInt<1> + connect _bundle_structural_eq_1, and(eq(io.opt_bool_flip.tag, _bundle_literal_expr_2.tag), eq(io.opt_bool_flip.body, _bundle_literal_expr_2.body)) + connect parent_out.opt_bool_flip, _bundle_structural_eq_1 @[module-XXXXXXXXXX.rs 14:1] wire _bundle_literal_expr_3: Ty1 connect _bundle_literal_expr_3.tag, UInt<1>(0h1) wire _cast_bundle_to_bits_expr: Ty0 @@ -3217,10 +3259,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_to_bits_expr, cat(_cast_bundle_to_bits_expr.body, _cast_bundle_to_bits_expr.tag) connect _bundle_literal_expr_3.body, _cast_to_bits_expr connect io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] - connect parent_out.opt_opt_unit, __enum_structural_eq_1 @[module-XXXXXXXXXX.rs 15:1] - wire _bundle_structural_eq_3: UInt<1> - connect _bundle_structural_eq_3, and(eq(io.opt_opt_unit_flip.tag, _bundle_literal_expr_3.tag), eq(io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) - connect parent_out.opt_opt_unit_flip, _bundle_structural_eq_3 @[module-XXXXXXXXXX.rs 15:1] + connect parent_out.opt_opt_unit, __enum_structural_eq_2 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_2: UInt<1> + connect _bundle_structural_eq_2, and(eq(io.opt_opt_unit_flip.tag, _bundle_literal_expr_3.tag), eq(io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) + connect parent_out.opt_opt_unit_flip, _bundle_structural_eq_2 @[module-XXXXXXXXXX.rs 15:1] wire _array_literal_expr: Ty1[2] wire _bundle_literal_expr_4: Ty1 connect _bundle_literal_expr_4.tag, UInt<1>(0h1) @@ -3228,20 +3270,20 @@ circuit check_deduce_structural_eq_flags_parent: connect _array_literal_expr[0], _bundle_literal_expr_4 connect _array_literal_expr[1], _bundle_literal_expr_2 connect io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - connect parent_out.array_opt_bool, and(__enum_structural_eq_2, __enum_structural_eq_3) @[module-XXXXXXXXXX.rs 16:1] + connect parent_out.array_opt_bool, and(__enum_structural_eq_3, __enum_structural_eq_4) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_3: UInt<1> + connect _bundle_structural_eq_3, and(eq(io.array_opt_bool_flip[0].tag, _array_literal_expr[0].tag), eq(io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) wire _bundle_structural_eq_4: UInt<1> - connect _bundle_structural_eq_4, and(eq(io.array_opt_bool_flip[0].tag, _array_literal_expr[0].tag), eq(io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) - wire _bundle_structural_eq_5: UInt<1> - connect _bundle_structural_eq_5, and(eq(io.array_opt_bool_flip[1].tag, _array_literal_expr[1].tag), eq(io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) - connect parent_out.array_opt_bool_flip, and(_bundle_structural_eq_4, _bundle_structural_eq_5) @[module-XXXXXXXXXX.rs 16:1] + connect _bundle_structural_eq_4, and(eq(io.array_opt_bool_flip[1].tag, _array_literal_expr[1].tag), eq(io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) + connect parent_out.array_opt_bool_flip, and(_bundle_structural_eq_3, _bundle_structural_eq_4) @[module-XXXXXXXXXX.rs 16:1] wire _bundle_literal_expr_5: Ty2 connect _bundle_literal_expr_5.`0`, _bundle_literal_expr_2 connect _bundle_literal_expr_5.`1`, UInt<1>(0h1) connect io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - connect parent_out.struct_opt_bool, and(__enum_structural_eq_4, eq(io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _bundle_structural_eq_6: UInt<1> - connect _bundle_structural_eq_6, and(eq(io.struct_opt_bool_flip.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect parent_out.struct_opt_bool_flip, and(_bundle_structural_eq_6, eq(io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_out.struct_opt_bool, and(__enum_structural_eq_5, eq(io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _bundle_structural_eq_5: UInt<1> + connect _bundle_structural_eq_5, and(eq(io.struct_opt_bool_flip.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect parent_out.struct_opt_bool_flip, and(_bundle_structural_eq_5, eq(io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] wire _cast_bits_to_bundle_expr: Ty0 wire _cast_bits_to_bundle_expr_flattened: Ty0 connect _cast_bits_to_bundle_expr_flattened.tag, bits(UInt<1>(0h0), 0, 0) @@ -3249,12 +3291,10 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened.body, UInt<0>(0) connect _cast_bits_to_bundle_expr.body, _cast_bits_to_bundle_expr_flattened.body connect io_zeros.opt_unit_flip, _cast_bits_to_bundle_expr @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_7: UInt<1> - connect _bundle_structural_eq_7, and(eq(io_zeros.opt_unit.tag, _cast_bits_to_bundle_expr.tag), eq(io_zeros.opt_unit.body, _cast_bits_to_bundle_expr.body)) - connect parent_zeros_out.opt_unit, _bundle_structural_eq_7 @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_8: UInt<1> - connect _bundle_structural_eq_8, and(eq(io_zeros.opt_unit_flip.tag, _cast_bits_to_bundle_expr.tag), eq(io_zeros.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) - connect parent_zeros_out.opt_unit_flip, _bundle_structural_eq_8 @[module-XXXXXXXXXX.rs 13:1] + connect parent_zeros_out.opt_unit, __enum_structural_eq_6 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_6: UInt<1> + connect _bundle_structural_eq_6, and(eq(io_zeros.opt_unit_flip.tag, _cast_bits_to_bundle_expr.tag), eq(io_zeros.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) + connect parent_zeros_out.opt_unit_flip, _bundle_structural_eq_6 @[module-XXXXXXXXXX.rs 13:1] wire _cast_bits_to_bundle_expr_1: Ty1 wire _cast_bits_to_bundle_expr_flattened_1: Ty1 connect _cast_bits_to_bundle_expr_flattened_1.tag, bits(UInt<2>(0h0), 0, 0) @@ -3262,15 +3302,15 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_1.body, bits(UInt<2>(0h0), 1, 1) connect _cast_bits_to_bundle_expr_1.body, _cast_bits_to_bundle_expr_flattened_1.body connect io_zeros.opt_bool_flip, _cast_bits_to_bundle_expr_1 @[module-XXXXXXXXXX.rs 14:1] - connect parent_zeros_out.opt_bool, __enum_structural_eq_5 @[module-XXXXXXXXXX.rs 14:1] - wire _bundle_structural_eq_9: UInt<1> - connect _bundle_structural_eq_9, and(eq(io_zeros.opt_bool_flip.tag, _cast_bits_to_bundle_expr_1.tag), eq(io_zeros.opt_bool_flip.body, _cast_bits_to_bundle_expr_1.body)) - connect parent_zeros_out.opt_bool_flip, _bundle_structural_eq_9 @[module-XXXXXXXXXX.rs 14:1] + connect parent_zeros_out.opt_bool, __enum_structural_eq_7 @[module-XXXXXXXXXX.rs 14:1] + wire _bundle_structural_eq_7: UInt<1> + connect _bundle_structural_eq_7, and(eq(io_zeros.opt_bool_flip.tag, _cast_bits_to_bundle_expr_1.tag), eq(io_zeros.opt_bool_flip.body, _cast_bits_to_bundle_expr_1.body)) + connect parent_zeros_out.opt_bool_flip, _bundle_structural_eq_7 @[module-XXXXXXXXXX.rs 14:1] connect io_zeros.opt_opt_unit_flip, _cast_bits_to_bundle_expr_1 @[module-XXXXXXXXXX.rs 15:1] - connect parent_zeros_out.opt_opt_unit, __enum_structural_eq_6 @[module-XXXXXXXXXX.rs 15:1] - wire _bundle_structural_eq_10: UInt<1> - connect _bundle_structural_eq_10, and(eq(io_zeros.opt_opt_unit_flip.tag, _cast_bits_to_bundle_expr_1.tag), eq(io_zeros.opt_opt_unit_flip.body, _cast_bits_to_bundle_expr_1.body)) - connect parent_zeros_out.opt_opt_unit_flip, _bundle_structural_eq_10 @[module-XXXXXXXXXX.rs 15:1] + connect parent_zeros_out.opt_opt_unit, __enum_structural_eq_8 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_8: UInt<1> + connect _bundle_structural_eq_8, and(eq(io_zeros.opt_opt_unit_flip.tag, _cast_bits_to_bundle_expr_1.tag), eq(io_zeros.opt_opt_unit_flip.body, _cast_bits_to_bundle_expr_1.body)) + connect parent_zeros_out.opt_opt_unit_flip, _bundle_structural_eq_8 @[module-XXXXXXXXXX.rs 15:1] wire _cast_bits_to_array_expr: Ty1[2] wire _cast_bits_to_array_expr_flattened: UInt<2>[2] connect _cast_bits_to_array_expr_flattened[0], bits(UInt<4>(0h0), 1, 0) @@ -3290,12 +3330,12 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_3.body, _cast_bits_to_bundle_expr_flattened_3.body connect _cast_bits_to_array_expr[1], _cast_bits_to_bundle_expr_3 connect io_zeros.array_opt_bool_flip, _cast_bits_to_array_expr @[module-XXXXXXXXXX.rs 16:1] - connect parent_zeros_out.array_opt_bool, and(__enum_structural_eq_7, __enum_structural_eq_8) @[module-XXXXXXXXXX.rs 16:1] - wire _bundle_structural_eq_11: UInt<1> - connect _bundle_structural_eq_11, and(eq(io_zeros.array_opt_bool_flip[0].tag, _cast_bits_to_array_expr[0].tag), eq(io_zeros.array_opt_bool_flip[0].body, _cast_bits_to_array_expr[0].body)) - wire _bundle_structural_eq_12: UInt<1> - connect _bundle_structural_eq_12, and(eq(io_zeros.array_opt_bool_flip[1].tag, _cast_bits_to_array_expr[1].tag), eq(io_zeros.array_opt_bool_flip[1].body, _cast_bits_to_array_expr[1].body)) - connect parent_zeros_out.array_opt_bool_flip, and(_bundle_structural_eq_11, _bundle_structural_eq_12) @[module-XXXXXXXXXX.rs 16:1] + connect parent_zeros_out.array_opt_bool, and(__enum_structural_eq_9, __enum_structural_eq_10) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_9: UInt<1> + connect _bundle_structural_eq_9, and(eq(io_zeros.array_opt_bool_flip[0].tag, _cast_bits_to_array_expr[0].tag), eq(io_zeros.array_opt_bool_flip[0].body, _cast_bits_to_array_expr[0].body)) + wire _bundle_structural_eq_10: UInt<1> + connect _bundle_structural_eq_10, and(eq(io_zeros.array_opt_bool_flip[1].tag, _cast_bits_to_array_expr[1].tag), eq(io_zeros.array_opt_bool_flip[1].body, _cast_bits_to_array_expr[1].body)) + connect parent_zeros_out.array_opt_bool_flip, and(_bundle_structural_eq_9, _bundle_structural_eq_10) @[module-XXXXXXXXXX.rs 16:1] wire _cast_bits_to_bundle_expr_4: Ty2 wire _cast_bits_to_bundle_expr_flattened_4: Ty6 connect _cast_bits_to_bundle_expr_flattened_4.`0`, bits(UInt<3>(0h0), 1, 0) @@ -3309,17 +3349,15 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_4.`1`, bits(UInt<3>(0h0), 2, 2) connect _cast_bits_to_bundle_expr_4.`1`, _cast_bits_to_bundle_expr_flattened_4.`1` connect io_zeros.struct_opt_bool_flip, _cast_bits_to_bundle_expr_4 @[module-XXXXXXXXXX.rs 17:1] - connect parent_zeros_out.struct_opt_bool, and(__enum_structural_eq_9, eq(io_zeros.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _bundle_structural_eq_13: UInt<1> - connect _bundle_structural_eq_13, and(eq(io_zeros.struct_opt_bool_flip.`0`.tag, _cast_bits_to_bundle_expr_4.`0`.tag), eq(io_zeros.struct_opt_bool_flip.`0`.body, _cast_bits_to_bundle_expr_4.`0`.body)) - connect parent_zeros_out.struct_opt_bool_flip, and(_bundle_structural_eq_13, eq(io_zeros.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_zeros_out.struct_opt_bool, and(__enum_structural_eq_11, eq(io_zeros.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _bundle_structural_eq_11: UInt<1> + connect _bundle_structural_eq_11, and(eq(io_zeros.struct_opt_bool_flip.`0`.tag, _cast_bits_to_bundle_expr_4.`0`.tag), eq(io_zeros.struct_opt_bool_flip.`0`.body, _cast_bits_to_bundle_expr_4.`0`.body)) + connect parent_zeros_out.struct_opt_bool_flip, and(_bundle_structural_eq_11, eq(io_zeros.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_4.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect io_alternating.opt_unit_flip, _cast_bits_to_bundle_expr @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_14: UInt<1> - connect _bundle_structural_eq_14, and(eq(io_alternating.opt_unit.tag, _cast_bits_to_bundle_expr.tag), eq(io_alternating.opt_unit.body, _cast_bits_to_bundle_expr.body)) - connect parent_alternating_out.opt_unit, _bundle_structural_eq_14 @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_15: UInt<1> - connect _bundle_structural_eq_15, and(eq(io_alternating.opt_unit_flip.tag, _cast_bits_to_bundle_expr.tag), eq(io_alternating.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) - connect parent_alternating_out.opt_unit_flip, _bundle_structural_eq_15 @[module-XXXXXXXXXX.rs 13:1] + connect parent_alternating_out.opt_unit, __enum_structural_eq_12 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_12: UInt<1> + connect _bundle_structural_eq_12, and(eq(io_alternating.opt_unit_flip.tag, _cast_bits_to_bundle_expr.tag), eq(io_alternating.opt_unit_flip.body, _cast_bits_to_bundle_expr.body)) + connect parent_alternating_out.opt_unit_flip, _bundle_structural_eq_12 @[module-XXXXXXXXXX.rs 13:1] wire _cast_bits_to_bundle_expr_6: Ty1 wire _cast_bits_to_bundle_expr_flattened_6: Ty1 connect _cast_bits_to_bundle_expr_flattened_6.tag, bits(UInt<2>(0h2), 0, 0) @@ -3327,11 +3365,11 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_6.body, bits(UInt<2>(0h2), 1, 1) connect _cast_bits_to_bundle_expr_6.body, _cast_bits_to_bundle_expr_flattened_6.body connect io_alternating.opt_bool_flip, _cast_bits_to_bundle_expr_6 @[module-XXXXXXXXXX.rs 14:1] - connect parent_alternating_out.opt_bool, __enum_structural_eq_10 @[module-XXXXXXXXXX.rs 14:1] - connect parent_alternating_out.opt_bool_flip, __enum_structural_eq_11 @[module-XXXXXXXXXX.rs 14:1] + connect parent_alternating_out.opt_bool, __enum_structural_eq_13 @[module-XXXXXXXXXX.rs 14:1] + connect parent_alternating_out.opt_bool_flip, __enum_structural_eq_14 @[module-XXXXXXXXXX.rs 14:1] connect io_alternating.opt_opt_unit_flip, _cast_bits_to_bundle_expr_6 @[module-XXXXXXXXXX.rs 15:1] - connect parent_alternating_out.opt_opt_unit, __enum_structural_eq_12 @[module-XXXXXXXXXX.rs 15:1] - connect parent_alternating_out.opt_opt_unit_flip, __enum_structural_eq_13 @[module-XXXXXXXXXX.rs 15:1] + connect parent_alternating_out.opt_opt_unit, __enum_structural_eq_15 @[module-XXXXXXXXXX.rs 15:1] + connect parent_alternating_out.opt_opt_unit_flip, __enum_structural_eq_16 @[module-XXXXXXXXXX.rs 15:1] wire _cast_bits_to_array_expr_1: Ty1[2] wire _cast_bits_to_array_expr_flattened_1: UInt<2>[2] connect _cast_bits_to_array_expr_flattened_1[0], bits(UInt<4>(0hA), 1, 0) @@ -3351,8 +3389,8 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_8.body, _cast_bits_to_bundle_expr_flattened_8.body connect _cast_bits_to_array_expr_1[1], _cast_bits_to_bundle_expr_8 connect io_alternating.array_opt_bool_flip, _cast_bits_to_array_expr_1 @[module-XXXXXXXXXX.rs 16:1] - connect parent_alternating_out.array_opt_bool, and(__enum_structural_eq_14, __enum_structural_eq_15) @[module-XXXXXXXXXX.rs 16:1] - connect parent_alternating_out.array_opt_bool_flip, and(__enum_structural_eq_16, __enum_structural_eq_17) @[module-XXXXXXXXXX.rs 16:1] + connect parent_alternating_out.array_opt_bool, and(__enum_structural_eq_17, __enum_structural_eq_18) @[module-XXXXXXXXXX.rs 16:1] + connect parent_alternating_out.array_opt_bool_flip, and(__enum_structural_eq_19, __enum_structural_eq_20) @[module-XXXXXXXXXX.rs 16:1] wire _cast_bits_to_bundle_expr_9: Ty2 wire _cast_bits_to_bundle_expr_flattened_9: Ty6 connect _cast_bits_to_bundle_expr_flattened_9.`0`, bits(UInt<3>(0h2), 1, 0) @@ -3366,341 +3404,379 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_9.`1`, bits(UInt<3>(0h2), 2, 2) connect _cast_bits_to_bundle_expr_9.`1`, _cast_bits_to_bundle_expr_flattened_9.`1` connect io_alternating.struct_opt_bool_flip, _cast_bits_to_bundle_expr_9 @[module-XXXXXXXXXX.rs 17:1] - connect parent_alternating_out.struct_opt_bool, and(__enum_structural_eq_18, eq(io_alternating.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] - connect parent_alternating_out.struct_opt_bool_flip, and(__enum_structural_eq_19, eq(io_alternating.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_alternating_out.struct_opt_bool, and(__enum_structural_eq_21, eq(io_alternating.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_alternating_out.struct_opt_bool_flip, and(__enum_structural_eq_22, eq(io_alternating.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_9.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect extern_child.io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_16: UInt<1> - connect _bundle_structural_eq_16, and(eq(extern_child.io.opt_unit.tag, _bundle_literal_expr.tag), eq(extern_child.io.opt_unit.body, _bundle_literal_expr.body)) - connect extern_child_out.opt_unit, _bundle_structural_eq_16 @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_17: UInt<1> - connect _bundle_structural_eq_17, and(eq(extern_child.io.opt_unit_flip.tag, _bundle_literal_expr.tag), eq(extern_child.io.opt_unit_flip.body, _bundle_literal_expr.body)) - connect extern_child_out.opt_unit_flip, _bundle_structural_eq_17 @[module-XXXXXXXXXX.rs 13:1] + connect extern_child_out.opt_unit, __enum_structural_eq_23 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_13: UInt<1> + connect _bundle_structural_eq_13, and(eq(extern_child.io.opt_unit_flip.tag, _bundle_literal_expr.tag), eq(extern_child.io.opt_unit_flip.body, _bundle_literal_expr.body)) + connect extern_child_out.opt_unit_flip, _bundle_structural_eq_13 @[module-XXXXXXXXXX.rs 13:1] connect extern_child.io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] - connect extern_child_out.opt_bool, __enum_structural_eq_20 @[module-XXXXXXXXXX.rs 14:1] - wire _bundle_structural_eq_18: UInt<1> - connect _bundle_structural_eq_18, and(eq(extern_child.io.opt_bool_flip.tag, _bundle_literal_expr_2.tag), eq(extern_child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) - connect extern_child_out.opt_bool_flip, _bundle_structural_eq_18 @[module-XXXXXXXXXX.rs 14:1] + connect extern_child_out.opt_bool, __enum_structural_eq_24 @[module-XXXXXXXXXX.rs 14:1] + wire _bundle_structural_eq_14: UInt<1> + connect _bundle_structural_eq_14, and(eq(extern_child.io.opt_bool_flip.tag, _bundle_literal_expr_2.tag), eq(extern_child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) + connect extern_child_out.opt_bool_flip, _bundle_structural_eq_14 @[module-XXXXXXXXXX.rs 14:1] connect extern_child.io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] - connect extern_child_out.opt_opt_unit, __enum_structural_eq_21 @[module-XXXXXXXXXX.rs 15:1] - wire _bundle_structural_eq_19: UInt<1> - connect _bundle_structural_eq_19, and(eq(extern_child.io.opt_opt_unit_flip.tag, _bundle_literal_expr_3.tag), eq(extern_child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) - connect extern_child_out.opt_opt_unit_flip, _bundle_structural_eq_19 @[module-XXXXXXXXXX.rs 15:1] + connect extern_child_out.opt_opt_unit, __enum_structural_eq_25 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_15: UInt<1> + connect _bundle_structural_eq_15, and(eq(extern_child.io.opt_opt_unit_flip.tag, _bundle_literal_expr_3.tag), eq(extern_child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) + connect extern_child_out.opt_opt_unit_flip, _bundle_structural_eq_15 @[module-XXXXXXXXXX.rs 15:1] connect extern_child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - connect extern_child_out.array_opt_bool, and(__enum_structural_eq_22, __enum_structural_eq_23) @[module-XXXXXXXXXX.rs 16:1] - wire _bundle_structural_eq_20: UInt<1> - connect _bundle_structural_eq_20, and(eq(extern_child.io.array_opt_bool_flip[0].tag, _array_literal_expr[0].tag), eq(extern_child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) - wire _bundle_structural_eq_21: UInt<1> - connect _bundle_structural_eq_21, and(eq(extern_child.io.array_opt_bool_flip[1].tag, _array_literal_expr[1].tag), eq(extern_child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) - connect extern_child_out.array_opt_bool_flip, and(_bundle_structural_eq_20, _bundle_structural_eq_21) @[module-XXXXXXXXXX.rs 16:1] + connect extern_child_out.array_opt_bool, and(__enum_structural_eq_26, __enum_structural_eq_27) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_16: UInt<1> + connect _bundle_structural_eq_16, and(eq(extern_child.io.array_opt_bool_flip[0].tag, _array_literal_expr[0].tag), eq(extern_child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) + wire _bundle_structural_eq_17: UInt<1> + connect _bundle_structural_eq_17, and(eq(extern_child.io.array_opt_bool_flip[1].tag, _array_literal_expr[1].tag), eq(extern_child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) + connect extern_child_out.array_opt_bool_flip, and(_bundle_structural_eq_16, _bundle_structural_eq_17) @[module-XXXXXXXXXX.rs 16:1] connect extern_child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - connect extern_child_out.struct_opt_bool, and(__enum_structural_eq_24, eq(extern_child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _bundle_structural_eq_22: UInt<1> - connect _bundle_structural_eq_22, and(eq(extern_child.io.struct_opt_bool_flip.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(extern_child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect extern_child_out.struct_opt_bool_flip, and(_bundle_structural_eq_22, eq(extern_child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect extern_child_out.struct_opt_bool, and(__enum_structural_eq_28, eq(extern_child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _bundle_structural_eq_18: UInt<1> + connect _bundle_structural_eq_18, and(eq(extern_child.io.struct_opt_bool_flip.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(extern_child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect extern_child_out.struct_opt_bool_flip, and(_bundle_structural_eq_18, eq(extern_child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect child.io.opt_unit_flip, _bundle_literal_expr @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_23: UInt<1> - connect _bundle_structural_eq_23, and(eq(child.io.opt_unit.tag, _bundle_literal_expr.tag), eq(child.io.opt_unit.body, _bundle_literal_expr.body)) - connect child_out.opt_unit, _bundle_structural_eq_23 @[module-XXXXXXXXXX.rs 13:1] - wire _bundle_structural_eq_24: UInt<1> - connect _bundle_structural_eq_24, and(eq(child.io.opt_unit_flip.tag, _bundle_literal_expr.tag), eq(child.io.opt_unit_flip.body, _bundle_literal_expr.body)) - connect child_out.opt_unit_flip, _bundle_structural_eq_24 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_19: UInt<1> + connect _bundle_structural_eq_19, and(eq(child.io.opt_unit.tag, _bundle_literal_expr.tag), eq(child.io.opt_unit.body, _bundle_literal_expr.body)) + connect child_out.opt_unit, _bundle_structural_eq_19 @[module-XXXXXXXXXX.rs 13:1] + wire _bundle_structural_eq_20: UInt<1> + connect _bundle_structural_eq_20, and(eq(child.io.opt_unit_flip.tag, _bundle_literal_expr.tag), eq(child.io.opt_unit_flip.body, _bundle_literal_expr.body)) + connect child_out.opt_unit_flip, _bundle_structural_eq_20 @[module-XXXXXXXXXX.rs 13:1] connect child.io.opt_bool_flip, _bundle_literal_expr_2 @[module-XXXXXXXXXX.rs 14:1] - wire _bundle_structural_eq_25: UInt<1> - connect _bundle_structural_eq_25, and(eq(child.io.opt_bool.tag, _bundle_literal_expr_2.tag), eq(child.io.opt_bool.body, _bundle_literal_expr_2.body)) - connect child_out.opt_bool, _bundle_structural_eq_25 @[module-XXXXXXXXXX.rs 14:1] - wire _bundle_structural_eq_26: UInt<1> - connect _bundle_structural_eq_26, and(eq(child.io.opt_bool_flip.tag, _bundle_literal_expr_2.tag), eq(child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) - connect child_out.opt_bool_flip, _bundle_structural_eq_26 @[module-XXXXXXXXXX.rs 14:1] + wire _bundle_structural_eq_21: UInt<1> + connect _bundle_structural_eq_21, and(eq(child.io.opt_bool.tag, _bundle_literal_expr_2.tag), eq(child.io.opt_bool.body, _bundle_literal_expr_2.body)) + connect child_out.opt_bool, _bundle_structural_eq_21 @[module-XXXXXXXXXX.rs 14:1] + wire _bundle_structural_eq_22: UInt<1> + connect _bundle_structural_eq_22, and(eq(child.io.opt_bool_flip.tag, _bundle_literal_expr_2.tag), eq(child.io.opt_bool_flip.body, _bundle_literal_expr_2.body)) + connect child_out.opt_bool_flip, _bundle_structural_eq_22 @[module-XXXXXXXXXX.rs 14:1] connect child.io.opt_opt_unit_flip, _bundle_literal_expr_3 @[module-XXXXXXXXXX.rs 15:1] - wire _bundle_structural_eq_27: UInt<1> - connect _bundle_structural_eq_27, and(eq(child.io.opt_opt_unit.tag, _bundle_literal_expr_3.tag), eq(child.io.opt_opt_unit.body, _bundle_literal_expr_3.body)) - connect child_out.opt_opt_unit, _bundle_structural_eq_27 @[module-XXXXXXXXXX.rs 15:1] - wire _bundle_structural_eq_28: UInt<1> - connect _bundle_structural_eq_28, and(eq(child.io.opt_opt_unit_flip.tag, _bundle_literal_expr_3.tag), eq(child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) - connect child_out.opt_opt_unit_flip, _bundle_structural_eq_28 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_23: UInt<1> + connect _bundle_structural_eq_23, and(eq(child.io.opt_opt_unit.tag, _bundle_literal_expr_3.tag), eq(child.io.opt_opt_unit.body, _bundle_literal_expr_3.body)) + connect child_out.opt_opt_unit, _bundle_structural_eq_23 @[module-XXXXXXXXXX.rs 15:1] + wire _bundle_structural_eq_24: UInt<1> + connect _bundle_structural_eq_24, and(eq(child.io.opt_opt_unit_flip.tag, _bundle_literal_expr_3.tag), eq(child.io.opt_opt_unit_flip.body, _bundle_literal_expr_3.body)) + connect child_out.opt_opt_unit_flip, _bundle_structural_eq_24 @[module-XXXXXXXXXX.rs 15:1] connect child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - wire _bundle_structural_eq_29: UInt<1> - connect _bundle_structural_eq_29, and(eq(child.io.array_opt_bool[0].tag, _array_literal_expr[0].tag), eq(child.io.array_opt_bool[0].body, _array_literal_expr[0].body)) - wire _bundle_structural_eq_30: UInt<1> - connect _bundle_structural_eq_30, and(eq(child.io.array_opt_bool[1].tag, _array_literal_expr[1].tag), eq(child.io.array_opt_bool[1].body, _array_literal_expr[1].body)) - connect child_out.array_opt_bool, and(_bundle_structural_eq_29, _bundle_structural_eq_30) @[module-XXXXXXXXXX.rs 16:1] - wire _bundle_structural_eq_31: UInt<1> - connect _bundle_structural_eq_31, and(eq(child.io.array_opt_bool_flip[0].tag, _array_literal_expr[0].tag), eq(child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) - wire _bundle_structural_eq_32: UInt<1> - connect _bundle_structural_eq_32, and(eq(child.io.array_opt_bool_flip[1].tag, _array_literal_expr[1].tag), eq(child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) - connect child_out.array_opt_bool_flip, and(_bundle_structural_eq_31, _bundle_structural_eq_32) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_25: UInt<1> + connect _bundle_structural_eq_25, and(eq(child.io.array_opt_bool[0].tag, _array_literal_expr[0].tag), eq(child.io.array_opt_bool[0].body, _array_literal_expr[0].body)) + wire _bundle_structural_eq_26: UInt<1> + connect _bundle_structural_eq_26, and(eq(child.io.array_opt_bool[1].tag, _array_literal_expr[1].tag), eq(child.io.array_opt_bool[1].body, _array_literal_expr[1].body)) + connect child_out.array_opt_bool, and(_bundle_structural_eq_25, _bundle_structural_eq_26) @[module-XXXXXXXXXX.rs 16:1] + wire _bundle_structural_eq_27: UInt<1> + connect _bundle_structural_eq_27, and(eq(child.io.array_opt_bool_flip[0].tag, _array_literal_expr[0].tag), eq(child.io.array_opt_bool_flip[0].body, _array_literal_expr[0].body)) + wire _bundle_structural_eq_28: UInt<1> + connect _bundle_structural_eq_28, and(eq(child.io.array_opt_bool_flip[1].tag, _array_literal_expr[1].tag), eq(child.io.array_opt_bool_flip[1].body, _array_literal_expr[1].body)) + connect child_out.array_opt_bool_flip, and(_bundle_structural_eq_27, _bundle_structural_eq_28) @[module-XXXXXXXXXX.rs 16:1] connect child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - wire _bundle_structural_eq_33: UInt<1> - connect _bundle_structural_eq_33, and(eq(child.io.struct_opt_bool.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(child.io.struct_opt_bool.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect child_out.struct_opt_bool, and(_bundle_structural_eq_33, eq(child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] - wire _bundle_structural_eq_34: UInt<1> - connect _bundle_structural_eq_34, and(eq(child.io.struct_opt_bool_flip.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) - connect child_out.struct_opt_bool_flip, and(_bundle_structural_eq_34, eq(child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _bundle_structural_eq_29: UInt<1> + connect _bundle_structural_eq_29, and(eq(child.io.struct_opt_bool.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(child.io.struct_opt_bool.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect child_out.struct_opt_bool, and(_bundle_structural_eq_29, eq(child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + wire _bundle_structural_eq_30: UInt<1> + connect _bundle_structural_eq_30, and(eq(child.io.struct_opt_bool_flip.`0`.tag, _bundle_literal_expr_5.`0`.tag), eq(child.io.struct_opt_bool_flip.`0`.body, _bundle_literal_expr_5.`0`.body)) + connect child_out.struct_opt_bool_flip, and(_bundle_structural_eq_30, eq(child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect __enum_structural_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io.opt_bool.tag, _bundle_literal_expr_2.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.opt_unit.tag, _bundle_literal_expr.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq, eq(bits(io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_11: Ty5 + invalidate _cast_bits_to_bundle_expr_11 + wire _cast_bits_to_bundle_expr_12: Ty5 + invalidate _cast_bits_to_bundle_expr_12 + connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_1, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io.opt_opt_unit.tag, _bundle_literal_expr_3.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.opt_bool.tag, _bundle_literal_expr_2.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_1, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - wire __enum_structural_eq_25: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_1, __enum_structural_eq_25 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_25, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_11: Ty0 - wire _cast_bits_to_bundle_expr_flattened_11: Ty0 - connect _cast_bits_to_bundle_expr_flattened_11.tag, bits(bits(io.opt_opt_unit.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_11.tag, _cast_bits_to_bundle_expr_flattened_11.tag - connect _cast_bits_to_bundle_expr_flattened_11.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_11.body, _cast_bits_to_bundle_expr_flattened_11.body - wire _cast_bits_to_bundle_expr_12: Ty0 - wire _cast_bits_to_bundle_expr_flattened_12: Ty0 - connect _cast_bits_to_bundle_expr_flattened_12.tag, bits(bits(_bundle_literal_expr_3.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_12.tag, _cast_bits_to_bundle_expr_flattened_12.tag - connect _cast_bits_to_bundle_expr_flattened_12.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_12.body, _cast_bits_to_bundle_expr_flattened_12.body - when eq(_cast_bits_to_bundle_expr_11.tag, _cast_bits_to_bundle_expr_12.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(_cast_bits_to_bundle_expr_11.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_13: Ty5 - invalidate _cast_bits_to_bundle_expr_13 - wire _cast_bits_to_bundle_expr_14: Ty5 - invalidate _cast_bits_to_bundle_expr_14 - connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_1, eq(bits(io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_2, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io.array_opt_bool[0].tag, _array_literal_expr[0].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.opt_opt_unit.tag, _bundle_literal_expr_3.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_2, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_2, eq(bits(io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_29: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_2, __enum_structural_eq_29 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_13: Ty0 + wire _cast_bits_to_bundle_expr_flattened_11: Ty0 + connect _cast_bits_to_bundle_expr_flattened_11.tag, bits(bits(io.opt_opt_unit.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_13.tag, _cast_bits_to_bundle_expr_flattened_11.tag + connect _cast_bits_to_bundle_expr_flattened_11.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_13.body, _cast_bits_to_bundle_expr_flattened_11.body + wire _cast_bits_to_bundle_expr_14: Ty0 + wire _cast_bits_to_bundle_expr_flattened_12: Ty0 + connect _cast_bits_to_bundle_expr_flattened_12.tag, bits(bits(_bundle_literal_expr_3.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_14.tag, _cast_bits_to_bundle_expr_flattened_12.tag + connect _cast_bits_to_bundle_expr_flattened_12.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_14.body, _cast_bits_to_bundle_expr_flattened_12.body + when eq(_cast_bits_to_bundle_expr_13.tag, _cast_bits_to_bundle_expr_14.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_bits_to_bundle_expr_13.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_15: Ty5 + invalidate _cast_bits_to_bundle_expr_15 + wire _cast_bits_to_bundle_expr_16: Ty5 + invalidate _cast_bits_to_bundle_expr_16 + connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_3, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io.array_opt_bool[1].tag, _array_literal_expr[1].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.array_opt_bool[0].tag, _array_literal_expr[0].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_3, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_3, eq(bits(io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_3, eq(bits(io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_4, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io.struct_opt_bool.`0`.tag, _bundle_literal_expr_5.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.array_opt_bool[1].tag, _array_literal_expr[1].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_4, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_4, eq(bits(io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_4, eq(bits(io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_5, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.opt_bool.tag, _cast_bits_to_bundle_expr_1.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.struct_opt_bool.`0`.tag, _bundle_literal_expr_5.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_5, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_5, eq(bits(io_zeros.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_1.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_5, eq(bits(io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_6, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.opt_opt_unit.tag, _cast_bits_to_bundle_expr_1.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.opt_unit.tag, _cast_bits_to_bundle_expr.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - wire __enum_structural_eq_26: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_6, __enum_structural_eq_26 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_26, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_15: Ty0 - wire _cast_bits_to_bundle_expr_flattened_13: Ty0 - connect _cast_bits_to_bundle_expr_flattened_13.tag, bits(bits(io_zeros.opt_opt_unit.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_15.tag, _cast_bits_to_bundle_expr_flattened_13.tag - connect _cast_bits_to_bundle_expr_flattened_13.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_15.body, _cast_bits_to_bundle_expr_flattened_13.body - wire _cast_bits_to_bundle_expr_16: Ty0 - wire _cast_bits_to_bundle_expr_flattened_14: Ty0 - connect _cast_bits_to_bundle_expr_flattened_14.tag, bits(bits(_cast_bits_to_bundle_expr_1.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_16.tag, _cast_bits_to_bundle_expr_flattened_14.tag - connect _cast_bits_to_bundle_expr_flattened_14.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_16.body, _cast_bits_to_bundle_expr_flattened_14.body - when eq(_cast_bits_to_bundle_expr_15.tag, _cast_bits_to_bundle_expr_16.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(_cast_bits_to_bundle_expr_15.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_17: Ty5 - invalidate _cast_bits_to_bundle_expr_17 - wire _cast_bits_to_bundle_expr_18: Ty5 - invalidate _cast_bits_to_bundle_expr_18 - connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_17: Ty5 + invalidate _cast_bits_to_bundle_expr_17 + wire _cast_bits_to_bundle_expr_18: Ty5 + invalidate _cast_bits_to_bundle_expr_18 + connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_7, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.array_opt_bool[0].tag, _cast_bits_to_array_expr[0].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.opt_bool.tag, _cast_bits_to_bundle_expr_1.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_7, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_7, eq(bits(io_zeros.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_7, eq(bits(io_zeros.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_1.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_8, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.array_opt_bool[1].tag, _cast_bits_to_array_expr[1].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.opt_opt_unit.tag, _cast_bits_to_bundle_expr_1.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_8, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_8, eq(bits(io_zeros.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_9, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.struct_opt_bool.`0`.tag, _cast_bits_to_bundle_expr_4.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_zeros.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_9, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_9, eq(bits(io_zeros.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_4.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_10, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_bool.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_10, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_10, eq(bits(io_alternating.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_11, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_bool_flip.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_bool_flip.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_11, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_11, eq(bits(io_alternating.opt_bool_flip.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_opt_unit.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire __enum_structural_eq_27: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, __enum_structural_eq_27 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_27, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_30: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_8, __enum_structural_eq_30 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] wire _cast_bits_to_bundle_expr_19: Ty0 - wire _cast_bits_to_bundle_expr_flattened_15: Ty0 - connect _cast_bits_to_bundle_expr_flattened_15.tag, bits(bits(io_alternating.opt_opt_unit.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_19.tag, _cast_bits_to_bundle_expr_flattened_15.tag - connect _cast_bits_to_bundle_expr_flattened_15.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_19.body, _cast_bits_to_bundle_expr_flattened_15.body + wire _cast_bits_to_bundle_expr_flattened_13: Ty0 + connect _cast_bits_to_bundle_expr_flattened_13.tag, bits(bits(io_zeros.opt_opt_unit.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_19.tag, _cast_bits_to_bundle_expr_flattened_13.tag + connect _cast_bits_to_bundle_expr_flattened_13.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_19.body, _cast_bits_to_bundle_expr_flattened_13.body wire _cast_bits_to_bundle_expr_20: Ty0 - wire _cast_bits_to_bundle_expr_flattened_16: Ty0 - connect _cast_bits_to_bundle_expr_flattened_16.tag, bits(bits(_cast_bits_to_bundle_expr_6.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_20.tag, _cast_bits_to_bundle_expr_flattened_16.tag - connect _cast_bits_to_bundle_expr_flattened_16.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_20.body, _cast_bits_to_bundle_expr_flattened_16.body + wire _cast_bits_to_bundle_expr_flattened_14: Ty0 + connect _cast_bits_to_bundle_expr_flattened_14.tag, bits(bits(_cast_bits_to_bundle_expr_1.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_20.tag, _cast_bits_to_bundle_expr_flattened_14.tag + connect _cast_bits_to_bundle_expr_flattened_14.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_20.body, _cast_bits_to_bundle_expr_flattened_14.body when eq(_cast_bits_to_bundle_expr_19.tag, _cast_bits_to_bundle_expr_20.tag): @[module-XXXXXXXXXX.rs 1:1] when eq(_cast_bits_to_bundle_expr_19.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: wire _cast_bits_to_bundle_expr_21: Ty5 invalidate _cast_bits_to_bundle_expr_21 wire _cast_bits_to_bundle_expr_22: Ty5 invalidate _cast_bits_to_bundle_expr_22 - connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_9, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.array_opt_bool[0].tag, _cast_bits_to_array_expr[0].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_9, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_9, eq(bits(io_zeros.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_10, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.array_opt_bool[1].tag, _cast_bits_to_array_expr[1].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_10, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_10, eq(bits(io_zeros.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.struct_opt_bool.`0`.tag, _cast_bits_to_bundle_expr_4.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_zeros.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_11, eq(bits(io_zeros.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_4.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_12, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_unit.tag, _cast_bits_to_bundle_expr.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_23: Ty5 + invalidate _cast_bits_to_bundle_expr_23 + wire _cast_bits_to_bundle_expr_24: Ty5 + invalidate _cast_bits_to_bundle_expr_24 + connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_13, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_opt_unit_flip.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.opt_opt_unit_flip.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_bool.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_13, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - wire __enum_structural_eq_28: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_13, __enum_structural_eq_28 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_28, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_23: Ty0 - wire _cast_bits_to_bundle_expr_flattened_17: Ty0 - connect _cast_bits_to_bundle_expr_flattened_17.tag, bits(bits(io_alternating.opt_opt_unit_flip.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_23.tag, _cast_bits_to_bundle_expr_flattened_17.tag - connect _cast_bits_to_bundle_expr_flattened_17.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_23.body, _cast_bits_to_bundle_expr_flattened_17.body - wire _cast_bits_to_bundle_expr_24: Ty0 - wire _cast_bits_to_bundle_expr_flattened_18: Ty0 - connect _cast_bits_to_bundle_expr_flattened_18.tag, bits(bits(_cast_bits_to_bundle_expr_6.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_24.tag, _cast_bits_to_bundle_expr_flattened_18.tag - connect _cast_bits_to_bundle_expr_flattened_18.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_24.body, _cast_bits_to_bundle_expr_flattened_18.body - when eq(_cast_bits_to_bundle_expr_23.tag, _cast_bits_to_bundle_expr_24.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(_cast_bits_to_bundle_expr_23.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_25: Ty5 - invalidate _cast_bits_to_bundle_expr_25 - wire _cast_bits_to_bundle_expr_26: Ty5 - invalidate _cast_bits_to_bundle_expr_26 - connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_13, eq(bits(io_alternating.opt_bool.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_14, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool[0].tag, _cast_bits_to_array_expr_1[0].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_bool_flip.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_bool_flip.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_14, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_14, eq(bits(io_alternating.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_14, eq(bits(io_alternating.opt_bool_flip.body, 0, 0), bits(_cast_bits_to_bundle_expr_6.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_15, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool[1].tag, _cast_bits_to_array_expr_1[1].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_opt_unit.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_15, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_15, eq(bits(io_alternating.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_31: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_15, __enum_structural_eq_31 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_31, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_25: Ty0 + wire _cast_bits_to_bundle_expr_flattened_15: Ty0 + connect _cast_bits_to_bundle_expr_flattened_15.tag, bits(bits(io_alternating.opt_opt_unit.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_25.tag, _cast_bits_to_bundle_expr_flattened_15.tag + connect _cast_bits_to_bundle_expr_flattened_15.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_25.body, _cast_bits_to_bundle_expr_flattened_15.body + wire _cast_bits_to_bundle_expr_26: Ty0 + wire _cast_bits_to_bundle_expr_flattened_16: Ty0 + connect _cast_bits_to_bundle_expr_flattened_16.tag, bits(bits(_cast_bits_to_bundle_expr_6.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_26.tag, _cast_bits_to_bundle_expr_flattened_16.tag + connect _cast_bits_to_bundle_expr_flattened_16.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_26.body, _cast_bits_to_bundle_expr_flattened_16.body + when eq(_cast_bits_to_bundle_expr_25.tag, _cast_bits_to_bundle_expr_26.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_bits_to_bundle_expr_25.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_31, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_27: Ty5 + invalidate _cast_bits_to_bundle_expr_27 + wire _cast_bits_to_bundle_expr_28: Ty5 + invalidate _cast_bits_to_bundle_expr_28 + connect __enum_structural_eq_31, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_16, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool_flip[0].tag, _cast_bits_to_array_expr_1[0].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool_flip[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_opt_unit_flip.tag, _cast_bits_to_bundle_expr_6.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.opt_opt_unit_flip.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_16, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_16, eq(bits(io_alternating.array_opt_bool_flip[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_32: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_16, __enum_structural_eq_32 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_32, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_29: Ty0 + wire _cast_bits_to_bundle_expr_flattened_17: Ty0 + connect _cast_bits_to_bundle_expr_flattened_17.tag, bits(bits(io_alternating.opt_opt_unit_flip.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_29.tag, _cast_bits_to_bundle_expr_flattened_17.tag + connect _cast_bits_to_bundle_expr_flattened_17.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_29.body, _cast_bits_to_bundle_expr_flattened_17.body + wire _cast_bits_to_bundle_expr_30: Ty0 + wire _cast_bits_to_bundle_expr_flattened_18: Ty0 + connect _cast_bits_to_bundle_expr_flattened_18.tag, bits(bits(_cast_bits_to_bundle_expr_6.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_30.tag, _cast_bits_to_bundle_expr_flattened_18.tag + connect _cast_bits_to_bundle_expr_flattened_18.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_30.body, _cast_bits_to_bundle_expr_flattened_18.body + when eq(_cast_bits_to_bundle_expr_29.tag, _cast_bits_to_bundle_expr_30.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_bits_to_bundle_expr_29.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_32, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_31: Ty5 + invalidate _cast_bits_to_bundle_expr_31 + wire _cast_bits_to_bundle_expr_32: Ty5 + invalidate _cast_bits_to_bundle_expr_32 + connect __enum_structural_eq_32, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_17, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool_flip[1].tag, _cast_bits_to_array_expr_1[1].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.array_opt_bool_flip[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool[0].tag, _cast_bits_to_array_expr_1[0].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_17, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_17, eq(bits(io_alternating.array_opt_bool_flip[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_17, eq(bits(io_alternating.array_opt_bool[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_18, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.struct_opt_bool.`0`.tag, _cast_bits_to_bundle_expr_9.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool[1].tag, _cast_bits_to_array_expr_1[1].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_18, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_18, eq(bits(io_alternating.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_18, eq(bits(io_alternating.array_opt_bool[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_19, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.struct_opt_bool_flip.`0`.tag, _cast_bits_to_bundle_expr_9.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(io_alternating.struct_opt_bool_flip.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool_flip[0].tag, _cast_bits_to_array_expr_1[0].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool_flip[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_19, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_19, eq(bits(io_alternating.struct_opt_bool_flip.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_19, eq(bits(io_alternating.array_opt_bool_flip[0].body, 0, 0), bits(_cast_bits_to_array_expr_1[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_20, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.opt_bool.tag, _bundle_literal_expr_2.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool_flip[1].tag, _cast_bits_to_array_expr_1[1].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.array_opt_bool_flip[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_20, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_20, eq(bits(extern_child.io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_20, eq(bits(io_alternating.array_opt_bool_flip[1].body, 0, 0), bits(_cast_bits_to_array_expr_1[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_21, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.opt_opt_unit.tag, _bundle_literal_expr_3.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.struct_opt_bool.`0`.tag, _cast_bits_to_bundle_expr_9.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_21, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - wire __enum_structural_eq_29: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_21, __enum_structural_eq_29 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_29, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - wire _cast_bits_to_bundle_expr_27: Ty0 - wire _cast_bits_to_bundle_expr_flattened_19: Ty0 - connect _cast_bits_to_bundle_expr_flattened_19.tag, bits(bits(extern_child.io.opt_opt_unit.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_27.tag, _cast_bits_to_bundle_expr_flattened_19.tag - connect _cast_bits_to_bundle_expr_flattened_19.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_27.body, _cast_bits_to_bundle_expr_flattened_19.body - wire _cast_bits_to_bundle_expr_28: Ty0 - wire _cast_bits_to_bundle_expr_flattened_20: Ty0 - connect _cast_bits_to_bundle_expr_flattened_20.tag, bits(bits(_bundle_literal_expr_3.body, 0, 0), 0, 0) - connect _cast_bits_to_bundle_expr_28.tag, _cast_bits_to_bundle_expr_flattened_20.tag - connect _cast_bits_to_bundle_expr_flattened_20.body, UInt<0>(0) - connect _cast_bits_to_bundle_expr_28.body, _cast_bits_to_bundle_expr_flattened_20.body - when eq(_cast_bits_to_bundle_expr_27.tag, _cast_bits_to_bundle_expr_28.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(_cast_bits_to_bundle_expr_27.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_29: Ty5 - invalidate _cast_bits_to_bundle_expr_29 - wire _cast_bits_to_bundle_expr_30: Ty5 - invalidate _cast_bits_to_bundle_expr_30 - connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_21, eq(bits(io_alternating.struct_opt_bool.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_22, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.array_opt_bool[0].tag, _array_literal_expr[0].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.struct_opt_bool_flip.`0`.tag, _cast_bits_to_bundle_expr_9.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(io_alternating.struct_opt_bool_flip.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_22, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_22, eq(bits(extern_child.io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_22, eq(bits(io_alternating.struct_opt_bool_flip.`0`.body, 0, 0), bits(_cast_bits_to_bundle_expr_9.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_23, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.array_opt_bool[1].tag, _array_literal_expr[1].tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.opt_unit.tag, _bundle_literal_expr.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_23, eq(bits(extern_child.io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_33: Ty5 + invalidate _cast_bits_to_bundle_expr_33 + wire _cast_bits_to_bundle_expr_34: Ty5 + invalidate _cast_bits_to_bundle_expr_34 + connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_24, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.struct_opt_bool.`0`.tag, _bundle_literal_expr_5.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] - when eq(extern_child.io.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.opt_bool.tag, _bundle_literal_expr_2.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.opt_bool.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_24, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_24, eq(bits(extern_child.io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_24, eq(bits(extern_child.io.opt_bool.body, 0, 0), bits(_bundle_literal_expr_2.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.opt_opt_unit.tag, _bundle_literal_expr_3.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.opt_opt_unit.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire __enum_structural_eq_33: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, __enum_structural_eq_33 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_33, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_35: Ty0 + wire _cast_bits_to_bundle_expr_flattened_19: Ty0 + connect _cast_bits_to_bundle_expr_flattened_19.tag, bits(bits(extern_child.io.opt_opt_unit.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_35.tag, _cast_bits_to_bundle_expr_flattened_19.tag + connect _cast_bits_to_bundle_expr_flattened_19.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_35.body, _cast_bits_to_bundle_expr_flattened_19.body + wire _cast_bits_to_bundle_expr_36: Ty0 + wire _cast_bits_to_bundle_expr_flattened_20: Ty0 + connect _cast_bits_to_bundle_expr_flattened_20.tag, bits(bits(_bundle_literal_expr_3.body, 0, 0), 0, 0) + connect _cast_bits_to_bundle_expr_36.tag, _cast_bits_to_bundle_expr_flattened_20.tag + connect _cast_bits_to_bundle_expr_flattened_20.body, UInt<0>(0) + connect _cast_bits_to_bundle_expr_36.body, _cast_bits_to_bundle_expr_flattened_20.body + when eq(_cast_bits_to_bundle_expr_35.tag, _cast_bits_to_bundle_expr_36.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(_cast_bits_to_bundle_expr_35.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_33, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_37: Ty5 + invalidate _cast_bits_to_bundle_expr_37 + wire _cast_bits_to_bundle_expr_38: Ty5 + invalidate _cast_bits_to_bundle_expr_38 + connect __enum_structural_eq_33, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.array_opt_bool[0].tag, _array_literal_expr[0].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.array_opt_bool[0].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_26, eq(bits(extern_child.io.array_opt_bool[0].body, 0, 0), bits(_array_literal_expr[0].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.array_opt_bool[1].tag, _array_literal_expr[1].tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.array_opt_bool[1].tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_27, eq(bits(extern_child.io.array_opt_bool[1].body, 0, 0), bits(_array_literal_expr[1].body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.struct_opt_bool.`0`.tag, _bundle_literal_expr_5.`0`.tag): @[module-XXXXXXXXXX.rs 1:1] + when eq(extern_child.io.struct_opt_bool.`0`.tag, UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_28, eq(bits(extern_child.io.struct_opt_bool.`0`.body, 0, 0), bits(_bundle_literal_expr_5.`0`.body, 0, 0)) @[module-XXXXXXXXXX.rs 1:1] extmodule check_deduce_structural_eq_flags_extern_child: @[module-XXXXXXXXXX-2.rs 1:1] output io: Ty3 @[module-XXXXXXXXXX-2.rs 2:1] defname = check_deduce_structural_eq_flags_extern_child @@ -3766,6 +3842,10 @@ circuit check_deduce_structural_eq_flags_parent: wire __enum_structural_eq_22: UInt<1> @[module-XXXXXXXXXX.rs 1:1] wire __enum_structural_eq_23: UInt<1> @[module-XXXXXXXXXX.rs 1:1] wire __enum_structural_eq_24: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_25: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_26: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_27: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_28: UInt<1> @[module-XXXXXXXXXX.rs 1:1] inst extern_child of check_deduce_structural_eq_flags_extern_child @[module-XXXXXXXXXX.rs 10:1] inst child of check_deduce_structural_eq_flags_child @[module-XXXXXXXXXX.rs 11:1] wire _bundle_literal_expr: Ty3 @@ -3779,7 +3859,7 @@ circuit check_deduce_structural_eq_flags_parent: wire _cast_to_bits_expr: UInt<1> connect _cast_to_bits_expr, cat(_cast_bundle_to_bits_expr.body, _cast_bundle_to_bits_expr.tag) connect io.opt_unit_flip, _cast_to_bits_expr @[module-XXXXXXXXXX.rs 13:1] - connect parent_out.opt_unit, eq(io.opt_unit, _cast_to_bits_expr) @[module-XXXXXXXXXX.rs 13:1] + connect parent_out.opt_unit, __enum_structural_eq @[module-XXXXXXXXXX.rs 13:1] connect parent_out.opt_unit_flip, eq(io.opt_unit_flip, _cast_to_bits_expr) @[module-XXXXXXXXXX.rs 13:1] wire _bundle_literal_expr_2: Ty5 connect _bundle_literal_expr_2.tag, UInt<1>(0h1) @@ -3790,7 +3870,7 @@ circuit check_deduce_structural_eq_flags_parent: wire _cast_to_bits_expr_1: UInt<2> connect _cast_to_bits_expr_1, cat(_cast_bundle_to_bits_expr_1.body, _cast_bundle_to_bits_expr_1.tag) connect io.opt_bool_flip, _cast_to_bits_expr_1 @[module-XXXXXXXXXX.rs 14:1] - connect parent_out.opt_bool, __enum_structural_eq @[module-XXXXXXXXXX.rs 14:1] + connect parent_out.opt_bool, __enum_structural_eq_1 @[module-XXXXXXXXXX.rs 14:1] connect parent_out.opt_bool_flip, eq(io.opt_bool_flip, _cast_to_bits_expr_1) @[module-XXXXXXXXXX.rs 14:1] wire _bundle_literal_expr_3: Ty5 connect _bundle_literal_expr_3.tag, UInt<1>(0h1) @@ -3801,7 +3881,7 @@ circuit check_deduce_structural_eq_flags_parent: wire _cast_to_bits_expr_2: UInt<2> connect _cast_to_bits_expr_2, cat(_cast_bundle_to_bits_expr_2.body, _cast_bundle_to_bits_expr_2.tag) connect io.opt_opt_unit_flip, _cast_to_bits_expr_2 @[module-XXXXXXXXXX.rs 15:1] - connect parent_out.opt_opt_unit, __enum_structural_eq_1 @[module-XXXXXXXXXX.rs 15:1] + connect parent_out.opt_opt_unit, __enum_structural_eq_2 @[module-XXXXXXXXXX.rs 15:1] connect parent_out.opt_opt_unit_flip, eq(io.opt_opt_unit_flip, _cast_to_bits_expr_2) @[module-XXXXXXXXXX.rs 15:1] wire _array_literal_expr: UInt<2>[2] wire _bundle_literal_expr_4: Ty5 @@ -3815,22 +3895,22 @@ circuit check_deduce_structural_eq_flags_parent: connect _array_literal_expr[0], _cast_to_bits_expr_3 connect _array_literal_expr[1], _cast_to_bits_expr_1 connect io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - connect parent_out.array_opt_bool, and(__enum_structural_eq_2, __enum_structural_eq_3) @[module-XXXXXXXXXX.rs 16:1] + connect parent_out.array_opt_bool, and(__enum_structural_eq_3, __enum_structural_eq_4) @[module-XXXXXXXXXX.rs 16:1] connect parent_out.array_opt_bool_flip, and(eq(io.array_opt_bool_flip[0], _array_literal_expr[0]), eq(io.array_opt_bool_flip[1], _array_literal_expr[1])) @[module-XXXXXXXXXX.rs 16:1] wire _bundle_literal_expr_5: Ty0 connect _bundle_literal_expr_5.`0`, _cast_to_bits_expr_1 connect _bundle_literal_expr_5.`1`, UInt<1>(0h1) connect io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - connect parent_out.struct_opt_bool, and(__enum_structural_eq_4, eq(io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_out.struct_opt_bool, and(__enum_structural_eq_5, eq(io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect parent_out.struct_opt_bool_flip, and(eq(io.struct_opt_bool_flip.`0`, _bundle_literal_expr_5.`0`), eq(io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect io_zeros.opt_unit_flip, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 13:1] - connect parent_zeros_out.opt_unit, eq(io_zeros.opt_unit, UInt<1>(0h0)) @[module-XXXXXXXXXX.rs 13:1] + connect parent_zeros_out.opt_unit, __enum_structural_eq_6 @[module-XXXXXXXXXX.rs 13:1] connect parent_zeros_out.opt_unit_flip, eq(io_zeros.opt_unit_flip, UInt<1>(0h0)) @[module-XXXXXXXXXX.rs 13:1] connect io_zeros.opt_bool_flip, UInt<2>(0h0) @[module-XXXXXXXXXX.rs 14:1] - connect parent_zeros_out.opt_bool, __enum_structural_eq_5 @[module-XXXXXXXXXX.rs 14:1] + connect parent_zeros_out.opt_bool, __enum_structural_eq_7 @[module-XXXXXXXXXX.rs 14:1] connect parent_zeros_out.opt_bool_flip, eq(io_zeros.opt_bool_flip, UInt<2>(0h0)) @[module-XXXXXXXXXX.rs 14:1] connect io_zeros.opt_opt_unit_flip, UInt<2>(0h0) @[module-XXXXXXXXXX.rs 15:1] - connect parent_zeros_out.opt_opt_unit, __enum_structural_eq_6 @[module-XXXXXXXXXX.rs 15:1] + connect parent_zeros_out.opt_opt_unit, __enum_structural_eq_8 @[module-XXXXXXXXXX.rs 15:1] connect parent_zeros_out.opt_opt_unit_flip, eq(io_zeros.opt_opt_unit_flip, UInt<2>(0h0)) @[module-XXXXXXXXXX.rs 15:1] wire _cast_bits_to_array_expr: UInt<2>[2] wire _cast_bits_to_array_expr_flattened: UInt<2>[2] @@ -3839,7 +3919,7 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_array_expr_flattened[1], bits(UInt<4>(0h0), 3, 2) connect _cast_bits_to_array_expr[1], _cast_bits_to_array_expr_flattened[1] connect io_zeros.array_opt_bool_flip, _cast_bits_to_array_expr @[module-XXXXXXXXXX.rs 16:1] - connect parent_zeros_out.array_opt_bool, and(__enum_structural_eq_7, __enum_structural_eq_8) @[module-XXXXXXXXXX.rs 16:1] + connect parent_zeros_out.array_opt_bool, and(__enum_structural_eq_9, __enum_structural_eq_10) @[module-XXXXXXXXXX.rs 16:1] connect parent_zeros_out.array_opt_bool_flip, and(eq(io_zeros.array_opt_bool_flip[0], _cast_bits_to_array_expr[0]), eq(io_zeros.array_opt_bool_flip[1], _cast_bits_to_array_expr[1])) @[module-XXXXXXXXXX.rs 16:1] wire _cast_bits_to_bundle_expr: Ty0 wire _cast_bits_to_bundle_expr_flattened: Ty6 @@ -3848,17 +3928,17 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened.`1`, bits(UInt<3>(0h0), 2, 2) connect _cast_bits_to_bundle_expr.`1`, _cast_bits_to_bundle_expr_flattened.`1` connect io_zeros.struct_opt_bool_flip, _cast_bits_to_bundle_expr @[module-XXXXXXXXXX.rs 17:1] - connect parent_zeros_out.struct_opt_bool, and(__enum_structural_eq_9, eq(io_zeros.struct_opt_bool.`1`, _cast_bits_to_bundle_expr.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_zeros_out.struct_opt_bool, and(__enum_structural_eq_11, eq(io_zeros.struct_opt_bool.`1`, _cast_bits_to_bundle_expr.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect parent_zeros_out.struct_opt_bool_flip, and(eq(io_zeros.struct_opt_bool_flip.`0`, _cast_bits_to_bundle_expr.`0`), eq(io_zeros.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect io_alternating.opt_unit_flip, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 13:1] - connect parent_alternating_out.opt_unit, eq(io_alternating.opt_unit, UInt<1>(0h0)) @[module-XXXXXXXXXX.rs 13:1] + connect parent_alternating_out.opt_unit, __enum_structural_eq_12 @[module-XXXXXXXXXX.rs 13:1] connect parent_alternating_out.opt_unit_flip, eq(io_alternating.opt_unit_flip, UInt<1>(0h0)) @[module-XXXXXXXXXX.rs 13:1] connect io_alternating.opt_bool_flip, UInt<2>(0h2) @[module-XXXXXXXXXX.rs 14:1] - connect parent_alternating_out.opt_bool, __enum_structural_eq_10 @[module-XXXXXXXXXX.rs 14:1] - connect parent_alternating_out.opt_bool_flip, __enum_structural_eq_11 @[module-XXXXXXXXXX.rs 14:1] + connect parent_alternating_out.opt_bool, __enum_structural_eq_13 @[module-XXXXXXXXXX.rs 14:1] + connect parent_alternating_out.opt_bool_flip, __enum_structural_eq_14 @[module-XXXXXXXXXX.rs 14:1] connect io_alternating.opt_opt_unit_flip, UInt<2>(0h2) @[module-XXXXXXXXXX.rs 15:1] - connect parent_alternating_out.opt_opt_unit, __enum_structural_eq_12 @[module-XXXXXXXXXX.rs 15:1] - connect parent_alternating_out.opt_opt_unit_flip, __enum_structural_eq_13 @[module-XXXXXXXXXX.rs 15:1] + connect parent_alternating_out.opt_opt_unit, __enum_structural_eq_15 @[module-XXXXXXXXXX.rs 15:1] + connect parent_alternating_out.opt_opt_unit_flip, __enum_structural_eq_16 @[module-XXXXXXXXXX.rs 15:1] wire _cast_bits_to_array_expr_1: UInt<2>[2] wire _cast_bits_to_array_expr_flattened_1: UInt<2>[2] connect _cast_bits_to_array_expr_flattened_1[0], bits(UInt<4>(0hA), 1, 0) @@ -3866,8 +3946,8 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_array_expr_flattened_1[1], bits(UInt<4>(0hA), 3, 2) connect _cast_bits_to_array_expr_1[1], _cast_bits_to_array_expr_flattened_1[1] connect io_alternating.array_opt_bool_flip, _cast_bits_to_array_expr_1 @[module-XXXXXXXXXX.rs 16:1] - connect parent_alternating_out.array_opt_bool, and(__enum_structural_eq_14, __enum_structural_eq_15) @[module-XXXXXXXXXX.rs 16:1] - connect parent_alternating_out.array_opt_bool_flip, and(__enum_structural_eq_16, __enum_structural_eq_17) @[module-XXXXXXXXXX.rs 16:1] + connect parent_alternating_out.array_opt_bool, and(__enum_structural_eq_17, __enum_structural_eq_18) @[module-XXXXXXXXXX.rs 16:1] + connect parent_alternating_out.array_opt_bool_flip, and(__enum_structural_eq_19, __enum_structural_eq_20) @[module-XXXXXXXXXX.rs 16:1] wire _cast_bits_to_bundle_expr_1: Ty0 wire _cast_bits_to_bundle_expr_flattened_1: Ty6 connect _cast_bits_to_bundle_expr_flattened_1.`0`, bits(UInt<3>(0h2), 1, 0) @@ -3875,22 +3955,22 @@ circuit check_deduce_structural_eq_flags_parent: connect _cast_bits_to_bundle_expr_flattened_1.`1`, bits(UInt<3>(0h2), 2, 2) connect _cast_bits_to_bundle_expr_1.`1`, _cast_bits_to_bundle_expr_flattened_1.`1` connect io_alternating.struct_opt_bool_flip, _cast_bits_to_bundle_expr_1 @[module-XXXXXXXXXX.rs 17:1] - connect parent_alternating_out.struct_opt_bool, and(__enum_structural_eq_18, eq(io_alternating.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_1.`1`)) @[module-XXXXXXXXXX.rs 17:1] - connect parent_alternating_out.struct_opt_bool_flip, and(__enum_structural_eq_19, eq(io_alternating.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_1.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_alternating_out.struct_opt_bool, and(__enum_structural_eq_21, eq(io_alternating.struct_opt_bool.`1`, _cast_bits_to_bundle_expr_1.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect parent_alternating_out.struct_opt_bool_flip, and(__enum_structural_eq_22, eq(io_alternating.struct_opt_bool_flip.`1`, _cast_bits_to_bundle_expr_1.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect extern_child.io.opt_unit_flip, _cast_to_bits_expr @[module-XXXXXXXXXX.rs 13:1] - connect extern_child_out.opt_unit, eq(extern_child.io.opt_unit, _cast_to_bits_expr) @[module-XXXXXXXXXX.rs 13:1] + connect extern_child_out.opt_unit, __enum_structural_eq_23 @[module-XXXXXXXXXX.rs 13:1] connect extern_child_out.opt_unit_flip, eq(extern_child.io.opt_unit_flip, _cast_to_bits_expr) @[module-XXXXXXXXXX.rs 13:1] connect extern_child.io.opt_bool_flip, _cast_to_bits_expr_1 @[module-XXXXXXXXXX.rs 14:1] - connect extern_child_out.opt_bool, __enum_structural_eq_20 @[module-XXXXXXXXXX.rs 14:1] + connect extern_child_out.opt_bool, __enum_structural_eq_24 @[module-XXXXXXXXXX.rs 14:1] connect extern_child_out.opt_bool_flip, eq(extern_child.io.opt_bool_flip, _cast_to_bits_expr_1) @[module-XXXXXXXXXX.rs 14:1] connect extern_child.io.opt_opt_unit_flip, _cast_to_bits_expr_2 @[module-XXXXXXXXXX.rs 15:1] - connect extern_child_out.opt_opt_unit, __enum_structural_eq_21 @[module-XXXXXXXXXX.rs 15:1] + connect extern_child_out.opt_opt_unit, __enum_structural_eq_25 @[module-XXXXXXXXXX.rs 15:1] connect extern_child_out.opt_opt_unit_flip, eq(extern_child.io.opt_opt_unit_flip, _cast_to_bits_expr_2) @[module-XXXXXXXXXX.rs 15:1] connect extern_child.io.array_opt_bool_flip, _array_literal_expr @[module-XXXXXXXXXX.rs 16:1] - connect extern_child_out.array_opt_bool, and(__enum_structural_eq_22, __enum_structural_eq_23) @[module-XXXXXXXXXX.rs 16:1] + connect extern_child_out.array_opt_bool, and(__enum_structural_eq_26, __enum_structural_eq_27) @[module-XXXXXXXXXX.rs 16:1] connect extern_child_out.array_opt_bool_flip, and(eq(extern_child.io.array_opt_bool_flip[0], _array_literal_expr[0]), eq(extern_child.io.array_opt_bool_flip[1], _array_literal_expr[1])) @[module-XXXXXXXXXX.rs 16:1] connect extern_child.io.struct_opt_bool_flip, _bundle_literal_expr_5 @[module-XXXXXXXXXX.rs 17:1] - connect extern_child_out.struct_opt_bool, and(__enum_structural_eq_24, eq(extern_child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] + connect extern_child_out.struct_opt_bool, and(__enum_structural_eq_28, eq(extern_child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect extern_child_out.struct_opt_bool_flip, and(eq(extern_child.io.struct_opt_bool_flip.`0`, _bundle_literal_expr_5.`0`), eq(extern_child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect child.io.opt_unit_flip, _cast_to_bits_expr @[module-XXXXXXXXXX.rs 13:1] connect child_out.opt_unit, eq(child.io.opt_unit, _cast_to_bits_expr) @[module-XXXXXXXXXX.rs 13:1] @@ -3908,210 +3988,250 @@ circuit check_deduce_structural_eq_flags_parent: connect child_out.struct_opt_bool, and(eq(child.io.struct_opt_bool.`0`, _bundle_literal_expr_5.`0`), eq(child.io.struct_opt_bool.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect child_out.struct_opt_bool_flip, and(eq(child.io.struct_opt_bool_flip.`0`, _bundle_literal_expr_5.`0`), eq(child.io.struct_opt_bool_flip.`1`, _bundle_literal_expr_5.`1`)) @[module-XXXXXXXXXX.rs 17:1] connect __enum_structural_eq, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.opt_bool, 0, 0), bits(_cast_to_bits_expr_1, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.opt_unit, 0, 0), bits(_cast_to_bits_expr, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq, eq(bits(bits(io.opt_bool, 1, 1), 0, 0), bits(bits(_cast_to_bits_expr_1, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_2: Ty4 + invalidate _cast_bits_to_bundle_expr_2 + wire _cast_bits_to_bundle_expr_3: Ty4 + invalidate _cast_bits_to_bundle_expr_3 + connect __enum_structural_eq, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_1, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.opt_opt_unit, 0, 0), bits(_cast_to_bits_expr_2, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.opt_bool, 0, 0), bits(_cast_to_bits_expr_1, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_1, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - wire __enum_structural_eq_25: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_1, __enum_structural_eq_25 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_25, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(_cast_to_bits_expr_2, 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_2: Ty4 - invalidate _cast_bits_to_bundle_expr_2 - wire _cast_bits_to_bundle_expr_3: Ty4 - invalidate _cast_bits_to_bundle_expr_3 - connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_1, eq(bits(bits(io.opt_bool, 1, 1), 0, 0), bits(bits(_cast_to_bits_expr_1, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_2, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.array_opt_bool[0], 0, 0), bits(_array_literal_expr[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.opt_opt_unit, 0, 0), bits(_cast_to_bits_expr_2, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_2, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_2, eq(bits(bits(io.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_array_literal_expr[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_3, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.array_opt_bool[1], 0, 0), bits(_array_literal_expr[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_3, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_3, eq(bits(bits(io.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_array_literal_expr[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_4, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.struct_opt_bool.`0`, 0, 0), bits(_bundle_literal_expr_5.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_4, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_4, eq(bits(bits(io.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_bundle_literal_expr_5.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_5, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.opt_bool, 0, 0), bits(UInt<2>(0h0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_5, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_5, eq(bits(bits(io_zeros.opt_bool, 1, 1), 0, 0), bits(bits(UInt<2>(0h0), 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_6, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.opt_opt_unit, 0, 0), bits(UInt<2>(0h0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire __enum_structural_eq_26: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_6, __enum_structural_eq_26 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_26, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io_zeros.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(UInt<2>(0h0), 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io_zeros.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_29: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_2, __enum_structural_eq_29 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(_cast_to_bits_expr_2, 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: wire _cast_bits_to_bundle_expr_4: Ty4 invalidate _cast_bits_to_bundle_expr_4 wire _cast_bits_to_bundle_expr_5: Ty4 invalidate _cast_bits_to_bundle_expr_5 - connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_3, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.array_opt_bool[0], 0, 0), bits(_array_literal_expr[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_3, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_3, eq(bits(bits(io.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_array_literal_expr[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_4, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.array_opt_bool[1], 0, 0), bits(_array_literal_expr[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_4, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_4, eq(bits(bits(io.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_array_literal_expr[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_5, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.struct_opt_bool.`0`, 0, 0), bits(_bundle_literal_expr_5.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_5, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_5, eq(bits(bits(io.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_bundle_literal_expr_5.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_6, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.opt_unit, 0, 0), bits(UInt<1>(0h0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_6: Ty4 + invalidate _cast_bits_to_bundle_expr_6 + wire _cast_bits_to_bundle_expr_7: Ty4 + invalidate _cast_bits_to_bundle_expr_7 + connect __enum_structural_eq_6, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_7, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.array_opt_bool[0], 0, 0), bits(_cast_bits_to_array_expr[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.opt_bool, 0, 0), bits(UInt<2>(0h0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_7, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_7, eq(bits(bits(io_zeros.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_7, eq(bits(bits(io_zeros.opt_bool, 1, 1), 0, 0), bits(bits(UInt<2>(0h0), 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_8, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.array_opt_bool[1], 0, 0), bits(_cast_bits_to_array_expr[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.opt_opt_unit, 0, 0), bits(UInt<2>(0h0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_8, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_8, eq(bits(bits(io_zeros.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_9, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.struct_opt_bool.`0`, 0, 0), bits(_cast_bits_to_bundle_expr.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_zeros.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_9, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_9, eq(bits(bits(io_zeros.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_cast_bits_to_bundle_expr.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_10, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_bool, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_10, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_10, eq(bits(bits(io_alternating.opt_bool, 1, 1), 0, 0), bits(bits(UInt<2>(0h2), 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_11, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_bool_flip, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_bool_flip, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_11, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - connect __enum_structural_eq_11, eq(bits(bits(io_alternating.opt_bool_flip, 1, 1), 0, 0), bits(bits(UInt<2>(0h2), 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_opt_unit, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire __enum_structural_eq_27: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_12, __enum_structural_eq_27 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_27, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io_alternating.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(UInt<2>(0h2), 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io_alternating.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_6: Ty4 - invalidate _cast_bits_to_bundle_expr_6 - wire _cast_bits_to_bundle_expr_7: Ty4 - invalidate _cast_bits_to_bundle_expr_7 - connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_13, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_opt_unit_flip, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.opt_opt_unit_flip, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_13, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire __enum_structural_eq_28: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_13, __enum_structural_eq_28 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_28, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io_alternating.opt_opt_unit_flip, 1, 1), 0, 0), 0, 0), bits(bits(bits(UInt<2>(0h2), 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(io_alternating.opt_opt_unit_flip, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_30: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_8, __enum_structural_eq_30 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io_zeros.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(UInt<2>(0h0), 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io_zeros.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: wire _cast_bits_to_bundle_expr_8: Ty4 invalidate _cast_bits_to_bundle_expr_8 wire _cast_bits_to_bundle_expr_9: Ty4 invalidate _cast_bits_to_bundle_expr_9 - connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_30, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_9, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.array_opt_bool[0], 0, 0), bits(_cast_bits_to_array_expr[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_9, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_9, eq(bits(bits(io_zeros.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_10, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.array_opt_bool[1], 0, 0), bits(_cast_bits_to_array_expr[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_10, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_10, eq(bits(bits(io_zeros.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.struct_opt_bool.`0`, 0, 0), bits(_cast_bits_to_bundle_expr.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_zeros.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_11, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_11, eq(bits(bits(io_zeros.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_cast_bits_to_bundle_expr.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_12, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_unit, 0, 0), bits(UInt<1>(0h0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_10: Ty4 + invalidate _cast_bits_to_bundle_expr_10 + wire _cast_bits_to_bundle_expr_11: Ty4 + invalidate _cast_bits_to_bundle_expr_11 + connect __enum_structural_eq_12, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_13, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_bool, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_13, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_13, eq(bits(bits(io_alternating.opt_bool, 1, 1), 0, 0), bits(bits(UInt<2>(0h2), 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_14, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool[0], 0, 0), bits(_cast_bits_to_array_expr_1[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_bool_flip, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_bool_flip, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_14, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_14, eq(bits(bits(io_alternating.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_14, eq(bits(bits(io_alternating.opt_bool_flip, 1, 1), 0, 0), bits(bits(UInt<2>(0h2), 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_15, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool[1], 0, 0), bits(_cast_bits_to_array_expr_1[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_opt_unit, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_15, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_15, eq(bits(bits(io_alternating.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_31: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_15, __enum_structural_eq_31 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_31, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io_alternating.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(UInt<2>(0h2), 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io_alternating.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_31, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_12: Ty4 + invalidate _cast_bits_to_bundle_expr_12 + wire _cast_bits_to_bundle_expr_13: Ty4 + invalidate _cast_bits_to_bundle_expr_13 + connect __enum_structural_eq_31, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_16, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool_flip[0], 0, 0), bits(_cast_bits_to_array_expr_1[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool_flip[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_opt_unit_flip, 0, 0), bits(UInt<2>(0h2), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.opt_opt_unit_flip, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_16, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_16, eq(bits(bits(io_alternating.array_opt_bool_flip[0], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire __enum_structural_eq_32: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_16, __enum_structural_eq_32 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_32, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io_alternating.opt_opt_unit_flip, 1, 1), 0, 0), 0, 0), bits(bits(bits(UInt<2>(0h2), 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(io_alternating.opt_opt_unit_flip, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_32, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_14: Ty4 + invalidate _cast_bits_to_bundle_expr_14 + wire _cast_bits_to_bundle_expr_15: Ty4 + invalidate _cast_bits_to_bundle_expr_15 + connect __enum_structural_eq_32, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_17, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool_flip[1], 0, 0), bits(_cast_bits_to_array_expr_1[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.array_opt_bool_flip[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool[0], 0, 0), bits(_cast_bits_to_array_expr_1[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_17, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_17, eq(bits(bits(io_alternating.array_opt_bool_flip[1], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_17, eq(bits(bits(io_alternating.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_18, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.struct_opt_bool.`0`, 0, 0), bits(_cast_bits_to_bundle_expr_1.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool[1], 0, 0), bits(_cast_bits_to_array_expr_1[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_18, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_18, eq(bits(bits(io_alternating.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_cast_bits_to_bundle_expr_1.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_18, eq(bits(bits(io_alternating.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_19, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.struct_opt_bool_flip.`0`, 0, 0), bits(_cast_bits_to_bundle_expr_1.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(io_alternating.struct_opt_bool_flip.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool_flip[0], 0, 0), bits(_cast_bits_to_array_expr_1[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool_flip[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_19, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_19, eq(bits(bits(io_alternating.struct_opt_bool_flip.`0`, 1, 1), 0, 0), bits(bits(_cast_bits_to_bundle_expr_1.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_19, eq(bits(bits(io_alternating.array_opt_bool_flip[0], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_20, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.opt_bool, 0, 0), bits(_cast_to_bits_expr_1, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool_flip[1], 0, 0), bits(_cast_bits_to_array_expr_1[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.array_opt_bool_flip[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_20, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_20, eq(bits(bits(extern_child.io.opt_bool, 1, 1), 0, 0), bits(bits(_cast_to_bits_expr_1, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_20, eq(bits(bits(io_alternating.array_opt_bool_flip[1], 1, 1), 0, 0), bits(bits(_cast_bits_to_array_expr_1[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_21, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.opt_opt_unit, 0, 0), bits(_cast_to_bits_expr_2, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.struct_opt_bool.`0`, 0, 0), bits(_cast_bits_to_bundle_expr_1.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_21, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - wire __enum_structural_eq_29: UInt<1> @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_21, __enum_structural_eq_29 @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_29, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(extern_child.io.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(_cast_to_bits_expr_2, 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(bits(bits(extern_child.io.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] - connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] - else: - wire _cast_bits_to_bundle_expr_10: Ty4 - invalidate _cast_bits_to_bundle_expr_10 - wire _cast_bits_to_bundle_expr_11: Ty4 - invalidate _cast_bits_to_bundle_expr_11 - connect __enum_structural_eq_29, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_21, eq(bits(bits(io_alternating.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_cast_bits_to_bundle_expr_1.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_22, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.array_opt_bool[0], 0, 0), bits(_array_literal_expr[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.struct_opt_bool_flip.`0`, 0, 0), bits(_cast_bits_to_bundle_expr_1.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(io_alternating.struct_opt_bool_flip.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_22, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_22, eq(bits(bits(extern_child.io.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_array_literal_expr[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_22, eq(bits(bits(io_alternating.struct_opt_bool_flip.`0`, 1, 1), 0, 0), bits(bits(_cast_bits_to_bundle_expr_1.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_23, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.array_opt_bool[1], 0, 0), bits(_array_literal_expr[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.opt_unit, 0, 0), bits(_cast_to_bits_expr, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_23, eq(bits(bits(extern_child.io.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_array_literal_expr[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + wire _cast_bits_to_bundle_expr_16: Ty4 + invalidate _cast_bits_to_bundle_expr_16 + wire _cast_bits_to_bundle_expr_17: Ty4 + invalidate _cast_bits_to_bundle_expr_17 + connect __enum_structural_eq_23, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_24, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.struct_opt_bool.`0`, 0, 0), bits(_bundle_literal_expr_5.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] - when eq(bits(extern_child.io.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.opt_bool, 0, 0), bits(_cast_to_bits_expr_1, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.opt_bool, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] connect __enum_structural_eq_24, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] else: - connect __enum_structural_eq_24, eq(bits(bits(extern_child.io.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_bundle_literal_expr_5.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_24, eq(bits(bits(extern_child.io.opt_bool, 1, 1), 0, 0), bits(bits(_cast_to_bits_expr_1, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.opt_opt_unit, 0, 0), bits(_cast_to_bits_expr_2, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.opt_opt_unit, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire __enum_structural_eq_33: UInt<1> @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_25, __enum_structural_eq_33 @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_33, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(extern_child.io.opt_opt_unit, 1, 1), 0, 0), 0, 0), bits(bits(bits(_cast_to_bits_expr_2, 1, 1), 0, 0), 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(bits(bits(extern_child.io.opt_opt_unit, 1, 1), 0, 0), 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_33, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + wire _cast_bits_to_bundle_expr_18: Ty4 + invalidate _cast_bits_to_bundle_expr_18 + wire _cast_bits_to_bundle_expr_19: Ty4 + invalidate _cast_bits_to_bundle_expr_19 + connect __enum_structural_eq_33, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.array_opt_bool[0], 0, 0), bits(_array_literal_expr[0], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.array_opt_bool[0], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_26, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_26, eq(bits(bits(extern_child.io.array_opt_bool[0], 1, 1), 0, 0), bits(bits(_array_literal_expr[0], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.array_opt_bool[1], 0, 0), bits(_array_literal_expr[1], 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.array_opt_bool[1], 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_27, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_27, eq(bits(bits(extern_child.io.array_opt_bool[1], 1, 1), 0, 0), bits(bits(_array_literal_expr[1], 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, UInt<1>(0h0) @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.struct_opt_bool.`0`, 0, 0), bits(_bundle_literal_expr_5.`0`, 0, 0)): @[module-XXXXXXXXXX.rs 1:1] + when eq(bits(extern_child.io.struct_opt_bool.`0`, 0, 0), UInt<1>(0h0)): @[module-XXXXXXXXXX.rs 1:1] + connect __enum_structural_eq_28, UInt<1>(0h1) @[module-XXXXXXXXXX.rs 1:1] + else: + connect __enum_structural_eq_28, eq(bits(bits(extern_child.io.struct_opt_bool.`0`, 1, 1), 0, 0), bits(bits(_bundle_literal_expr_5.`0`, 1, 1), 0, 0)) @[module-XXXXXXXXXX.rs 1:1] extmodule check_deduce_structural_eq_flags_extern_child: @[module-XXXXXXXXXX-2.rs 1:1] output io: Ty1 @[module-XXXXXXXXXX-2.rs 2:1] defname = check_deduce_structural_eq_flags_extern_child