I wonder if there isn’t a bug in how prerequisites are handled in SequentialNode::operator() in pass_manager.cc here:
The way I read this, transitive dependencies are ignored: Suppose pass C depends on pass B which depends on pass A. Then running pass C will cause pass B to be run first. However, pass A is not run because the dependencies of B are not inspected since the dependency tracking is not transitive/recursive.
Though if this is a real bug, what I’m wondering is how this hasn’t caused problems so far?