From the “Pass infrastructure” documentation (Pass Infrastructure - MLIR)
It states passes must not inspect the state of sibling operations since other threads might be modifying it.
However, affine transformation passes inspects its sibling operations to find optimization opportunities (such as building memory dependence graph with store and load operations).
How is this possible without violating the above rule?
(I looked into the code, but it seems it walks through sibling operations and inspects them)
I suspect that since none of the operations inside the function in affine dialect is marked ‘IsolatedFromAbove’, so pass manager does not run separate pass on them, which means we don’t have to worry about another thread modifying its state simultaneously.
Am I getting it right? If not, what am I missing here?