[PATCH] AArch64: convert VPR64/VPR128 to RegisterOperands

Tim Northover t.p.northover at gmail.com
Thu Sep 12 05:06:07 PDT 2013


This patch changes the AArch64 backend to use a RegisterOperand rather than a RegisterClass for the vector registers.

The difference is that RegisterOperands are essentially aliases for the RegisterClass with different printing/parsing methods. This matches almost exactly the status of AArch64's vector registers (they use "vN" in SIMD instructions but are really either "qN" or "dN").

Previously we had some rather nasty hierarchy of degenerate sub_xxx aliases, which Kevin Qin has recently discovered makes it virtually impossible to write patterns mapping VPR128 <-> VPR64.

Mostly this appears to simplify the code it touches. The main annoyance is that VPR128 and VPR64 become non-trivial operands and so the alias printer can't handle them (specifically, there's no way to print "mov vD.8b, vN.8b" instead of the "orr" form). However, this is an endemic problem (it already hits integer "mov" for example), so I think that's an acceptable sacrifice.

http://llvm-reviews.chandlerc.com/D1656

Files:
  lib/Target/AArch64/AArch64AsmPrinter.cpp
  lib/Target/AArch64/AArch64ISelLowering.cpp
  lib/Target/AArch64/AArch64InstrInfo.td
  lib/Target/AArch64/AArch64InstrNEON.td
  lib/Target/AArch64/AArch64RegisterInfo.td
  lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
  lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp
  lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp
  lib/Target/AArch64/InstPrinter/AArch64InstPrinter.h
  test/MC/AArch64/neon-mov.s
  test/MC/Disassembler/AArch64/neon-instructions.txt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1656.1.patch
Type: text/x-patch
Size: 43412 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130912/5a916439/attachment.bin>


More information about the llvm-commits mailing list