-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Ensure maxSIMDStructBytes
doesn't report compVerifyInstructionSetUnusable
#85370
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsThis resolves #84923 Previously a couple paths were calling For For For the latter, it had a few primary users:
|
Worth noting we didn't always do this for |
/benchmark json aspnet-citrine-lin runtime |
Benchmark started for json on aspnet-citrine-lin with runtime. Logs: link |
|
Seems we don't have linux agent configured correctly and hence doing |
/benchmark json aspnet-citrine-win runtime |
Benchmark started for json on aspnet-citrine-win with runtime. Logs: link |
/benchmark json aspnet-citrine-lin runtime |
Benchmark started for json on aspnet-citrine-lin with runtime. Logs: link |
It again failed to log the results for windows, but here is the comparison:
|
/benchmark json aspnet-citrine-lin runtime |
Benchmark started for json on aspnet-citrine-lin with runtime. Logs: link |
/benchmark json aspnet-citrine-lin runtime |
Benchmark started for json on aspnet-citrine-lin with runtime. Logs: link |
Ping @dotnet/jit-contrib, @davidwrighton for review/feedback |
This resolves #84923
Previously a couple paths were calling
compOpportunisticallyDependsOn
and then callingcompVerifyInstructionSetUnusable
if it failed. This is logically the same as just callingcompExactlyDependsOn
.For
getSIMDVectorRegisterByteLength
this is expected as we have a distinct ABI and functionality difference forVector<T>
based on whether or not AVX2 is supported and so I've switched to just callingcompExactlyDependsOn
directly.For
maxSIMDStructBytes
this was "unexpected" as we are only doing an opportunistic check for a few internal locations. This for example is used as part of local struct promotion and handling larger amounts of memory as part of block copy, memory comparison, or zeroing. As such, I've ensured it only callscompOpportunisticallyDependsOn
.For the latter, it had a few primary users:
roundUpSIMDSize(size)
- used as part ofgenCodeForMemmove(tree)
roundDownSIMDSize(size)
- used as part ofBlkOpKindUnrollMemmove
,impExpandHalfConstEqualsSIMD(...)
, andgenCodeForMemmove(tree)
getUnrollThreshold(type, canUseSimd)
- used in various places aspart ofMemmove
,Memset
, andMemcpy
structSizeMightRepresentSIMDType(structSize)
- used in various places to filter whether something could be a SIMD type or not (previously just guessed by using the largest possible vector size, regardless of support)CanPromoteStructType(typeHnd)