aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/ARM/ARMISelLowering.cpp131
-rw-r--r--lib/Target/ARM/ARMISelLowering.h12
-rw-r--r--lib/Target/ARM/ARMPerfectShuffle.h6586
-rw-r--r--utils/PerfectShuffle/PerfectShuffle.cpp75
4 files changed, 6793 insertions, 11 deletions
diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp
index 2f194d39ba..18207c34a9 100644
--- a/lib/Target/ARM/ARMISelLowering.cpp
+++ b/lib/Target/ARM/ARMISelLowering.cpp
@@ -17,6 +17,7 @@
#include "ARMConstantPoolValue.h"
#include "ARMISelLowering.h"
#include "ARMMachineFunctionInfo.h"
+#include "ARMPerfectShuffle.h"
#include "ARMRegisterInfo.h"
#include "ARMSubtarget.h"
#include "ARMTargetMachine.h"
@@ -2488,6 +2489,26 @@ static SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) {
bool
ARMTargetLowering::isShuffleMaskLegal(const SmallVectorImpl<int> &M,
EVT VT) const {
+ if (VT.getVectorNumElements() == 4 &&
+ (VT.is128BitVector() || VT.is64BitVector())) {
+ unsigned PFIndexes[4];
+ for (unsigned i = 0; i != 4; ++i) {
+ if (M[i] < 0)
+ PFIndexes[i] = 8;
+ else
+ PFIndexes[i] = M[i];
+ }
+
+ // Compute the index in the perfect shuffle table.
+ unsigned PFTableIndex =
+ PFIndexes[0]*9*9*9+PFIndexes[1]*9*9+PFIndexes[2]*9+PFIndexes[3];
+ unsigned PFEntry = PerfectShuffleTable[PFTableIndex];
+ unsigned Cost = (PFEntry >> 30);
+
+ if (Cost <= 4)
+ return true;
+ }
+
bool ReverseVEXT;
unsigned Imm;
@@ -2498,10 +2519,84 @@ ARMTargetLowering::isShuffleMaskLegal(const SmallVectorImpl<int> &M,
isVEXTMask(M, VT, ReverseVEXT, Imm));
}
+/// GeneratePerfectShuffle - Given an entry in the perfect-shuffle table, emit
+/// the specified operations to build the shuffle.
+static SDValue GeneratePerfectShuffle(unsigned PFEntry, SDValue LHS,
+ SDValue RHS, SelectionDAG &DAG,
+ DebugLoc dl) {
+ unsigned OpNum = (PFEntry >> 26) & 0x0F;
+ unsigned LHSID = (PFEntry >> 13) & ((1 << 13)-1);
+ unsigned RHSID = (PFEntry >> 0) & ((1 << 13)-1);
+
+ enum {
+ OP_COPY = 0, // Copy, used for things like <u,u,u,3> to say it is <0,1,2,3>
+ OP_VREV,
+ OP_VDUP0,
+ OP_VDUP1,
+ OP_VDUP2,
+ OP_VDUP3,
+ OP_VEXT1,
+ OP_VEXT2,
+ OP_VEXT3,
+ OP_VUZPL, // VUZP, left result
+ OP_VUZPR, // VUZP, right result
+ OP_VZIPL, // VZIP, left result
+ OP_VZIPR, // VZIP, right result
+ OP_VTRNL, // VTRN, left result
+ OP_VTRNR // VTRN, right result
+ };
+
+ if (OpNum == OP_COPY) {
+ if (LHSID == (1*9+2)*9+3) return LHS;
+ assert(LHSID == ((4*9+5)*9+6)*9+7 && "Illegal OP_COPY!");
+ return RHS;
+ }
+
+ SDValue OpLHS, OpRHS;
+ OpLHS = GeneratePerfectShuffle(PerfectShuffleTable[LHSID], LHS, RHS, DAG, dl);
+ OpRHS = GeneratePerfectShuffle(PerfectShuffleTable[RHSID], LHS, RHS, DAG, dl);
+ EVT VT = OpLHS.getValueType();
+
+ switch (OpNum) {
+ default: llvm_unreachable("Unknown shuffle opcode!");
+ case OP_VREV:
+ return DAG.getNode(ARMISD::VREV64, dl, VT, OpLHS);
+ case OP_VDUP0:
+ case OP_VDUP1:
+ case OP_VDUP2:
+ case OP_VDUP3:
+ return DAG.getNode(ARMISD::VDUPLANE, dl, VT,
+ OpLHS, DAG.getConstant(OpNum-OP_VDUP0+1, MVT::i32));
+ case OP_VEXT1:
+ case OP_VEXT2:
+ case OP_VEXT3:
+ return DAG.getNode(ARMISD::VEXT, dl, VT,
+ OpLHS, OpRHS,
+ DAG.getConstant(OpNum-OP_VEXT1+1, MVT::i32));
+ case OP_VUZPL:
+ case OP_VUZPR:
+ return DAG.getNode(VT.is64BitVector() ? ARMISD::VUZP16 : ARMISD::VUZP32,
+ dl, DAG.getVTList(VT, VT),
+ OpLHS, OpRHS).getValue(OpNum-OP_VUZPL);
+ case OP_VZIPL:
+ case OP_VZIPR:
+ return DAG.getNode(VT.is64BitVector() ? ARMISD::VZIP16 : ARMISD::VZIP32,
+ dl, DAG.getVTList(VT, VT),
+ OpLHS, OpRHS).getValue(OpNum-OP_VZIPL);
+ case OP_VTRNL:
+ case OP_VTRNR:
+ return DAG.getNode(VT.is64BitVector() ? ARMISD::VTRN16 : ARMISD::VTRN32,
+ dl, DAG.getVTList(VT, VT),
+ OpLHS, OpRHS).getValue(0);
+ }
+}
+
static SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) {
- ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(Op.getNode());
+ SDValue V1 = Op.getOperand(0);
+ SDValue V2 = Op.getOperand(1);
DebugLoc dl = Op.getDebugLoc();
EVT VT = Op.getValueType();
+ ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(Op.getNode());
SmallVector<int, 8> ShuffleMask;
// Convert shuffles that are directly supported on NEON to target-specific
@@ -2514,11 +2609,10 @@ static SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) {
if (ShuffleVectorSDNode::isSplatMask(&ShuffleMask[0], VT)) {
int Lane = SVN->getSplatIndex();
- SDValue Op0 = SVN->getOperand(0);
- if (Lane == 0 && Op0.getOpcode() == ISD::SCALAR_TO_VECTOR) {
- return DAG.getNode(ARMISD::VDUP, dl, VT, Op0.getOperand(0));
+ if (Lane == 0 && V1.getOpcode() == ISD::SCALAR_TO_VECTOR) {
+ return DAG.getNode(ARMISD::VDUP, dl, VT, V1.getOperand(0));
}
- return DAG.getNode(ARMISD::VDUPLANE, dl, VT, SVN->getOperand(0),
+ return DAG.getNode(ARMISD::VDUPLANE, dl, VT, V1,
DAG.getConstant(Lane, MVT::i32));
}
@@ -2534,11 +2628,32 @@ static SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) {
}
if (isVREVMask(ShuffleMask, VT, 64))
- return DAG.getNode(ARMISD::VREV64, dl, VT, SVN->getOperand(0));
+ return DAG.getNode(ARMISD::VREV64, dl, VT, V1);
if (isVREVMask(ShuffleMask, VT, 32))
- return DAG.getNode(ARMISD::VREV32, dl, VT, SVN->getOperand(0));
+ return DAG.getNode(ARMISD::VREV32, dl, VT, V1);
if (isVREVMask(ShuffleMask, VT, 16))
- return DAG.getNode(ARMISD::VREV16, dl, VT, SVN->getOperand(0));
+ return DAG.getNode(ARMISD::VREV16, dl, VT, V1);
+
+ if (VT.getVectorNumElements() == 4 &&
+ (VT.is128BitVector() || VT.is64BitVector())) {
+ unsigned PFIndexes[4];
+ for (unsigned i = 0; i != 4; ++i) {
+ if (ShuffleMask[i] < 0)
+ PFIndexes[i] = 8;
+ else
+ PFIndexes[i] = ShuffleMask[i];
+ }
+
+ // Compute the index in the perfect shuffle table.
+ unsigned PFTableIndex =
+ PFIndexes[0]*9*9*9+PFIndexes[1]*9*9+PFIndexes[2]*9+PFIndexes[3];
+
+ unsigned PFEntry = PerfectShuffleTable[PFTableIndex];
+ unsigned Cost = (PFEntry >> 30);
+
+ if (Cost <= 4)
+ return GeneratePerfectShuffle(PFEntry, V1, V2, DAG, dl);
+ }
return SDValue();
}
diff --git a/lib/Target/ARM/ARMISelLowering.h b/lib/Target/ARM/ARMISelLowering.h
index b72a59f317..c54eddd88c 100644
--- a/lib/Target/ARM/ARMISelLowering.h
+++ b/lib/Target/ARM/ARMISelLowering.h
@@ -131,7 +131,17 @@ namespace llvm {
VEXT, // extract
VREV64, // reverse elements within 64-bit doublewords
VREV32, // reverse elements within 32-bit words
- VREV16 // reverse elements within 16-bit halfwords
+ VREV16, // reverse elements within 16-bit halfwords
+
+ VZIP32,
+ VZIP16,
+ VZIP8,
+ VUZP32,
+ VUZP16,
+ VUZP8,
+ VTRN32,
+ VTRN16,
+ VTRN8
};
}
diff --git a/lib/Target/ARM/ARMPerfectShuffle.h b/lib/Target/ARM/ARMPerfectShuffle.h
new file mode 100644
index 0000000000..51da27aeb9
--- /dev/null
+++ b/lib/Target/ARM/ARMPerfectShuffle.h
@@ -0,0 +1,6586 @@
+//===-- ARMPerfectShuffle.h - NEON Perfect Shuffle Table ------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file, which was autogenerated by llvm-PerfectShuffle, contains data
+// for the optimal way to build a perfect shuffle using neon instructions.
+//
+//===----------------------------------------------------------------------===//
+
+// 31 entries have cost 0
+// 242 entries have cost 1
+// 1374 entries have cost 2
+// 3515 entries have cost 3
+// 1390 entries have cost 4
+// 9 entries have cost 5
+
+// This table is 6561*4 = 26244 bytes in size.
+static const unsigned PerfectShuffleTable[6561+1] = {
+ 135053414U, // <0,0,0,0>: Cost 1 vdup0 LHS
+ 1543503974U, // <0,0,0,1>: Cost 2 vext2 <0,0,0,0>, LHS
+ 2819407872U, // <0,0,0,2>: Cost 3 vuzpr LHS, <0,0,0,0>
+ 2568054923U, // <0,0,0,3>: Cost 3 vext1 <3,0,0,0>, <3,0,0,0>
+ 1476398390U, // <0,0,0,4>: Cost 2 vext1 <0,0,0,0>, RHS
+ 2550140624U, // <0,0,0,5>: Cost 3 vext1 <0,0,0,0>, <5,1,7,3>
+ 2550141434U, // <0,0,0,6>: Cost 3 vext1 <0,0,0,0>, <6,2,7,3>
+ 2591945711U, // <0,0,0,7>: Cost 3 vext1 <7,0,0,0>, <7,0,0,0>
+ 135053414U, // <0,0,0,u>: Cost 1 vdup0 LHS
+ 2556117094U, // <0,0,1,0>: Cost 3 vext1 <1,0,0,1>, LHS
+ 1879883878U, // <0,0,1,1>: Cost 2 vzipr LHS, LHS
+ 1618133094U, // <0,0,1,2>: Cost 2 vext3 <1,2,3,0>, LHS
+ 2568063116U, // <0,0,1,3>: Cost 3 vext1 <3,0,0,1>, <3,0,0,1>
+ 2556120374U, // <0,0,1,4>: Cost 3 vext1 <1,0,0,1>, RHS
+ 2617246864U, // <0,0,1,5>: Cost 3 vext2 <0,0,0,0>, <1,5,3,7>
+ 3629863418U, // <0,0,1,6>: Cost 4 vext1 <1,0,0,1>, <6,2,7,3>
+ 2591953904U, // <0,0,1,7>: Cost 3 vext1 <7,0,0,1>, <7,0,0,1>
+ 1884528742U, // <0,0,1,u>: Cost 2 vzipr LHS, LHS
+ 3088351334U, // <0,0,2,0>: Cost 3 vtrnr <0,2,0,2>, LHS
+ 2953625764U, // <0,0,2,1>: Cost 3 vzipr LHS, <0,2,0,2>
+ 2014101606U, // <0,0,2,2>: Cost 2 vtrnr LHS, LHS
+ 2631181989U, // <0,0,2,3>: Cost 3 vext2 <2,3,0,0>, <2,3,0,0>
+ 2562100534U, // <0,0,2,4>: Cost 3 vext1 <2,0,0,2>, RHS
+ 3635842768U, // <0,0,2,5>: Cost 4 vext1 <2,0,0,2>, <5,1,7,3>
+ 2617247674U, // <0,0,2,6>: Cost 3 vext2 <0,0,0,0>, <2,6,3,7>
+ 2591962097U, // <0,0,2,7>: Cost 3 vext1 <7,0,0,2>, <7,0,0,2>
+ 2014543974U, // <0,0,2,u>: Cost 2 vtrnr LHS, LHS
+ 2635163787U, // <0,0,3,0>: Cost 3 vext2 <3,0,0,0>, <3,0,0,0>
+ 3704260849U, // <0,0,3,1>: Cost 4 vext2 <2,2,0,0>, <3,1,2,3>
+ 2686492933U, // <0,0,3,2>: Cost 3 vext3 <0,3,2,0>, <0,3,2,0>
+ 2617248156U, // <0,0,3,3>: Cost 3 vext2 <0,0,0,0>, <3,3,3,3>
+ 2617248258U, // <0,0,3,4>: Cost 3 vext2 <0,0,0,0>, <3,4,5,6>
+ 3913302016U, // <0,0,3,5>: Cost 4 vuzpr <3,4,5,6>, <0,0,0,0>
+ 3690990218U, // <0,0,3,6>: Cost 4 vext2 <0,0,0,0>, <3,6,2,7>
+ 3690990275U, // <0,0,3,7>: Cost 4 vext2 <0,0,0,0>, <3,7,0,1>
+ 2635163787U, // <0,0,3,u>: Cost 3 vext2 <3,0,0,0>, <3,0,0,0>
+ 2643790738U, // <0,0,4,0>: Cost 3 vext2 <4,4,0,0>, <4,0,5,1>
+ 2718712146U, // <0,0,4,1>: Cost 3 vext3 <5,6,7,0>, <0,4,1,5>
+ 2718712156U, // <0,0,4,2>: Cost 3 vext3 <5,6,7,0>, <0,4,2,6>
+ 3641829519U, // <0,0,4,3>: Cost 4 vext1 <3,0,0,4>, <3,0,0,4>
+ 2643791016U, // <0,0,4,4>: Cost 3 vext2 <4,4,0,0>, <4,4,0,0>
+ 1543507254U, // <0,0,4,5>: Cost 2 vext2 <0,0,0,0>, RHS
+ 2846277632U, // <0,0,4,6>: Cost 3 vuzpr RHS, <0,0,0,0>
+ 3665720307U, // <0,0,4,7>: Cost 4 vext1 <7,0,0,4>, <7,0,0,4>
+ 1543507497U, // <0,0,4,u>: Cost 2 vext2 <0,0,0,0>, RHS
+ 2684354972U, // <0,0,5,0>: Cost 3 vext3 <0,0,0,0>, <0,5,0,7>
+ 2617249488U, // <0,0,5,1>: Cost 3 vext2 <0,0,0,0>, <5,1,7,3>
+ 3696299808U, // <0,0,5,2>: Cost 4 vext2 <0,u,0,0>, <5,2,7,2>
+ 3690991471U, // <0,0,5,3>: Cost 4 vext2 <0,0,0,0>, <5,3,7,0>
+ 2617249734U, // <0,0,5,4>: Cost 3 vext2 <0,0,0,0>, <5,4,7,6>
+ 2617249796U, // <0,0,5,5>: Cost 3 vext2 <0,0,0,0>, <5,5,5,5>
+ 2718712274U, // <0,0,5,6>: Cost 3 vext3 <5,6,7,0>, <0,5,6,7>
+ 3923378176U, // <0,0,5,7>: Cost 4 vuzpr <5,1,7,3>, <0,0,0,0>
+ 2720039396U, // <0,0,5,u>: Cost 3 vext3 <5,u,7,0>, <0,5,u,7>
+ 2684355053U, // <0,0,6,0>: Cost 3 vext3 <0,0,0,0>, <0,6,0,7>
+ 3786113526U, // <0,0,6,1>: Cost 4 vext3 <4,6,2,0>, <0,6,1,7>
+ 2617250298U, // <0,0,6,2>: Cost 3 vext2 <0,0,0,0>, <6,2,7,3>
+ 3704263240U, // <0,0,6,3>: Cost 4 vext2 <2,2,0,0>, <6,3,7,0>
+ 3729478234U, // <0,0,6,4>: Cost 4 vext2 <6,4,0,0>, <6,4,0,0>
+ 3717534443U, // <0,0,6,5>: Cost 4 vext2 <4,4,0,0>, <6,5,7,1>
+ 2617250616U, // <0,0,6,6>: Cost 3 vext2 <0,0,0,0>, <6,6,6,6>
+ 2657727309U, // <0,0,6,7>: Cost 3 vext2 <6,7,0,0>, <6,7,0,0>
+ 2658390942U, // <0,0,6,u>: Cost 3 vext2 <6,u,0,0>, <6,u,0,0>
+ 2659054575U, // <0,0,7,0>: Cost 3 vext2 <7,0,0,0>, <7,0,0,0>
+ 3934208000U, // <0,0,7,1>: Cost 4 vuzpr <7,0,1,2>, <0,0,0,0>
+ 3934265508U, // <0,0,7,2>: Cost 4 vuzpr <7,0,2,0>, <0,2,0,2>
+ 3734787298U, // <0,0,7,3>: Cost 4 vext2 <7,3,0,0>, <7,3,0,0>
+ 2617251174U, // <0,0,7,4>: Cost 3 vext2 <0,0,0,0>, <7,4,5,6>
+ 3665743970U, // <0,0,7,5>: Cost 4 vext1 <7,0,0,7>, <5,6,7,0>
+ 3665744562U, // <0,0,7,6>: Cost 4 vext1 <7,0,0,7>, <6,5,0,7>
+ 2617251436U, // <0,0,7,7>: Cost 3 vext2 <0,0,0,0>, <7,7,7,7>
+ 2659054575U, // <0,0,7,u>: Cost 3 vext2 <7,0,0,0>, <7,0,0,0>
+ 135053414U, // <0,0,u,0>: Cost 1 vdup0 LHS
+ 1879884445U, // <0,0,u,1>: Cost 2 vzipr LHS, LHS
+ 2014101660U, // <0,0,u,2>: Cost 2 vtrnr LHS, LHS
+ 2568120467U, // <0,0,u,3>: Cost 3 vext1 <3,0,0,u>, <3,0,0,u>
+ 1476463926U, // <0,0,u,4>: Cost 2 vext1 <0,0,0,u>, RHS
+ 1543510170U, // <0,0,u,5>: Cost 2 vext2 <0,0,0,0>, RHS
+ 2870165504U, // <0,0,u,6>: Cost 3 vuzpr RHS, <0,0,0,0>
+ 2592011255U, // <0,0,u,7>: Cost 3 vext1 <7,0,0,u>, <7,0,0,u>
+ 135053414U, // <0,0,u,u>: Cost 1 vdup0 LHS
+ 2631188480U, // <0,1,0,0>: Cost 3 vext2 <2,3,0,1>, <0,0,0,0>
+ 1557446758U, // <0,1,0,1>: Cost 2 vext2 <2,3,0,1>, LHS
+ 2819448842U, // <0,1,0,2>: Cost 3 vuzpr LHS, <0,0,1,1>
+ 3020734464U, // <0,1,0,3>: Cost 3 vtrnl LHS, <0,0,0,0>
+ 2568129846U, // <0,1,0,4>: Cost 3 vext1 <3,0,1,0>, RHS
+ 3641872080U, // <0,1,0,5>: Cost 4 vext1 <3,0,1,0>, <5,1,7,3>
+ 2592019278U, // <0,1,0,6>: Cost 3 vext1 <7,0,1,0>, <6,7,0,1>
+ 2592019448U, // <0,1,0,7>: Cost 3 vext1 <7,0,1,0>, <7,0,1,0>
+ 1557447325U, // <0,1,0,u>: Cost 2 vext2 <2,3,0,1>, LHS
+ 1524252774U, // <0,1,1,0>: Cost 2 vext1 <u,0,1,1>, LHS
+ 2556191459U, // <0,1,1,1>: Cost 3 vext1 <1,0,1,1>, <1,0,1,1>
+ 2960310374U, // <0,1,1,2>: Cost 3 vzipr <1,2,3,0>, LHS
+ 3020734474U, // <0,1,1,3>: Cost 3 vtrnl LHS, <0,0,1,1>
+ 1524256054U, // <0,1,1,4>: Cost 2 vext1 <u,0,1,1>, RHS
+ 2580082247U, // <0,1,1,5>: Cost 3 vext1 <5,0,1,1>, <5,0,1,1>
+ 2597999098U, // <0,1,1,6>: Cost 3 vext1 <u,0,1,1>, <6,2,7,3>
+ 2597999610U, // <0,1,1,7>: Cost 3 vext1 <u,0,1,1>, <7,0,1,2>
+ 1524258514U, // <0,1,1,u>: Cost 2 vext1 <u,0,1,1>, <u,0,1,1>
+ 1494401126U, // <0,1,2,0>: Cost 2 vext1 <3,0,1,2>, LHS
+ 2556199652U, // <0,1,2,1>: Cost 3 vext1 <1,0,1,2>, <1,0,1,2>
+ 2562172349U, // <0,1,2,2>: Cost 3 vext1 <2,0,1,2>, <2,0,1,2>
+ 835584U, // <0,1,2,3>: Cost 0 copy LHS
+ 1494404406U, // <0,1,2,4>: Cost 2 vext1 <3,0,1,2>, RHS
+ 2568146640U, // <0,1,2,5>: Cost 3 vext1 <3,0,1,2>, <5,1,7,3>
+ 2568147450U, // <0,1,2,6>: Cost 3 vext1 <3,0,1,2>, <6,2,7,3>
+ 1518294010U, // <0,1,2,7>: Cost 2 vext1 <7,0,1,2>, <7,0,1,2>
+ 835584U, // <0,1,2,u>: Cost 0 copy LHS
+ 2631190676U, // <0,1,3,0>: Cost 3 vext2 <2,3,0,1>, <3,0,1,0>
+ 3696969948U, // <0,1,3,1>: Cost 4 vext2 <1,0,0,1>, <3,1,0,0>
+ 2631190856U, // <0,1,3,2>: Cost 3 vext2 <2,3,0,1>, <3,2,3,0>
+ 2692539367U, // <0,1,3,3>: Cost 3 vext3 <1,3,3,0>, <1,3,3,0>
+ 2631191042U, // <0,1,3,4>: Cost 3 vext2 <2,3,0,1>, <3,4,5,6>
+ 3704932898U, // <0,1,3,5>: Cost 4 vext2 <2,3,0,1>, <3,5,0,2>
+ 2657733296U, // <0,1,3,6>: Cost 3 vext2 <6,7,0,1>, <3,6,7,0>
+ 2639817411U, // <0,1,3,7>: Cost 3 vext2 <3,7,0,1>, <3,7,0,1>
+ 2692908052U, // <0,1,3,u>: Cost 3 vext3 <1,3,u,0>, <1,3,u,0>
+ 2631191442U, // <0,1,4,0>: Cost 3 vext2 <2,3,0,1>, <4,0,5,1>
+ 3704933322U, // <0,1,4,1>: Cost 4 vext2 <2,3,0,1>, <4,1,2,3>
+ 2568160934U, // <0,1,4,2>: Cost 3 vext1 <3,0,1,4>, <2,3,0,1>
+ 2568161432U, // <0,1,4,3>: Cost 3 vext1 <3,0,1,4>, <3,0,1,4>
+ 2568162614U, // <0,1,4,4>: Cost 3 vext1 <3,0,1,4>, RHS
+ 1557450038U, // <0,1,4,5>: Cost 2 vext2 <2,3,0,1>, RHS
+ 2631191884U, // <0,1,4,6>: Cost 3 vext2 <2,3,0,1>, <4,6,0,2>
+ 2592052220U, // <0,1,4,7>: Cost 3 vext1 <7,0,1,4>, <7,0,1,4>
+ 1557450281U, // <0,1,4,u>: Cost 2 vext2 <2,3,0,1>, RHS
+ 3704933959U, // <0,1,5,0>: Cost 4 vext2 <2,3,0,1>, <5,0,1,1>
+ 2631192272U, // <0,1,5,1>: Cost 3 vext2 <2,3,0,1>, <5,1,7,3>
+ 3696308006U, // <0,1,5,2>: Cost 4 vext2 <0,u,0,1>, <5,2,7,u>
+ 2718712976U, // <0,1,5,3>: Cost 3 vext3 <5,6,7,0>, <1,5,3,7>
+ 2657734598U, // <0,1,5,4>: Cost 3 vext2 <6,7,0,1>, <5,4,7,6>
+ 2657734660U, // <0,1,5,5>: Cost 3 vext2 <6,7,0,1>, <5,5,5,5>
+ 2651099172U, // <0,1,5,6>: Cost 3 vext2 <5,6,0,1>, <5,6,0,1>
+ 3704934518U, // <0,1,5,7>: Cost 4 vext2 <2,3,0,1>, <5,7,0,2>
+ 2631192839U, // <0,1,5,u>: Cost 3 vext2 <2,3,0,1>, <5,u,7,3>
+ 2592063590U, // <0,1,6,0>: Cost 3 vext1 <7,0,1,6>, LHS
+ 3704934780U, // <0,1,6,1>: Cost 4 vext2 <2,3,0,1>, <6,1,2,3>
+ 2631193082U, // <0,1,6,2>: Cost 3 vext2 <2,3,0,1>, <6,2,7,3>
+ 3704934984U, // <0,1,6,3>: Cost 4 vext2 <2,3,0,1>, <6,3,7,0>
+ 2592066870U, // <0,1,6,4>: Cost 3 vext1 <7,0,1,6>, RHS
+ 3721523947U, // <0,1,6,5>: Cost 4 vext2 <5,1,0,1>, <6,5,7,1>
+ 2657735480U, // <0,1,6,6>: Cost 3 vext2 <6,7,0,1>, <6,6,6,6>
+ 1583993678U, // <0,1,6,7>: Cost 2 vext2 <6,7,0,1>, <6,7,0,1>
+ 1584657311U, // <0,1,6,u>: Cost 2 vext2 <6,u,0,1>, <6,u,0,1>
+ 2657735672U, // <0,1,7,0>: Cost 3 vext2 <6,7,0,1>, <7,0,1,0>
+ 3731477571U, // <0,1,7,1>: Cost 4 vext2 <6,7,0,1>, <7,1,0,3>
+ 2631193772U, // <0,1,7,2>: Cost 3 vext2 <2,3,0,1>, <7,2,3,0>
+ 2661053667U, // <0,1,7,3>: Cost 3 vext2 <7,3,0,1>, <7,3,0,1>
+ 2657736038U, // <0,1,7,4>: Cost 3 vext2 <6,7,0,1>, <7,4,5,6>
+ 3721524621U, // <0,1,7,5>: Cost 4 vext2 <5,1,0,1>, <7,5,1,0>
+ 2657736158U, // <0,1,7,6>: Cost 3 vext2 <6,7,0,1>, <7,6,1,0>
+ 2657736300U, // <0,1,7,7>: Cost 3 vext2 <6,7,0,1>, <7,7,7,7>
+ 2657736322U, // <0,1,7,u>: Cost 3 vext2 <6,7,0,1>, <7,u,1,2>
+ 1494450278U, // <0,1,u,0>: Cost 2 vext1 <3,0,1,u>, LHS
+ 1557452590U, // <0,1,u,1>: Cost 2 vext2 <2,3,0,1>, LHS
+ 2960310941U, // <0,1,u,2>: Cost 3 vzipr <1,2,3,0>, LHS
+ 835584U, // <0,1,u,3>: Cost 0 copy LHS
+ 1494453558U, // <0,1,u,4>: Cost 2 vext1 <3,0,1,u>, RHS
+ 1557452954U, // <0,1,u,5>: Cost 2 vext2 <2,3,0,1>, RHS
+ 2631194800U, // <0,1,u,6>: Cost 3 vext2 <2,3,0,1>, <u,6,0,2>
+ 1518343168U, // <0,1,u,7>: Cost 2 vext1 <7,0,1,u>, <7,0,1,u>
+ 835584U, // <0,1,u,u>: Cost 0 copy LHS
+ 2618589184U, // <0,2,0,0>: Cost 3 vext2 <0,2,0,2>, <0,0,0,0>
+ 1544847462U, // <0,2,0,1>: Cost 2 vext2 <0,2,0,2>, LHS
+ 1745666150U, // <0,2,0,2>: Cost 2 vuzpr LHS, LHS
+ 2886516736U, // <0,2,0,3>: Cost 3 vzipl LHS, <0,0,0,0>
+ 2562231606U, // <0,2,0,4>: Cost 3 vext1 <2,0,2,0>, RHS
+ 3635973840U, // <0,2,0,5>: Cost 4 vext1 <2,0,2,0>, <5,1,7,3>
+ 2586120488U, // <0,2,0,6>: Cost 3 vext1 <6,0,2,0>, <6,0,2,0>
+ 2592093185U, // <0,2,0,7>: Cost 3 vext1 <7,0,2,0>, <7,0,2,0>
+ 1746108518U, // <0,2,0,u>: Cost 2 vuzpr LHS, LHS
+ 2618589942U, // <0,2,1,0>: Cost 3 vext2 <0,2,0,2>, <1,0,3,2>
+ 2618590004U, // <0,2,1,1>: Cost 3 vext2 <0,2,0,2>, <1,1,1,1>
+ 2618590102U, // <0,2,1,2>: Cost 3 vext2 <0,2,0,2>, <1,2,3,0>
+ 2886518438U, // <0,2,1,3>: Cost 3 vzipl LHS, <2,3,0,1>
+ 2556267830U, // <0,2,1,4>: Cost 3 vext1 <1,0,2,1>, RHS
+ 2645132432U, // <0,2,1,5>: Cost 3 vext2 <4,6,0,2>, <1,5,3,7>
+ 2586128681U, // <0,2,1,6>: Cost 3 vext1 <6,0,2,1>, <6,0,2,1>
+ 3725509931U, // <0,2,1,7>: Cost 4 vext2 <5,7,0,2>, <1,7,3,0>
+ 2886559398U, // <0,2,1,u>: Cost 3 vzipl LHS, <2,3,0,1>
+ 1524334694U, // <0,2,2,0>: Cost 2 vext1 <u,0,2,2>, LHS
+ 2618590744U, // <0,2,2,1>: Cost 3 vext2 <0,2,0,2>, <2,1,2,3>
+ 2618590824U, // <0,2,2,2>: Cost 3 vext2 <0,2,0,2>, <2,2,2,2>
+ 2886516900U, // <0,2,2,3>: Cost 3 vzipl LHS, <0,2,0,2>
+ 1524337974U, // <0,2,2,4>: Cost 2 vext1 <u,0,2,2>, RHS
+ 2598080208U, // <0,2,2,5>: Cost 3 vext1 <u,0,2,2>, <5,1,7,3>
+ 2645133242U, // <0,2,2,6>: Cost 3 vext2 <4,6,0,2>, <2,6,3,7>
+ 2598081530U, // <0,2,2,7>: Cost 3 vext1 <u,0,2,2>, <7,0,1,2>
+ 1524340444U, // <0,2,2,u>: Cost 2 vext1 <u,0,2,2>, <u,0,2,2>
+ 2618591382U, // <0,2,3,0>: Cost 3 vext2 <0,2,0,2>, <3,0,1,2>
+ 2691876528U, // <0,2,3,1>: Cost 3 vext3 <1,2,3,0>, <2,3,1,2>
+ 3692333360U, // <0,2,3,2>: Cost 4 vext2 <0,2,0,2>, <3,2,0,3>
+ 2618591644U, // <0,2,3,3>: Cost 3 vext2 <0,2,0,2>, <3,3,3,3>
+ 2618591746U, // <0,2,3,4>: Cost 3 vext2 <0,2,0,2>, <3,4,5,6>
+ 2839560294U, // <0,2,3,5>: Cost 3 vuzpr <3,4,5,6>, LHS
+ 3692333706U, // <0,2,3,6>: Cost 4 vext2 <0,2,0,2>, <3,6,2,7>
+ 2698807012U, // <0,2,3,7>: Cost 3 vext3 <2,3,7,0>, <2,3,7,0>
+ 2618592030U, // <0,2,3,u>: Cost 3 vext2 <0,2,0,2>, <3,u,1,2>
+ 2618592146U, // <0,2,4,0>: Cost 3 vext2 <0,2,0,2>, <4,0,5,1>
+ 3692334062U, // <0,2,4,1>: Cost 4 vext2 <0,2,0,2>, <4,1,6,3>
+ 2226718152U, // <0,2,4,2>: Cost 3 vrev <2,0,2,4>
+ 2568235169U, // <0,2,4,3>: Cost 3 vext1 <3,0,2,4>, <3,0,2,4>
+ 2562264374U, // <0,2,4,4>: Cost 3 vext1 <2,0,2,4>, RHS
+ 1544850742U, // <0,2,4,5>: Cost 2 vext2 <0,2,0,2>, RHS
+ 1772535910U, // <0,2,4,6>: Cost 2 vuzpr RHS, LHS
+ 2592125957U, // <0,2,4,7>: Cost 3 vext1 <7,0,2,4>, <7,0,2,4>
+ 1544850985U, // <0,2,4,u>: Cost 2 vext2 <0,2,0,2>, RHS
+ 2691876686U, // <0,2,5,0>: Cost 3 vext3 <1,2,3,0>, <2,5,0,7>
+ 2618592976U, // <0,2,5,1>: Cost 3 vext2 <0,2,0,2>, <5,1,7,3>
+ 2618593056U, // <0,2,5,2>: Cost 3 vext2 <0,2,0,2>, <5,2,7,2>
+ 3964905940U, // <0,2,5,3>: Cost 4 vzipl LHS, <3,4,0,5>
+ 2645135302U, // <0,2,5,4>: Cost 3 vext2 <4,6,0,2>, <5,4,7,6>
+ 2645135364U, // <0,2,5,5>: Cost 3 vext2 <4,6,0,2>, <5,5,5,5>
+ 2645135458U, // <0,2,5,6>: Cost 3 vext2 <4,6,0,2>, <5,6,7,0>
+ 2849636454U, // <0,2,5,7>: Cost 3 vuzpr <5,1,7,3>, LHS
+ 2645135620U, // <0,2,5,u>: Cost 3 vext2 <4,6,0,2>, <5,u,7,0>
+ 2645135656U, // <0,2,6,0>: Cost 3 vext2 <4,6,0,2>, <6,0,2,0>
+ 2645135740U, // <0,2,6,1>: Cost 3 vext2 <4,6,0,2>, <6,1,2,3>
+ 2618593786U, // <0,2,6,2>: Cost 3 vext2 <0,2,0,2>, <6,2,7,3>
+ 2718713786U, // <0,2,6,3>: Cost 3 vext3 <5,6,7,0>, <2,6,3,7>
+ 2645135980U, // <0,2,6,4>: Cost 3 vext2 <4,6,0,2>, <6,4,2,0>
+ 2645136068U, // <0,2,6,5>: Cost 3 vext2 <4,6,0,2>, <6,5,2,7>
+ 2645136184U, // <0,2,6,6>: Cost 3 vext2 <4,6,0,2>, <6,6,6,6>
+ 2645136206U, // <0,2,6,7>: Cost 3 vext2 <4,6,0,2>, <6,7,0,1>
+ 2618594272U, // <0,2,6,u>: Cost 3 vext2 <0,2,0,2>, <6,u,7,3>
+ 2645136378U, // <0,2,7,0>: Cost 3 vext2 <4,6,0,2>, <7,0,1,2>
+ 2860466278U, // <0,2,7,1>: Cost 3 vuzpr <7,0,1,2>, LHS
+ 3692336303U, // <0,2,7,2>: Cost 4 vext2 <0,2,0,2>, <7,2,3,3>
+ 2701166596U, // <0,2,7,3>: Cost 3 vext3 <2,7,3,0>, <2,7,3,0>
+ 2645136742U, // <0,2,7,4>: Cost 3 vext2 <4,6,0,2>, <7,4,5,6>
+ 2863448166U, // <0,2,7,5>: Cost 3 vuzpr <7,4,5,6>, LHS
+ 3718878688U, // <0,2,7,6>: Cost 4 vext2 <4,6,0,2>, <7,6,1,2>
+ 2645137004U, // <0,2,7,7>: Cost 3 vext2 <4,6,0,2>, <7,7,7,7>
+ 2645137026U, // <0,2,7,u>: Cost 3 vext2 <4,6,0,2>, <7,u,1,2>
+ 1524383846U, // <0,2,u,0>: Cost 2 vext1 <u,0,2,u>, LHS
+ 1544853294U, // <0,2,u,1>: Cost 2 vext2 <0,2,0,2>, LHS
+ 1793441894U, // <0,2,u,2>: Cost 2 vuzpr LHS, LHS
+ 2886518445U, // <0,2,u,3>: Cost 3 vzipl LHS, <2,3,0,u>
+ 1524387126U, // <0,2,u,4>: Cost 2 vext1 <u,0,2,u>, RHS
+ 1544853658U, // <0,2,u,5>: Cost 2 vext2 <0,2,0,2>, RHS
+ 1796423782U, // <0,2,u,6>: Cost 2 vuzpr RHS, LHS
+ 2645137664U, // <0,2,u,7>: Cost 3 vext2 <4,6,0,2>, <u,7,0,1>
+ 1544853861U, // <0,2,u,u>: Cost 2 vext2 <0,2,0,2>, LHS
+ 2618597376U, // <0,3,0,0>: Cost 3 vext2 <0,2,0,3>, <0,0,0,0>
+ 2618597478U, // <0,3,0,1>: Cost 3 vext2 <0,2,0,3>, LHS
+ 2618597541U, // <0,3,0,2>: Cost 3 vext2 <0,2,0,3>, <0,2,0,3>
+ 3692339443U, // <0,3,0,3>: Cost 4 vext2 <0,2,0,3>, <0,3,0,0>
+ 2691877044U, // <0,3,0,4>: Cost 3 vext3 <1,2,3,0>, <3,0,4,5>
+ 3765618873U, // <0,3,0,5>: Cost 4 vext3 <1,2,3,0>, <3,0,5,1>
+ 3765618883U, // <0,3,0,6>: Cost 4 vext3 <1,2,3,0>, <3,0,6,2>
+ 3665908746U, // <0,3,0,7>: Cost 4 vext1 <7,0,3,0>, <7,0,3,0>
+ 2618598045U, // <0,3,0,u>: Cost 3 vext2 <0,2,0,3>, LHS
+ 2562310246U, // <0,3,1,0>: Cost 3 vext1 <2,0,3,1>, LHS
+ 3692340020U, // <0,3,1,1>: Cost 4 vext2 <0,2,0,3>, <1,1,1,1>
+ 2691877105U, // <0,3,1,2>: Cost 3 vext3 <1,2,3,0>, <3,1,2,3>
+ 2568284327U, // <0,3,1,3>: Cost 3 vext1 <3,0,3,1>, <3,0,3,1>
+ 2562313526U, // <0,3,1,4>: Cost 3 vext1 <2,0,3,1>, RHS
+ 3765618956U, // <0,3,1,5>: Cost 4 vext3 <1,2,3,0>, <3,1,5,3>
+ 3636056570U, // <0,3,1,6>: Cost 4 vext1 <2,0,3,1>, <6,2,7,3>
+ 3665916939U, // <0,3,1,7>: Cost 4 vext1 <7,0,3,1>, <7,0,3,1>
+ 2695858471U, // <0,3,1,u>: Cost 3 vext3 <1,u,3,0>, <3,1,u,3>
+ 1482604646U, // <0,3,2,0>: Cost 2 vext1 <1,0,3,2>, LHS
+ 1482605302U, // <0,3,2,1>: Cost 2 vext1 <1,0,3,2>, <1,0,3,2>
+ 2556348008U, // <0,3,2,2>: Cost 3 vext1 <1,0,3,2>, <2,2,2,2>
+ 2556348566U, // <0,3,2,3>: Cost 3 vext1 <1,0,3,2>, <3,0,1,2>
+ 1482607926U, // <0,3,2,4>: Cost 2 vext1 <1,0,3,2>, RHS
+ 2556350160U, // <0,3,2,5>: Cost 3 vext1 <1,0,3,2>, <5,1,7,3>
+ 2556350970U, // <0,3,2,6>: Cost 3 vext1 <1,0,3,2>, <6,2,7,3>
+ 2598155258U, // <0,3,2,7>: Cost 3 vext1 <u,0,3,2>, <7,0,1,2>
+ 1482610478U, // <0,3,2,u>: Cost 2 vext1 <1,0,3,2>, LHS
+ 3692341387U, // <0,3,3,0>: Cost 4 vext2 <0,2,0,3>, <3,0,0,0>
+ 2635851999U, // <0,3,3,1>: Cost 3 vext2 <3,1,0,3>, <3,1,0,3>
+ 2636515632U, // <0,3,3,2>: Cost 3 vext2 <3,2,0,3>, <3,2,0,3>
+ 2691877276U, // <0,3,3,3>: Cost 3 vext3 <1,2,3,0>, <3,3,3,3>
+ 3692341762U, // <0,3,3,4>: Cost 4 vext2 <0,2,0,3>, <3,4,5,6>
+ 3778374059U, // <0,3,3,5>: Cost 4 vext3 <3,3,5,0>, <3,3,5,0>
+ 3692341898U, // <0,3,3,6>: Cost 5 vext2 <0,2,0,3>, <3,6,2,7>
+ 3665933325U, // <0,3,3,7>: Cost 4 vext1 <7,0,3,3>, <7,0,3,3>
+ 2640497430U, // <0,3,3,u>: Cost 3 vext2 <3,u,0,3>, <3,u,0,3>
+ 3692342162U, // <0,3,4,0>: Cost 4 vext2 <0,2,0,3>, <4,0,5,1>
+ 2232617112U, // <0,3,4,1>: Cost 3 vrev <3,0,1,4>
+ 2232690849U, // <0,3,4,2>: Cost 3 vrev <3,0,2,4>
+ 3306506410U, // <0,3,4,3>: Cost 4 vrev <3,0,3,4>
+ 3765987832U, // <0,3,4,4>: Cost 4 vext3 <1,2,u,0>, <3,4,4,5>
+ 2618600758U, // <0,3,4,5>: Cost 3 vext2 <0,2,0,3>, RHS
+ 2705369605U, // <0,3,4,6>: Cost 3 vext3 <3,4,6,0>, <3,4,6,0>
+ 3665941518U, // <0,3,4,7>: Cost 4 vext1 <7,0,3,4>, <7,0,3,4>
+ 2618601001U, // <0,3,4,u>: Cost 3 vext2 <0,2,0,3>, RHS
+ 3765619234U, // <0,3,5,0>: Cost 4 vext3 <1,2,3,0>, <3,5,0,2>
+ 3692342992U, // <0,3,5,1>: Cost 4 vext2 <0,2,0,3>, <5,1,7,3>
+ 3708268318U, // <0,3,5,2>: Cost 4 vext2 <2,u,0,3>, <5,2,7,0>
+ 3648031234U, // <0,3,5,3>: Cost 4 vext1 <4,0,3,5>, <3,4,5,6>
+ 2232846516U, // <0,3,5,4>: Cost 3 vrev <3,0,4,5>
+ 3779701325U, // <0,3,5,5>: Cost 4 vext3 <3,5,5,0>, <3,5,5,0>
+ 2718714461U, // <0,3,5,6>: Cost 3 vext3 <5,6,7,0>, <3,5,6,7>
+ 3779848799U, // <0,3,5,7>: Cost 4 vext3 <3,5,7,0>, <3,5,7,0>
+ 2233141464U, // <0,3,5,u>: Cost 3 vrev <3,0,u,5>
+ 3648036966U, // <0,3,6,0>: Cost 4 vext1 <4,0,3,6>, LHS
+ 3306375322U, // <0,3,6,1>: Cost 4 vrev <3,0,1,6>
+ 3692343802U, // <0,3,6,2>: Cost 4 vext2 <0,2,0,3>, <6,2,7,3>
+ 3703624266U, // <0,3,6,3>: Cost 4 vext2 <2,1,0,3>, <6,3,7,2>
+ 3306596533U, // <0,3,6,4>: Cost 4 vrev <3,0,4,6>
+ 3306670270U, // <0,3,6,5>: Cost 4 vrev <3,0,5,6>
+ 3733484344U, // <0,3,6,6>: Cost 4 vext2 <7,1,0,3>, <6,6,6,6>
+ 2706770608U, // <0,3,6,7>: Cost 3 vext3 <3,6,7,0>, <3,6,7,0>
+ 2706844345U, // <0,3,6,u>: Cost 3 vext3 <3,6,u,0>, <3,6,u,0>
+ 3796437698U, // <0,3,7,0>: Cost 4 vext3 <6,3,7,0>, <3,7,0,0>
+ 2659742787U, // <0,3,7,1>: Cost 3 vext2 <7,1,0,3>, <7,1,0,3>
+ 3734148244U, // <0,3,7,2>: Cost 4 vext2 <7,2,0,3>, <7,2,0,3>
+ 3734811877U, // <0,3,7,3>: Cost 4 vext2 <7,3,0,3>, <7,3,0,3>
+ 3733484902U, // <0,3,7,4>: Cost 4 vext2 <7,1,0,3>, <7,4,5,6>
+ 3781028591U, // <0,3,7,5>: Cost 4 vext3 <3,7,5,0>, <3,7,5,0>
+ 3736802776U, // <0,3,7,6>: Cost 4 vext2 <7,6,0,3>, <7,6,0,3>
+ 3733485103U, // <0,3,7,7>: Cost 4 vext2 <7,1,0,3>, <7,7,1,0>
+ 2664388218U, // <0,3,7,u>: Cost 3 vext2 <7,u,0,3>, <7,u,0,3>
+ 1482653798U, // <0,3,u,0>: Cost 2 vext1 <1,0,3,u>, LHS
+ 1482654460U, // <0,3,u,1>: Cost 2 vext1 <1,0,3,u>, <1,0,3,u>
+ 2556397160U, // <0,3,u,2>: Cost 3 vext1 <1,0,3,u>, <2,2,2,2>
+ 2556397718U, // <0,3,u,3>: Cost 3 vext1 <1,0,3,u>, <3,0,1,2>
+ 1482657078U, // <0,3,u,4>: Cost 2 vext1 <1,0,3,u>, RHS
+ 2618603674U, // <0,3,u,5>: Cost 3 vext2 <0,2,0,3>, RHS
+ 2556400122U, // <0,3,u,6>: Cost 3 vext1 <1,0,3,u>, <6,2,7,3>
+ 2598204410U, // <0,3,u,7>: Cost 3 vext1 <u,0,3,u>, <7,0,1,2>
+ 1482659630U, // <0,3,u,u>: Cost 2 vext1 <1,0,3,u>, LHS
+ 2617278468U, // <0,4,0,0>: Cost 3 vext2 <0,0,0,4>, <0,0,0,4>
+ 2631213158U, // <0,4,0,1>: Cost 3 vext2 <2,3,0,4>, LHS
+ 2819408076U, // <0,4,0,2>: Cost 3 vuzpr LHS, <0,2,4,6>
+ 3642091695U, // <0,4,0,3>: Cost 4 vext1 <3,0,4,0>, <3,0,4,0>
+ 2657755474U, // <0,4,0,4>: Cost 3 vext2 <6,7,0,4>, <0,4,1,5>
+ 2691877778U, // <0,4,0,5>: Cost 3 vext3 <1,2,3,0>, <4,0,5,1>
+ 2691877788U, // <0,4,0,6>: Cost 3 vext3 <1,2,3,0>, <4,0,6,2>
+ 3665982483U, // <0,4,0,7>: Cost 4 vext1 <7,0,4,0>, <7,0,4,0>
+ 2691877805U, // <0,4,0,u>: Cost 3 vext3 <1,2,3,0>, <4,0,u,1>
+ 2568355942U, // <0,4,1,0>: Cost 3 vext1 <3,0,4,1>, LHS
+ 3704955700U, // <0,4,1,1>: Cost 4 vext2 <2,3,0,4>, <1,1,1,1>
+ 2631213974U, // <0,4,1,2>: Cost 3 vext2 <2,3,0,4>, <1,2,3,0>
+ 2568358064U, // <0,4,1,3>: Cost 3 vext1 <3,0,4,1>, <3,0,4,1>
+ 2568359222U, // <0,4,1,4>: Cost 3 vext1 <3,0,4,1>, RHS
+ 1906753638U, // <0,4,1,5>: Cost 2 vzipr RHS, LHS
+ 3114713098U, // <0,4,1,6>: Cost 3 vtrnr RHS, <0,0,1,1>
+ 2592248852U, // <0,4,1,7>: Cost 3 vext1 <7,0,4,1>, <7,0,4,1>
+ 1908744294U, // <0,4,1,u>: Cost 2 vzipr RHS, LHS
+ 2562392166U, // <0,4,2,0>: Cost 3 vext1 <2,0,4,2>, LHS
+ 2238573423U, // <0,4,2,1>: Cost 3 vrev <4,0,1,2>
+ 2562393560U, // <0,4,2,2>: Cost 3 vext1 <2,0,4,2>, <2,0,4,2>
+ 2631214761U, // <0,4,2,3>: Cost 3 vext2 <2,3,0,4>, <2,3,0,4>
+ 2562395446U, // <0,4,2,4>: Cost 3 vext1 <2,0,4,2>, RHS
+ 3111272550U, // <0,4,2,5>: Cost 3 vtrnr <4,0,5,1>, LHS
+ 2040971366U, // <0,4,2,6>: Cost 2 vtrnr RHS, LHS
+ 2592257045U, // <0,4,2,7>: Cost 3 vext1 <7,0,4,2>, <7,0,4,2>
+ 2041118822U, // <0,4,2,u>: Cost 2 vtrnr RHS, LHS
+ 3704957078U, // <0,4,3,0>: Cost 4 vext2 <2,3,0,4>, <3,0,1,2>
+ 3704957169U, // <0,4,3,1>: Cost 4 vext2 <2,3,0,4>, <3,1,2,3>
+ 3704957232U, // <0,4,3,2>: Cost 4 vext2 <2,3,0,4>, <3,2,0,3>
+ 3704957340U, // <0,4,3,3>: Cost 4 vext2 <2,3,0,4>, <3,3,3,3>
+ 3704957442U, // <0,4,3,4>: Cost 4 vext2 <2,3,0,4>, <3,4,5,6>
+ 3312618388U, // <0,4,3,5>: Cost 4 vrev <4,0,5,3>
+ 3312692125U, // <0,4,3,6>: Cost 4 vrev <4,0,6,3>
+ 3713583814U, // <0,4,3,7>: Cost 4 vext2 <3,7,0,4>, <3,7,0,4>
+ 3704957726U, // <0,4,3,u>: Cost 4 vext2 <2,3,0,4>, <3,u,1,2>
+ 2710899880U, // <0,4,4,0>: Cost 3 vext3 <4,4,0,0>, <4,4,0,0>
+ 3704957924U, // <0,4,4,1>: Cost 4 vext2 <2,3,0,4>, <4,1,5,2>
+ 3642123945U, // <0,4,4,2>: Cost 4 vext1 <3,0,4,4>, <2,3,0,4>
+ 3642124467U, // <0,4,4,3>: Cost 4 vext1 <3,0,4,4>, <3,0,4,4>
+ 2718715088U, // <0,4,4,4>: Cost 3 vext3 <5,6,7,0>, <4,4,4,4>
+ 2631216438U, // <0,4,4,5>: Cost 3 vext2 <2,3,0,4>, RHS
+ 2846277836U, // <0,4,4,6>: Cost 3 vuzpr RHS, <0,2,4,6>
+ 3666015255U, // <0,4,4,7>: Cost 4 vext1 <7,0,4,4>, <7,0,4,4>
+ 2631216681U, // <0,4,4,u>: Cost 3 vext2 <2,3,0,4>, RHS
+ 2568388710U, // <0,4,5,0>: Cost 3 vext1 <3,0,4,5>, LHS
+ 2568389526U, // <0,4,5,1>: Cost 3 vext1 <3,0,4,5>, <1,2,3,0>
+ 3636159963U, // <0,4,5,2>: Cost 4 vext1 <2,0,4,5>, <2,0,4,5>
+ 2568390836U, // <0,4,5,3>: Cost 3 vext1 <3,0,4,5>, <3,0,4,5>
+ 2568391990U, // <0,4,5,4>: Cost 3 vext1 <3,0,4,5>, RHS
+ 2592280674U, // <0,4,5,5>: Cost 3 vext1 <7,0,4,5>, <5,6,7,0>
+ 1618136374U, // <0,4,5,6>: Cost 2 vext3 <1,2,3,0>, RHS
+ 2592281624U, // <0,4,5,7>: Cost 3 vext1 <7,0,4,5>, <7,0,4,5>
+ 1618136392U, // <0,4,5,u>: Cost 2 vext3 <1,2,3,0>, RHS
+ 2691878220U, // <0,4,6,0>: Cost 3 vext3 <1,2,3,0>, <4,6,0,2>
+ 3765620052U, // <0,4,6,1>: Cost 4 vext3 <1,2,3,0>, <4,6,1,1>
+ 2712374620U, // <0,4,6,2>: Cost 3 vext3 <4,6,2,0>, <4,6,2,0>
+ 3704959560U, // <0,4,6,3>: Cost 4 vext2 <2,3,0,4>, <6,3,7,0>
+ 2712522094U, // <0,4,6,4>: Cost 3 vext3 <4,6,4,0>, <4,6,4,0>
+ 4054237677U, // <0,4,6,5>: Cost 4 vzipr RHS, <0,6,0,7>
+ 2712669568U, // <0,4,6,6>: Cost 3 vext3 <4,6,6,0>, <4,6,6,0>
+ 2657760081U, // <0,4,6,7>: Cost 3 vext2 <6,7,0,4>, <6,7,0,4>
+ 2712817042U, // <0,4,6,u>: Cost 3 vext3 <4,6,u,0>, <4,6,u,0>
+ 3731502074U, // <0,4,7,0>: Cost 4 vext2 <6,7,0,4>, <7,0,1,2>
+ 3934208204U, // <0,4,7,1>: Cost 4 vuzpr <7,0,1,2>, <0,2,4,6>
+ 3934298316U, // <0,4,7,2>: Cost 4 vuzpr <7,0,2,4>, <0,2,4,6>
+ 3734820070U, // <0,4,7,3>: Cost 4 vext2 <7,3,0,4>, <7,3,0,4>
+ 3731502438U, // <0,4,7,4>: Cost 4 vext2 <6,7,0,4>, <7,4,5,6>
+ 3937190092U, // <0,4,7,5>: Cost 4 vuzpr <7,4,5,6>, <0,2,4,6>
+ 2713333201U, // <0,4,7,6>: Cost 3 vext3 <4,7,6,0>, <4,7,6,0>
+ 3731502700U, // <0,4,7,7>: Cost 4 vext2 <6,7,0,4>, <7,7,7,7>
+ 2713480675U, // <0,4,7,u>: Cost 3 vext3 <4,7,u,0>, <4,7,u,0>
+ 2691878382U, // <0,4,u,0>: Cost 3 vext3 <1,2,3,0>, <4,u,0,2>
+ 2631218990U, // <0,4,u,1>: Cost 3 vext2 <2,3,0,4>, LHS
+ 2562442718U, // <0,4,u,2>: Cost 3 vext1 <2,0,4,u>, <2,0,4,u>
+ 2568415415U, // <0,4,u,3>: Cost 3 vext1 <3,0,4,u>, <3,0,4,u>
+ 2562444598U, // <0,4,u,4>: Cost 3 vext1 <2,0,4,u>, RHS
+ 1906754205U, // <0,4,u,5>: Cost 2 vzipr RHS, LHS
+ 1618136617U, // <0,4,u,6>: Cost 2 vext3 <1,2,3,0>, RHS
+ 2592306203U, // <0,4,u,7>: Cost 3 vext1 <7,0,4,u>, <7,0,4,u>
+ 1618136635U, // <0,4,u,u>: Cost 2 vext3 <1,2,3,0>, RHS
+ 3636191334U, // <0,5,0,0>: Cost 4 vext1 <2,0,5,0>, LHS
+ 2637856870U, // <0,5,0,1>: Cost 3 vext2 <3,4,0,5>, LHS
+ 3636192735U, // <0,5,0,2>: Cost 4 vext1 <2,0,5,0>, <2,0,5,0>
+ 3642165432U, // <0,5,0,3>: Cost 4 vext1 <3,0,5,0>, <3,0,5,0>
+ 3636194614U, // <0,5,0,4>: Cost 4 vext1 <2,0,5,0>, RHS
+ 3711598998U, // <0,5,0,5>: Cost 4 vext2 <3,4,0,5>, <0,5,0,1>
+ 2718715508U, // <0,5,0,6>: Cost 3 vext3 <5,6,7,0>, <5,0,6,1>
+ 3047604224U, // <0,5,0,7>: Cost 3 vtrnl RHS, <0,0,0,0>
+ 2637857437U, // <0,5,0,u>: Cost 3 vext2 <3,4,0,5>, LHS
+ 1500659814U, // <0,5,1,0>: Cost 2 vext1 <4,0,5,1>, LHS
+ 2574402294U, // <0,5,1,1>: Cost 3 vext1 <4,0,5,1>, <1,0,3,2>
+ 2574403176U, // <0,5,1,2>: Cost 3 vext1 <4,0,5,1>, <2,2,2,2>
+ 2574403734U, // <0,5,1,3>: Cost 3 vext1 <4,0,5,1>, <3,0,1,2>
+ 1500662674U, // <0,5,1,4>: Cost 2 vext1 <4,0,5,1>, <4,0,5,1>
+ 2574405328U, // <0,5,1,5>: Cost 3 vext1 <4,0,5,1>, <5,1,7,3>
+ 2574406138U, // <0,5,1,6>: Cost 3 vext1 <4,0,5,1>, <6,2,7,3>
+ 2691878608U, // <0,5,1,7>: Cost 3 vext3 <1,2,3,0>, <5,1,7,3>
+ 1500665646U, // <0,5,1,u>: Cost 2 vext1 <4,0,5,1>, LHS
+ 2568437862U, // <0,5,2,0>: Cost 3 vext1 <3,0,5,2>, LHS
+ 2244546120U, // <0,5,2,1>: Cost 3 vrev <5,0,1,2>
+ 3636209121U, // <0,5,2,2>: Cost 4 vext1 <2,0,5,2>, <2,0,5,2>
+ 2568439994U, // <0,5,2,3>: Cost 3 vext1 <3,0,5,2>, <3,0,5,2>
+ 2568441142U, // <0,5,2,4>: Cost 3 vext1 <3,0,5,2>, RHS
+ 3120595046U, // <0,5,2,5>: Cost 3 vtrnr <5,5,5,5>, LHS
+ 3765620504U, // <0,5,2,6>: Cost 4 vext3 <1,2,3,0>, <5,2,6,3>
+ 3047604244U, // <0,5,2,7>: Cost 3 vtrnl RHS, <0,0,2,2>
+ 2568443694U, // <0,5,2,u>: Cost 3 vext1 <3,0,5,2>, LHS
+ 3710937274U, // <0,5,3,0>: Cost 4 vext2 <3,3,0,5>, <3,0,5,2>
+ 3790024505U, // <0,5,3,1>: Cost 4 vext3 <5,3,1,0>, <5,3,1,0>
+ 3318369874U, // <0,5,3,2>: Cost 4 vrev <5,0,2,3>
+ 3710937475U, // <0,5,3,3>: Cost 4 vext2 <3,3,0,5>, <3,3,0,5>
+ 2637859284U, // <0,5,3,4>: Cost 3 vext2 <3,4,0,5>, <3,4,0,5>
+ 3790319453U, // <0,5,3,5>: Cost 4 vext3 <5,3,5,0>, <5,3,5,0>
+ 3790393190U, // <0,5,3,6>: Cost 4 vext3 <5,3,6,0>, <5,3,6,0>
+ 2716725103U, // <0,5,3,7>: Cost 3 vext3 <5,3,7,0>, <5,3,7,0>
+ 2640513816U, // <0,5,3,u>: Cost 3 vext2 <3,u,0,5>, <3,u,0,5>
+ 2637859730U, // <0,5,4,0>: Cost 3 vext2 <3,4,0,5>, <4,0,5,1>
+ 3711601637U, // <0,5,4,1>: Cost 4 vext2 <3,4,0,5>, <4,1,5,3>
+ 3636225507U, // <0,5,4,2>: Cost 4 vext1 <2,0,5,4>, <2,0,5,4>
+ 3648170452U, // <0,5,4,3>: Cost 4 vext1 <4,0,5,4>, <3,4,0,5>
+ 3636227382U, // <0,5,4,4>: Cost 4 vext1 <2,0,5,4>, RHS
+ 2637860150U, // <0,5,4,5>: Cost 3 vext2 <3,4,0,5>, RHS
+ 2718715836U, // <0,5,4,6>: Cost 3 vext3 <5,6,7,0>, <5,4,6,5>
+ 2718715846U, // <0,5,4,7>: Cost 3 vext3 <5,6,7,0>, <5,4,7,6>
+ 2637860393U, // <0,5,4,u>: Cost 3 vext2 <3,4,0,5>, RHS
+ 3792457683U, // <0,5,5,0>: Cost 4 vext3 <5,6,7,0>, <5,5,0,1>
+ 3704966864U, // <0,5,5,1>: Cost 4 vext2 <2,3,0,5>, <5,1,7,3>
+ 3711602411U, // <0,5,5,2>: Cost 4 vext2 <3,4,0,5>, <5,2,1,3>
+ 3642206397U, // <0,5,5,3>: Cost 4 vext1 <3,0,5,5>, <3,0,5,5>
+ 3318533734U, // <0,5,5,4>: Cost 4 vrev <5,0,4,5>
+ 2718715908U, // <0,5,5,5>: Cost 3 vext3 <5,6,7,0>, <5,5,5,5>
+ 2657767522U, // <0,5,5,6>: Cost 3 vext2 <6,7,0,5>, <5,6,7,0>
+ 2718715928U, // <0,5,5,7>: Cost 3 vext3 <5,6,7,0>, <5,5,7,7>
+ 2718715937U, // <0,5,5,u>: Cost 3 vext3 <5,6,7,0>, <5,5,u,7>
+ 2592358502U, // <0,5,6,0>: Cost 3 vext1 <7,0,5,6>, LHS
+ 3788918835U, // <