This is an archive of the discontinued LLVM Phabricator instance.

[AArch64]SME2 single-multi and multi-multi INT dot product instructions[part2]
ClosedPublic

Authored by CarolineConcatto on Oct 12 2022, 4:00 AM.

Details

Summary

This patch adds the assembly/disassembly for the following instructions:

    SDOT: (4-way, multiple and single vector): Multi-vector signed integer dot-product by vector.
          SDOT (4-way, multiple vectors): Multi-vector signed integer dot-product.
    UDOT: (4-way, multiple and single vector): Multi-vector unsigned integer dot-product by vector.
          (4-way, multiple vectors): Multi-vector unsigned integer dot-product.
for groups of 2 and 4 ZA registers

The reference can be found here:

https://developer.arm.com/documentation/ddi0602/2022-09

Depends on: D135563

Diff Detail

Event Timeline

Herald added a project: Restricted Project. · View Herald TranscriptOct 12 2022, 4:00 AM
CarolineConcatto requested review of this revision.Oct 12 2022, 4:00 AM
Herald added a project: Restricted Project. · View Herald TranscriptOct 12 2022, 4:00 AM
Matt added a subscriber: Matt.Oct 12 2022, 9:10 AM

-Rebase and fix unwanted change in the test

CarolineConcatto reclaimed this revision.Oct 24 2022, 5:45 PM

Wrong patch

Create generic multiclass for each class

Remove the 4way classes and reuse the ones from D135683

paulwalker-arm accepted this revision.Oct 25 2022, 9:14 AM

I have an observation regarding the quantity of tests but that's just something to consider for later patches (or later refactoring). The patch itself looks good to me.

I've not mentioned this before because the tests can be easily changed later but this patch with its handful of instructions best highlights my next point. There seems to be far more tests than the variability of the instruction encoding would suggest is necessary. Taking udot za.d[w#, #, vgx4], {z#.t - z#.t}, z#.t as an example, this one variant has 40+ tests. Tests are good and all but for something that reuses much of decoding operands and classes of other instructions it seems excessive. Another example is checking { z0.b - z1.b } is synonymous with { z0.b, z1.b }. This seems like something we can test in isolation rather than duplicating every equivalent test across all opcodes.

This revision is now accepted and ready to land.Oct 25 2022, 9:14 AM
This revision was landed with ongoing or failed builds.Oct 25 2022, 10:32 AM
This revision was automatically updated to reflect the committed changes.