Uh oh!
There was an error while loading. Please reload this page.
Add support for Sve.Splice() - #103567
Conversation
ghost
commented
Jun 17, 2024
Note regarding the |
1 similar comment
ghost
commented
Jun 17, 2024
Note regarding the |
SwapnilGaikwad
commented
Jun 17, 2024
@a74nh@kunalspathak @dotnet/arm64-contrib @arch-arm64-sve |
Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics |
2e693e6 to
55a3f28CompareSwapnilGaikwad
commented
Jun 17, 2024
Some of the stress tests are failing when it fails read mask correctly that may lead to loading an Op2 using a mask incorrectly (with all zeros) or mask itself is incorrect. It seems like a known issue, happy to debug it further if you think otherwise. Stress test results |
kunalspathak
left a comment
There was a problem hiding this comment.
Just to confirm, changed related to ReverseBits are straight forward and just need an entry in hwintrinsiclistarm64sve.h table. The other changes are to support Splice whose op2 is the preferred target, yes?
Probably worth sending a separate PR for ReveseBits and Splice because the logic on how they are handled are very different.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
SwapnilGaikwad
commented
Jun 21, 2024
Put ReverseBits in #103806 |
SwapnilGaikwad
commented
Jun 21, 2024
Regarding using a constructive variant. Not sure how to mark explicit op2 and op3 as needing consecutive registers. The current intrinsics with consecutive registers have a tuple in a single op. Here we have two separate args in the API. |
kunalspathak
commented
Jun 21, 2024
I might have to spend some time in figuring out how to make sure that when |
kunalspathak
commented
Jun 24, 2024
@SwapnilGaikwad - can you confirm if all the stress test passes with your recent change? Also, can you please share disassembly for one of the test? I will look deeply, but are we making sure that we are never generating constructive form? |
SwapnilGaikwad
commented
Jun 24, 2024
Some of the stress tests failed as before. They are loading the mask incorrectly as all zeros that is then leading to a wrong results. Stress test results
Disassembly for RunBasicScenario_Load
We have RMW semantics and we set the tgtPrefUse2. However, we don't have an explicit assert to ensure that we are emitting an instruction of group |
kunalspathak
commented
Jun 24, 2024
Is it possible to add it? |
SwapnilGaikwad
commented
Jun 24, 2024
Well, we kind of do it indirectly. We emit a constructive variant when |
kunalspathak
commented
Jun 24, 2024
May be |
kunalspathak
commented
Jun 24, 2024
Add a link to #103850 in comment |
a74nh
commented
Jun 24, 2024
That would have to be inside the
In addition, all of this is done in common codegen code. We could forcibly set |
kunalspathak
commented
Jun 24, 2024
It will be still inside the individual case like https://github.com/dotnet/runtime/blob/e1efa6b633d01c00ec019a8e222b2ebdfa593bcb/src/coreclr/jit/emitarm64sve.cpp#L3861C28-L3861C62 and not in common code path.
I am ok to comment out the relevant unit test, because we are not supporting it currently. |
kunalspathak
commented
Jun 24, 2024
So perhaps something like |
SwapnilGaikwad
commented
Jun 25, 2024
|
Contribute towards #99957.
This PR contains
Sve.Splice(). It's the first one with an explicit mask and RMW semantics.