Page MenuHomePhabricator

[ARM] Add a batch of similarly encoded MVE instructions.
ClosedPublic

Authored by simon_tatham on May 30 2019, 8:22 AM.

Details

Summary

This adds the MVE_qDest_qSrc superclass and all instructions that
inherit from it. It's not the complete class of _everything_ with a
q-register as both destination and source; it's a subset of them that
all have similar encodings (but it would have been hopelessly unwieldy
to call it anything like MVE_111x11100).

This category includes add/sub with carry; long multiplies; halving
multiplies; multiply and accumulate, and some more complex
instructions.

Diff Detail

Repository
rL LLVM

Event Timeline

simon_tatham created this revision.May 30 2019, 8:22 AM

Remastered patch to apply cleanly against current trunk.

miyuki added a subscriber: miyuki.Jun 11 2019, 5:54 AM

Updated to rename instruction classes in line with the general MVE policy. Also, I spotted some instructions lurking in the middle of this section of ARMInstrMVE.td which aren't derived from the MVE_qDest_qSrc base class, so they should have been part of earlier patches. Moved them into D62674 and D62675 where they belong.

ostannard added inline comments.
llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
6704 ↗(On Diff #205782)

I think this needs to check the mnemonic is exactly "vmul", not just startswith, because we emit a literal "vmullt" below.

Addressed review comment about Mnemonic.startswith("vmul"), and also updated this patch to use the existing NEON complex rotation operands (with matching change in the test to expect the new nicer error messages).

This revision is now accepted and ready to land.Jun 21 2019, 4:54 AM
This revision was automatically updated to reflect the committed changes.