-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Introduce FIELD_ADDR
and use it for TLS statics and instance class fields
#77353
Introduce FIELD_ADDR
and use it for TLS statics and instance class fields
#77353
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsRemoving two uses of We expect a couple diffs in tests where we now fail to hoist a vector constant because we don't resolve struct handles (thus recognize SIMD types) for
|
FIELD_ADDR
and use it for TLS statics and class instance fieldsFIELD_ADDR
and use it for TLS statics and instance class fields
e7d5f78
to
d22eede
Compare
d22eede
to
a6d0afe
Compare
Tested manually to work as well as it did before.
71a410f
to
a872f5a
Compare
a872f5a
to
b621b7b
Compare
With NativeAOT, we can have FIELD_ADDR nodes that are effectively NOPs (those for the method table pointer field). This means not all operators that the expansion produces will be simple (in fact, they can be more or less arbitrary). This means we cannot simply call "fgMorphSmpOp" as we used to. Unfortunately, we cannot just call "fgMorphTree" either, because it propagates assertions on newly created (or, I suppose, bashed) IND nodes. This creates lots of new cases where GTF_ORDER_SIDEEFF is applied to these nodes, affecting CQ. Work around this by calling "fgMorphTree" for non-simple operators only.
@dotnet/jit-contrib |
/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn |
Azure Pipelines successfully started running 3 pipeline(s). |
The unreduced BadResult failures in the Fuzzlyn run looks like a known intermittent failure that I have seen before, I don't think it is related to this PR. |
// Return Value: | ||
// The expanded tree - a GT_ADD. | ||
// | ||
GenTree* Compiler::fgMorphExpandTlsFieldAddr(GenTree* tree) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume there's no actual changes here except constructing the address part of this? The diff is quite hard to read.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is one change: tlsRef = gtNewIndir(TYP_I_IMPL, tlsRef, GTF_IND_NONFAULTING | GTF_IND_INVARIANT);
- for the indir off of the TLS handle.
(Not doing this was making fgDebugCheckFlags
fail)
The stress failures were #78023 |
Removing two uses of
GT_ADDR
in the process.We expect a couple diffs in tests where we now fail to hoist a vector constant because we don't resolve struct handles (thus recognize SIMD types) for
FIELD_ADDR
s, as well as one case of new substitution due to smaller tree size. We also expect a minor TP improvement in the optimized case.