Reset loop numbers in RecomputeLoopInfo
#56981
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
They become stale after optimizations.
I will note that the problem
fgDebugCheckLoopTable
here is "real", and I've investigated enablingfgDebugCheckLoopTable
after the unroller phase, but it turns out not to be so trivial.Take the following, for example:
We will unroll the outer loop, but will not reset the loop number on any blocks, ending up with the following flow table:
Note the loop numbers above are quite incorrect. The loop info for
L1
now references empty blocks that the unroller made invalid, and we have "two" loops for the same number. The naive fix would be to invalidate all loops (including the inner ones) during unrolling, but such a fix results in a big (25%+) PerfScore regression inBenchI.Puzzle:DoIt
, so I punted it. A proper fix would involve reusing the existing blocks for the first (or whichever) iteration while unrolling.Fixes #56961.