-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
JIT: Always look for SIMD fields during promotion #84122
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