When AIRIsolateAsyncDmaLoopNest pass splits an scf.for loop nest based on async dependency, it can now split the nest into multiple imperfect loop nests, each containing a partition of the original loop nest's innermost body. Partitioning is performed based on async dependency.
A number of minor code fixups to enable this feature:
Clean up redundant logic in getAsyncTokenFromOp method.
The dependency reconstruction logic that comes after the loop splitting is rewritten; iterating through getUses() while updating uses is unsafe.
When
AIRIsolateAsyncDmaLoopNest
pass splits anscf.for
loop nest based on async dependency, it can now split the nest into multiple imperfect loop nests, each containing a partition of the original loop nest's innermost body. Partitioning is performed based on async dependency.A number of minor code fixups to enable this feature:
getAsyncTokenFromOp
method.getUses()
while updating uses is unsafe.