[GR-64535] Permit GVN of class initialization checks #11111
Merged
+94
−45
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.
KlassBeingInitializedCheckNode
andEnsureClassInitializedNode
can in theory be global value numbered to permit the removal of class initialization checks when there are already dominating class initialization checks for the same type. By defaultDominatorBasedGlobalValueNumberingPhase
doesn't consider fixed nodes that kill memory to be GVN'able since normally the fact that it kills something would mean it not GVN'able. Since class initialization only has a side effect the first time it's executed it safe to GVN them. This PR addsFixedGlobalValueNumberable
so that nodes that kill but that are also safe can be explicitly marked as safe. Note that this will only work for the exact matches.