Skip to content

Conversation

@ziadomalik
Copy link
Collaborator

See also related PR for Reconvergent paths enumeration.

This feature enumerates synchronizing cycles, as they are defined in Xu, Josipović, FPGA'24, Section 4:

Definition 3: Two cycles are a pair of synchronizing cycles in a
dataflow circuit if the following properties hold: (1) The two cycles
are disjoint (i.e. they do not have any common units) and belong to
the same CFC (defined in Section 3.2). (2) There exists at least one
join that is reachable from both cycles without crossing any edge
on the cycle in the CFC they belong to.

We start out by computing all the strongly-connected-components of the CFC using Kosaraju's algorithm, then we find all the cycles in the CFC using Boost's tiernan_all_cycles function. Using both of our findings, we can enumerate each pair of cycles, check them against above criteria and reconstruct a path between the pair and the common join if they do match.

Also it's more modular now, take the logic out of the constructor, and a data flow graph describes a single thing, not an array of things
@ziadomalik ziadomalik requested a review from Jiahui17 January 4, 2026 21:35
@ziadomalik
Copy link
Collaborator Author

Btw I have no idea what this aig change is, not sure how to get rid of it, but it seems to be from a submodule, let me know.

Copy link
Member

@Jiahui17 Jiahui17 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some

@Jiahui17
Copy link
Member

Jiahui17 commented Jan 5, 2026

Could you remove the aig from the commit?

@ziadomalik ziadomalik force-pushed the feat/ziad/synchronizing-cycles branch from ac3944e to 75a54b4 Compare January 6, 2026 00:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants