From 5087f16099b3b0f6e45f0346e6d24da52fafaa60 Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Wed, 11 Dec 2024 00:00:21 -0800 Subject: [PATCH] sim: fix assignments graph by properly including conditions as assignment inputs --- crates/fayalite/src/sim.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/crates/fayalite/src/sim.rs b/crates/fayalite/src/sim.rs index 5d37baf..ab5b7b7 100644 --- a/crates/fayalite/src/sim.rs +++ b/crates/fayalite/src/sim.rs @@ -458,6 +458,9 @@ impl Assignments { slot_readers .keys_for_assignment(assignment_index) .extend([&assignment.inputs]); + slot_readers + .keys_for_assignment(assignment_index) + .extend(&assignment.conditions); let SlotSet(TypeParts { small_slots, big_slots, @@ -1400,6 +1403,30 @@ impl<'a> Extend<&'a SlotSet> for SlotToAssignmentIndexFullMapKeysForAssignment<' } } +impl<'a> Extend<&'a Cond> for SlotToAssignmentIndexFullMapKeysForAssignment<'_> { + fn extend>(&mut self, iter: T) { + iter.into_iter().for_each(|cond| match cond.body { + CondBody::IfTrue { cond } | CondBody::IfFalse { cond } => { + let CompiledValue { + range: + TypeIndexRange { + small_slots, + big_slots, + }, + layout: _, + write: _, + } = cond; + self.extend(small_slots.iter()); + self.extend(big_slots.iter()); + } + CondBody::MatchArm { + discriminant, + variant_index: _, + } => self.extend([discriminant]), + }); + } +} + impl Assignment { fn new( conditions: Interned<[Cond]>,