[Arm64] Implement Simd.Insert#16160
Conversation
|
This is passing all tests except it hits an ABI issue when returning a Vector64 when the immediate index is out of range. I will address that in a separate pull request. |
5be2459 to
38c42a5
Compare
|
My test case forgot to check the contained Extract case.
It is failing due to a LSRA issue. Source count does not match consume. I will amend the patch. When I figure it out. |
|
@tannergooding Thanks. Looks like I need a few lines from #16095. I seems like temporarily disabling the contain code would be prudent. |
38c42a5 to
2a4741b
Compare
|
I disabled containment. All tests are passing with the ABI changes which I will push separately. This should pass regression since previous version also passed. @CarolEidt PTAL |
2a4741b to
cf1e2d8
Compare
|
Pushed a change to re-enable containment now that it is working. |
|
@CarolEidt ping |
CarolEidt
left a comment
There was a problem hiding this comment.
LGTM, but more comments are needed.
| GenTree* op3 = argList->Rest()->Rest()->Current(); | ||
|
|
||
| // TODO-ARM64-CQ Support containing NI_ARM64_SIMD_GetItem (vector element to element move) | ||
| if (op3->OperIs(GT_HWIntrinsic) && (op3->AsHWIntrinsic()->gtHWIntrinsicId == NI_ARM64_SIMD_GetItem)) |
There was a problem hiding this comment.
These needs a comment explaining what is being done here (i.e. folding an extract of an element with an insert of that element into another vector).
|
|
||
| if (op3->isContained()) | ||
| { | ||
| // Handle vector element to vector element case |
There was a problem hiding this comment.
This needs a more explanatory comment to describe at a high level what's being done (e.g. this is a folding of SimdInsertOp(GetItem), and to clarify why 1) op3 is known (asserted) to be a GetItem, and 2) its srcLane is also known to be a constant.
|
@CarolEidt Added comments per you request |
@tannergooding @CarolEidt PTAL