[release/9.0] JIT: don't create vector constants from relocatable constants #107500
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.
Backport of #107491 to release/9.0
/cc @AndyAyersMS
Customer Impact
#107396
The JIT can coalesce adjacent scalar stores into a single vector store. If the values being stored are constant, then the value being stored is usually not expressible as a literal (in-code) constant and so the JIT will allocate a data segment for the constant.
However, certain constants (like function addresses) may be relocatable and need adjustment at link or load time, and there is currently no mechanism to report relocations for JIT-created data segments.
As a result, programs relying on these constants may crash, compute the wrong values, try and jump to somewhat arbitrary addresses, etc.
This fix blocks the jit from coalescing stores for relocatable constants.
Regression
Store coalescing is new in .NET 9: #92852
Testing
Verified on test case from the issue.
Risk
Low. The fix stops the jit from doing an optional optimization, reverting for those cases to .NET 8 behavior.