diff --git a/src/kyupy/sim.py b/src/kyupy/sim.py index 29ac420..1602989 100644 --- a/src/kyupy/sim.py +++ b/src/kyupy/sim.py @@ -279,7 +279,7 @@ class SimOps: # allocate memory for the rest of the circuit for op_start, op_stop in zip(self.level_starts, self.level_stops): - free_list = [] + free_set = set() for op in self.ops[op_start:op_stop]: # if we fork-strip, always take the stems i0_idx = stems[op[2]] if stems[op[2]] >= 0 else op[2] @@ -290,15 +290,15 @@ class SimOps: ref_count[i1_idx] -= 1 ref_count[i2_idx] -= 1 ref_count[i3_idx] -= 1 - if ref_count[i0_idx] <= 0: free_list.append(self.c_locs[i0_idx]) - if ref_count[i1_idx] <= 0: free_list.append(self.c_locs[i1_idx]) - if ref_count[i2_idx] <= 0: free_list.append(self.c_locs[i2_idx]) - if ref_count[i3_idx] <= 0: free_list.append(self.c_locs[i3_idx]) + if ref_count[i0_idx] <= 0: free_set.add(self.c_locs[i0_idx]) + if ref_count[i1_idx] <= 0: free_set.add(self.c_locs[i1_idx]) + if ref_count[i2_idx] <= 0: free_set.add(self.c_locs[i2_idx]) + if ref_count[i3_idx] <= 0: free_set.add(self.c_locs[i3_idx]) o_idx = op[1] cap = max(c_caps_min, c_caps[o_idx]) self.c_locs[o_idx], self.c_caps[o_idx] = h.alloc(cap), cap if c_reuse: - for loc in free_list: + for loc in free_set: h.free(loc) # copy memory location and capacity from stems to fanout lines