6.1: [DCE] Don't complete lifetimes of erased values. #78319
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.
Explanation: Fix assertion failure during DCE.
DCE uses lifetime completion to end the lifetimes of values whose lifetime ending uses were deleted. Completion is done for all such values after all deletion has been done.
It is possible, however, for a value to be enqueued for eventual completion and then for the instruction which defines that value to be deleted. In that case, lifetime completion must not be run.
Here, whenever an instruction is deleted, all of its results are removed from the collection of values whose lifetimes are to be completed.
Scope: Affects optimized code.
Issue: rdar://141560546
Original PR: #78306
Risk: Low.
Testing: Added test.
Reviewer: Erik Eckstein ( @eeckstein )