-
Notifications
You must be signed in to change notification settings - Fork 5.2k
JIT: Always look for SIMD fields during promotion #84122
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 |
Draft Pull Request was automatically closed for 30 days of inactivity. Please let us know if you'd like to reopen it. |
@jakobbotsch, was there something blocking or preventing this from being merged? |
@tannergooding There were some failures that I needed to figure out if were related or not. |
The failing case is with [11:07:52] ISSUE: <ASSERT> #411709 D:\a\_work\1\s\src\coreclr\jit\emit.h (1171) - Assertion failed 'reg == _idReg1' in 'JIT.HardwareIntrinsics.Arm._AdvSimd.SimpleTernaryOpTest__AbsoluteDifferenceAdd_Vector128_UInt32+TestStruct:Create():JIT.HardwareIntrinsics.Arm._AdvSimd.SimpleTernaryOpTest__AbsoluteDifferenceAdd_Vector128_UInt32+TestStruct' during 'Generate code' (IL size 208; hash 0xa860f440; FullOpts) We have the following multireg tree that needs to be unspilled before a return: N447 ( 9, 6) [000090] m------N--z t90 = LCL_VAR struct<JIT.HardwareIntrinsics.Arm._AdvSimd.SimpleTernaryOpTest__AbsoluteDifferenceWideningUpperAndAdd_Vector128_UInt32+TestStruct, 48>(P) V00 loc0 NA
▌ simd16 field V00._fld1 (fldOffset=0x0) -> V14 tmp10 (last use)
▌ simd16 field V00._fld2 (fldOffset=0x10) -> V15 tmp11 (last use)
▌ simd16 field V00._fld3 (fldOffset=0x20) -> V16 tmp12 d2 (last use) REG NA,d1,d2 $540
┌──▌ t90 struct
N449 ( 10, 7) [000091] ----------- ▌ RETURN struct REG NA $VN.Void The local is marked as |
#88380 should fix the above issue. |
/azp run runtime-coreclr superpmi-replay, runtime-coreclr jitstress, runtime-coreclr libraries-jitstress |
Azure Pipelines successfully started running 3 pipeline(s). |
cc @dotnet/jit-contrib Failures are known according to build analysis. Some very minor diffs outside tests. arm64 has a handful in libraries.pmi. Diffs are for the normal reasons when promotion is enabled/disabled... Generally more precise liveness means some field writes/reads can sometimes be removed, while sometimes struct copies require larger code. And of course fields can be kept in registers over long ranges. |
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.
Overall I think this is a net improvement and makes sense for typical usages of the vector types.
Fix #83749