-
Notifications
You must be signed in to change notification settings - Fork 5k
Replace the last two SIMDIntrinsic in LIR with NamedIntrinsic and delete GT_SIMD #80027
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
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak Issue DetailsAs per the title this moves the last two remaining Unlike most of the other SIMD intrinsics, It's possible we could merge Likewise, we have both
|
@@ -285,11 +285,11 @@ void CodeGen::genPutArgStkSIMD12(GenTree* treeNode) | |||
#endif // TARGET_X86 | |||
|
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.
simdcodegenxarch.cpp
is now "unique" and should probably just be merged into codegenxarch.cpp
, just like the related code already is for Arm64 (there probably isn't "enough" here to warrant it being in its own separate file anymore)..
CC. @dotnet/jit-contrib. This should be ready for review, no diffs. Probably need to determine why arm64 shows a TP regression (it is a TP improvement on x86/x64). Arm64 was triggering an assert related to If I had to guess it has to do with the old logic setting |
Hmmm, the Arm64 TP regression looks to actually be because |
786c5aa
to
14e43ae
Compare
Not sure what's causing the TP regression for Arm64 after all. There remained a Likely still worth taking given the TP improvement for x86/x64, the removal of an unnecessary node type, and general simplification in the JIT. |
/azp run runtime-coreclr jitstress-isas-x86, runtime-coreclr jitstress-isas-arm, runtime-coreclr outerloop |
Azure Pipelines successfully started running 3 pipeline(s). |
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.
LGTM, nice to see all the red!
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.
Not sure what's causing the TP regression for Arm64 after all.
Yes, that is little puzzling, and it is consistent across OS. Did you try running TP manually to see which method has more instructions?
nice to see all the red!
Indeed.
Yes, but unfortunately the change in node type makes this difficult to determine. There are many functions where the ins_count has changed (some positive, some negative). The numbers were overall similar to x64, but in larger amounts since Arm64 creates more UpperSave/Restore nodes. |
Single stress failure is unrelated: #75244 |
As per the title this moves the last two remaining
SIMDIntrinsic
cases to beNamedIntrinsic
and thus allows us to remove GT_SIMD.Unlike most of the other SIMD intrinsics,
UpperSave
andUpperRestore
are "special" and exist where general SIMD support does for ABI reasons. However,GT_INTRINSIC
is a large node and has additional cost thatGT_SIMD
did not. Because of this, we useGT_HWINTRINSIC
when it is available and only fallback toGT_INTRINSIC
when it is not.It's possible we could merge
FEATURE_SIMD
andFEATURE_HW_INTRINSIC
together, given how tightly coupled they otherwise are, but that would be a more complex work item and should be handled separately if at all. Doing so would allow us to always useGT_HWINTRINSIC
.Likewise, we have both
GenTreeIntrinsic
(GT_INTRINSIC
) andGenTreeJitIntrinsic
(which is onlyGenTreeHWIntrinsic
/GT_HWINTRINSIC
now) and these should probably be modified a bit to have a common base, but that is a larger refactoring and should be done separately if at all. -- It's a bit more complicated since moving fields around adds padding between the fields of the base and derived types and that can push things to become a large node unnecessarily.