This is an archive of the discontinued LLVM Phabricator instance.

[AArch64][SVE2] Use destination register as source register
ClosedPublic

Authored by c-rhodes on Jul 29 2019, 2:53 AM.

Details

Summary

This patch fixes a bug whereby the destination register was not being
used as input in the following instructions:

  • SRI/SLI
  • EORBT/EORTB
  • TBX
  • Narrowing top instructions
  • FP convert precision instructions

Diff Detail

Repository
rL LLVM

Event Timeline

c-rhodes created this revision.Jul 29 2019, 2:53 AM
sdesmalen accepted this revision.Jul 30 2019, 9:08 AM

The changes are non-functional for the assembler/disassembler, but are genuine fixes to the instructions that are needed when the instructions will be used for codegen.

lib/Target/AArch64/SVEInstrFormats.td
2696 ↗(On Diff #212135)

It's worth pointing out (possibly also in the commit message) for these top/bottom instructions that the bottom ones are not destructive (they zero out the odd lanes), whereas the top ones are destructive (they leave the even lanes in-tact).

2725 ↗(On Diff #212135)

nit: // Top ?

2749 ↗(On Diff #212135)

nit: // Top ?

This revision is now accepted and ready to land.Jul 30 2019, 9:08 AM
This revision was automatically updated to reflect the committed changes.
c-rhodes marked 3 inline comments as done.Jul 31 2019, 1:46 AM