[AIE2P] Add SingletonCopyEdges dag mutator in pre-scheduler #469
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.
Some instructions take a singleton register class in their operands. If a copy of that same physical register from the function arguments is moved closer to its user by the pre-scheduler and it happens to move past an instruction requiring that singleton register class, a live range interference is created which the register allocator cannot resolve by evicting the function argument physical register, leading to a "ran out of registers" error.
To solve this, this introduces DAG mutator in the pre-scheduler with zero latency edge between such copies and such instructions, thus preventing the scheduler from creating the undesired interference.