You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
SPMI for Arm64 failing asserting for argReg == argNode->GetRegNum() #101070
The storex instructions allow for register wraparound (eg 30, 31, 0, 1). If the register allocator supports this, then the assert in hwintrinsiccodegenarm64.cpp is incorrect - it needs to allow for the register to wrap back to 0.
Alternatively - if the register allocator doesn't support wrap around then my only thought is that the allocator is failing to allocate a valid sequence and silently failing.
The storex instructions allow for register wraparound (eg 30, 31, 0, 1). If the register allocator supports this, then the assert in hwintrinsiccodegenarm64.cpp is incorrect - it needs to allow for the register to wrap back to 0.
LSRA does support wrap around, so we should update the assert accordingly. But have you confirmed that this indeed is a wrap around case? During my testing, I never encountered the case where wrap around was needed.
Activity
dotnet-policy-service commentedon Apr 15, 2024
Tagging subscribers to this area: @hoyosjs
See info in area-owners.md if you want to be subscribed.
tannergooding commentedon Apr 15, 2024
This is failing for a number of the legs (any that actually run the SPMI jobs): https://dev.azure.com/dnceng-public/public/_build?definitionId=150&_a=summary
This was likely introduced in #100589 and is probably related to the
LoadVector128x4or related APIs which are relatively new.dotnet-policy-service commentedon Apr 16, 2024
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.
AndyAyersMS commentedon Apr 17, 2024
Build analysis seems not to be matching on this... any idea why?
jeffschwMSFT commentedon Apr 17, 2024
Build analysis has been restricted to the CI/PR pipeline for now. There is engineering work to re-enable for our other pipelines.
kunalspathak commentedon Apr 21, 2024
@SwapnilGaikwad
a74nh commentedon Apr 22, 2024
The storex instructions allow for register wraparound (eg 30, 31, 0, 1). If the register allocator supports this, then the assert in hwintrinsiccodegenarm64.cpp is incorrect - it needs to allow for the register to wrap back to 0.
Alternatively - if the register allocator doesn't support wrap around then my only thought is that the allocator is failing to allocate a valid sequence and silently failing.
kunalspathak commentedon Apr 22, 2024
LSRA does support wrap around, so we should update the assert accordingly. But have you confirmed that this indeed is a wrap around case? During my testing, I never encountered the case where wrap around was needed.
runtime/src/coreclr/jit/lsraarm64.cpp
Lines 242 to 301 in f021ccf
Fix checks to accommodate register wraparounds in multi-reg ops
SwapnilGaikwad commentedon Apr 23, 2024
Indeed, we needed to wraparound the argReg - #101430 implements it.
Fix checks to accommodate register wraparounds in multi-reg ops
Fix checks to accommodate register wraparounds in multi-reg ops (#101430
kunalspathak commentedon Apr 24, 2024
Fixed by #101430
Fix checks to accommodate register wraparounds in multi-reg ops (dotn…
Fix checks to accommodate register wraparounds in multi-reg ops (dotn…