Add pseudo-registers for pairs, triples, and quads of D registers.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 2 Feb 2012 22:45:32 +0000 (22:45 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 2 Feb 2012 22:45:32 +0000 (22:45 +0000)
commit42865588d7263593d102dcdf2f8f0994dca4bba4
treec255d904280fe6cfa46ea2ac290c03dba2f65e79
parent6ab8949cc12b59288e9cd1ca288171ab98832f4e
Add pseudo-registers for pairs, triples, and quads of D registers.

NEON loads and stores accept single and double spaced pairs, triples,
and quads of D registers.  This patch adds new register classes to
accurately model those constraints:

  Dn, Dn+1    Dn, Dn+2
  ----------------------
  DPair       DPairSpc
  DTriple     DTripleSpc
  DQuad       DQuadSpc

Also extend the existing QQ and QQQQ register classes to contains all Q
pairs and quads instead of just the aligned ones.

These new register classes will make it possible to accurately model
constraints on NEON loads and stores, and we can get rid of all the NEON
pseudo-instructions.  The late scheduler will be able to accurately
model instruction dependencies from the explicit operands.

This more than doubles the number of ARM registers, but the backend
passes are quite good at handling this. The llc -O0 compile time only
regresses by 1.5%.  Future work on register mask operands will recover
this regression.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149640 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMRegisterInfo.td