5.9: [InstructionDeleter] Don't delete-as dead instructions which produce owned move-only values. #68111
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.
Description: Many passes use the InstructionDeleter, requesting that it try to delete an instruction if its dead. The deleter has a number of checks to determine what counts as "dead".
Among those checks is an early exit, affirming that an instruction which satisfies a few other conditions is indeed dead if it satisfies
getSingleValueCopyOrCast
. At least one instruction (move_value
) satisfying that predicate may produce an owned move-only value. Such an instruction must not be deleted as dead.Here, an additional condition is added prior to considering the
getSingleValueCopyOrCast
predicate; namely, whether the instruction produces an owned move-only value. If it does, the deleter determines that the instruction is not dead and does not delete it.Risk: Low.
Scope: Narrow. The change only affects move-only values.
Original PR: #68108
Reviewed By: Andrew Trick ( @atrick )
Testing: Added a test.
Resolves: rdar://114351349