[all-commits] [llvm/llvm-project] 43290c: [SCCIterator] Fix an issue in scc_member_iterator ...
Hongtao Yu via All-commits
all-commits at lists.llvm.org
Mon Mar 27 10:48:29 PDT 2023
Author: Hongtao Yu <hoy at fb.com>
Date: 2023-03-27 (Mon, 27 Mar 2023)
[SCCIterator] Fix an issue in scc_member_iterator sorting
Members in an scc are supposed to be sorted in a top-down or topological order based on edge weights. Previously this is achived by building a MST out of the SCC and enforcing an BFS walk on the MST. A BFS on a tree does give a top-down topological order, however, the MST built here isn't really a tree. This is becuase of a trick done to avoid expansive detection of a cycle on a directed graph when an edge is added. When the MST is built, its edges are considered undirected. But in reality they are directed, thus a BST walk doesn't necessarily give a topological order. I'm tweaking the BFS walk slightly to yield a topological order.
Basically I'm using Kahn's algorithm on MST to compute a topological traversal order. The algorithm starts from nodes that have no incoming edge. These nodes are "roots" of the MST forest. This ensures that nodes are visited before their descendants are, thus ensures a topological traversal order of the MST.
Reviewed By: wenlei
Differential Revision: https://reviews.llvm.org/D130717
More information about the All-commits