[llvm] [ISel] Introduce `llvm.pext` and `llvm.pdep` intrinsics (PR #200570)

Jan Schultke via llvm-commits llvm-commits at lists.llvm.org
Sun May 31 21:57:10 PDT 2026


https://github.com/eisenwave updated https://github.com/llvm/llvm-project/pull/200570

>From 06a292d18009f793df7df7ee807b0ecef7d4a47d Mon Sep 17 00:00:00 2001
From: Eisenwave <me at eisenwave.net>
Date: Sat, 30 May 2026 14:38:37 +0200
Subject: [PATCH 1/6] [ISel] Introduce llvm.bext and llvm.bdep intrinsics

These are portable forms of the x86_64 pext/pdep or AArch64 bext/bdep instructions.
---
 llvm/docs/LangRef.rst                         |   96 +
 llvm/include/llvm/CodeGen/ISDOpcodes.h        |    4 +
 llvm/include/llvm/CodeGen/TargetLowering.h    |   10 +
 llvm/include/llvm/IR/Intrinsics.td            |    4 +
 llvm/include/llvm/Support/KnownBits.h         |    6 +
 llvm/lib/Analysis/ValueTracking.cpp           |   12 +
 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp |   40 +
 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp |   14 +
 .../SelectionDAG/LegalizeIntegerTypes.cpp     |   50 +
 llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h |    4 +
 .../SelectionDAG/LegalizeVectorOps.cpp        |    6 +
 .../SelectionDAG/LegalizeVectorTypes.cpp      |    6 +
 .../lib/CodeGen/SelectionDAG/SelectionDAG.cpp |   16 +
 .../SelectionDAG/SelectionDAGBuilder.cpp      |   12 +
 .../SelectionDAG/SelectionDAGDumper.cpp       |    2 +
 .../CodeGen/SelectionDAG/TargetLowering.cpp   |   75 +
 llvm/lib/CodeGen/TargetLoweringBase.cpp       |    3 +
 llvm/lib/Support/KnownBits.cpp                |   65 +
 .../Target/AArch64/AArch64ISelLowering.cpp    |   45 +
 llvm/lib/Target/X86/X86ISelLowering.cpp       |   20 +
 .../ValueTracking/knownbits-bextbdep.ll       |   96 +
 llvm/test/CodeGen/AArch64/bext-bdep.ll        | 4057 ++++++++++++++++
 llvm/test/CodeGen/X86/bext-bdep.ll            | 4123 +++++++++++++++++
 llvm/unittests/Support/KnownBitsTest.cpp      |    2 +
 24 files changed, 8768 insertions(+)
 create mode 100644 llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll
 create mode 100644 llvm/test/CodeGen/AArch64/bext-bdep.ll
 create mode 100644 llvm/test/CodeGen/X86/bext-bdep.ll

diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 7ce73cd64c462..7329f02b582c9 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -19242,6 +19242,102 @@ Example:
       %r = call i4 @llvm.clmul.i4(i4 -4, i4 2)   ; %r = -8
       %r = call i4 @llvm.clmul.i4(i4 -4, i4 -5)  ; %r = 4
 
+.. _int_bext:
+
+'``llvm.bext.*``' Intrinsic
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Syntax:
+"""""""
+
+This is an overloaded intrinsic. You can use ``llvm.bext`` on any integer
+or integer vector type.
+
+::
+
+      declare i32 @llvm.bext.i32(i32 %val, i32 %mask)
+      declare i64 @llvm.bext.i64(i64 %val, i64 %mask)
+      declare <4 x i32> @llvm.bext.v4i32(<4 x i32> %val, <4 x i32> %mask)
+
+Overview:
+"""""""""
+
+The '``llvm.bext``' family of intrinsic functions extracts the bits from ``val``
+where the ``mask`` has bits set and packs them contiguously in the low bits
+of the result, same as the x86 ``PEXT`` instruction.
+
+Arguments:
+""""""""""
+
+The arguments may be any integer type or vector of integer type. Both
+arguments and result must have the same type.
+
+Semantics:
+""""""""""
+
+The '``llvm.bext``' intrinsic extracts bits from the first argument
+``val`` at the positions indicated by set bits in ``mask``, and packs
+them contiguously into the low bits of the result. The remaining high
+bits of the result are zero.
+
+Equivalently, if the set bit positions in ``mask`` (from LSB to MSB)
+are ``p0, p1, ..., pk``, then the result bit ``i`` equals bit ``pi``
+of ``val``.
+
+.. code-block:: text
+
+      %r = call i8 @llvm.bext.i8(i8 0b10101010, i8 0b11001100) ; %r = 0b00001010
+      %r = call i8 @llvm.bext.i8(i8 0b11111111, i8 0b10101010) ; %r = 0b00001111
+
+.. _int_bdep:
+
+'``llvm.bdep.*``' Intrinsic
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Syntax:
+"""""""
+
+This is an overloaded intrinsic. You can use ``llvm.bdep`` on any integer or
+integer vector type.
+
+::
+
+      declare i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+      declare i64 @llvm.bdep.i64(i64 %val, i64 %mask)
+      declare <4 x i32> @llvm.bdep.v4i32(<4 x i32> %val, <4 x i32> %mask)
+
+Overview:
+"""""""""
+
+The '``llvm.bdep``' family of intrinsic functions deposits the low bits of
+``val`` into the result at the positions where ``mask`` has bits set, same as
+the x86 ``PDEP`` instruction.
+
+Arguments:
+""""""""""
+
+The arguments may be any integer type or vector of integer type. Both
+arguments and result must have the same type.
+
+Semantics:
+""""""""""
+
+The '``llvm.bdep``' intrinsic takes the low bits of the first argument
+``val`` and scatters them to the bit positions in the result indicated by
+set bits in ``mask``. Bits in the result at positions where ``mask`` is
+zero are zero.
+
+Equivalently, if the set bit positions in ``mask`` (from LSB to MSB) are
+``p0, p1, ..., pk``, then result bit ``pi`` equals bit ``i`` of ``val``.
+
+The operations satisfy the round-trip identity:
+``bdep(bext(val, mask), mask) == val & mask``.
+
+.. code-block:: text
+
+      %r = call i8 @llvm.bdep.i8(i8 0b00001010, i8 0b11001100) ; %r = 0b10001000
+      %r = call i8 @llvm.bdep.i8(i8 0b00001111, i8 0b10101010) ; %r = 0b10101010
+
 .. _int_overflow:
 
 Arithmetic with Overflow Intrinsics
diff --git a/llvm/include/llvm/CodeGen/ISDOpcodes.h b/llvm/include/llvm/CodeGen/ISDOpcodes.h
index 11099df775e38..ce6423a2e2726 100644
--- a/llvm/include/llvm/CodeGen/ISDOpcodes.h
+++ b/llvm/include/llvm/CodeGen/ISDOpcodes.h
@@ -779,6 +779,10 @@ enum NodeType {
   CLMULR,
   CLMULH,
 
+  /// Bit extract (compress) and bit deposit (expand).
+  BEXT,
+  BDEP,
+
   /// Byte Swap and Counting operators.
   BSWAP,
   CTTZ,
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 82c47cce0f522..d40ed5eb35e75 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -5572,6 +5572,16 @@ class LLVM_ABI TargetLowering : public TargetLoweringBase {
   /// \returns The expansion if successful, SDValue() otherwise
   SDValue expandCLMUL(SDNode *N, SelectionDAG &DAG) const;
 
+  /// Expand bit extract (compress).
+  /// \param N Node to expand
+  /// \returns The expansion if successful, SDValue() otherwise
+  SDValue expandBEXT(SDNode *N, SelectionDAG &DAG) const;
+
+  /// Expand bit deposit (expand).
+  /// \param N Node to expand
+  /// \returns The expansion if successful, SDValue() otherwise
+  SDValue expandBDEP(SDNode *N, SelectionDAG &DAG) const;
+
   /// Expand rotations.
   /// \param N Node to expand
   /// \param AllowVectorOps expand vector rotate, this should only be performed
diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td
index 3c4e741574661..5aa34361a0987 100644
--- a/llvm/include/llvm/IR/Intrinsics.td
+++ b/llvm/include/llvm/IR/Intrinsics.td
@@ -1523,6 +1523,10 @@ let IntrProperties = [IntrNoMem, IntrSpeculatable, IntrNoCreateUndefOrPoison] in
       [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
   def int_clmul : DefaultAttrsIntrinsic<[llvm_anyint_ty],
       [LLVMMatchType<0>, LLVMMatchType<0>]>;
+  def int_bext : DefaultAttrsIntrinsic<[llvm_anyint_ty],
+      [LLVMMatchType<0>, LLVMMatchType<0>]>;
+  def int_bdep : DefaultAttrsIntrinsic<[llvm_anyint_ty],
+      [LLVMMatchType<0>, LLVMMatchType<0>]>;
 }
 
 let IntrProperties = [IntrNoMem, IntrSpeculatable,
diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h
index e47383dc6b2d1..09fea9f1085ec 100644
--- a/llvm/include/llvm/Support/KnownBits.h
+++ b/llvm/include/llvm/Support/KnownBits.h
@@ -479,6 +479,12 @@ struct KnownBits {
   /// Compute known bits for clmul(LHS, RHS).
   LLVM_ABI static KnownBits clmul(const KnownBits &LHS, const KnownBits &RHS);
 
+  /// Compute known bits for bext(LHS, RHS).
+  LLVM_ABI static KnownBits bext(const KnownBits &LHS, const KnownBits &RHS);
+
+  /// Compute known bits for bdep(LHS, RHS).
+  LLVM_ABI static KnownBits bdep(const KnownBits &LHS, const KnownBits &RHS);
+
   /// Determine if these known bits always give the same ICMP_EQ result.
   LLVM_ABI static std::optional<bool> eq(const KnownBits &LHS,
                                          const KnownBits &RHS);
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 3be0db5ad9c7e..5aed74d8914d0 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2091,6 +2091,18 @@ static void computeKnownBitsFromOperator(const Operator *I,
         computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
         Known = KnownBits::clmul(Known, Known2);
         break;
+      case Intrinsic::bext: {
+        computeKnownBits(I->getOperand(0), DemandedElts, Known, Q, Depth + 1);
+        computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
+        Known = KnownBits::bext(Known, Known2);
+        break;
+      }
+      case Intrinsic::bdep: {
+        computeKnownBits(I->getOperand(0), DemandedElts, Known, Q, Depth + 1);
+        computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
+        Known = KnownBits::bdep(Known, Known2);
+        break;
+      }
       case Intrinsic::uadd_sat:
         computeKnownBits(I->getOperand(0), DemandedElts, Known, Q, Depth + 1);
         computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 0c9820fb64de9..b1367a8be17da 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -474,6 +474,8 @@ namespace {
     SDValue visitABS(SDNode *N);
     SDValue visitABS_MIN_POISON(SDNode *N);
     SDValue visitCLMUL(SDNode *N);
+    SDValue visitBEXT(SDNode *N);
+    SDValue visitBDEP(SDNode *N);
     SDValue visitBSWAP(SDNode *N);
     SDValue visitBITREVERSE(SDNode *N);
     SDValue visitCTLZ(SDNode *N);
@@ -1996,6 +1998,8 @@ SDValue DAGCombiner::visit(SDNode *N) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:             return visitCLMUL(N);
+  case ISD::BEXT:               return visitBEXT(N);
+  case ISD::BDEP:               return visitBDEP(N);
   case ISD::BSWAP:              return visitBSWAP(N);
   case ISD::BITREVERSE:         return visitBITREVERSE(N);
   case ISD::CTLZ:               return visitCTLZ(N);
@@ -12227,6 +12231,42 @@ SDValue DAGCombiner::visitCLMUL(SDNode *N) {
   return SDValue();
 }
 
+SDValue DAGCombiner::visitBEXT(SDNode *N) {
+  EVT VT = N->getValueType(0);
+  SDValue N0 = N->getOperand(0);
+  SDValue N1 = N->getOperand(1);
+  SDLoc DL(N);
+
+  // bext(x, 0) -> 0
+  if (isNullOrNullSplat(N1))
+    return DAG.getConstant(0, DL, VT);
+  // bext(x, -1) -> x  (all bits selected, packed into low positions = x)
+  if (isAllOnesOrAllOnesSplat(N1))
+    return N0;
+  // fold bext(c1, c2) -> compressBits(c1, c2)
+  if (SDValue C = DAG.FoldConstantArithmetic(ISD::BEXT, DL, VT, {N0, N1}))
+    return C;
+  return SDValue();
+}
+
+SDValue DAGCombiner::visitBDEP(SDNode *N) {
+  EVT VT = N->getValueType(0);
+  SDValue N0 = N->getOperand(0);
+  SDValue N1 = N->getOperand(1);
+  SDLoc DL(N);
+
+  // bdep(x, 0) -> 0
+  if (isNullOrNullSplat(N1))
+    return DAG.getConstant(0, DL, VT);
+  // bdep(x, -1) -> x  (all positions selected, bits deposited at identity)
+  if (isAllOnesOrAllOnesSplat(N1))
+    return N0;
+  // fold bdep(c1, c2) -> expandBits(c1, c2)
+  if (SDValue C = DAG.FoldConstantArithmetic(ISD::BDEP, DL, VT, {N0, N1}))
+    return C;
+  return SDValue();
+}
+
 SDValue DAGCombiner::visitBSWAP(SDNode *N) {
   SDValue N0 = N->getOperand(0);
   EVT VT = N->getValueType(0);
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 3db2b0e8e5d5a..beaea49b0f5d8 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -4196,6 +4196,12 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
     if (SDValue Expanded = TLI.expandCLMUL(Node, DAG))
       Results.push_back(Expanded);
     break;
+  case ISD::BEXT:
+    Results.push_back(TLI.expandBEXT(Node, DAG));
+    break;
+  case ISD::BDEP:
+    Results.push_back(TLI.expandBDEP(Node, DAG));
+    break;
   case ISD::SADDSAT:
   case ISD::UADDSAT:
   case ISD::SSUBSAT:
@@ -5566,6 +5572,14 @@ void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
     Results.push_back(DAG.getNode(ISD::TRUNCATE, dl, OVT, CTLZResult));
     break;
   }
+  case ISD::BEXT:
+  case ISD::BDEP: {
+    Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(0));
+    Tmp2 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(1));
+    Tmp1 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2);
+    Results.push_back(DAG.getNode(ISD::TRUNCATE, dl, OVT, Tmp1));
+    break;
+  }
   case ISD::BITREVERSE:
   case ISD::BSWAP: {
     unsigned DiffBits = NVT.getSizeInBits() - OVT.getSizeInBits();
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
index 86617b6dd33de..dd166e2d3e5d2 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
@@ -370,6 +370,14 @@ void DAGTypeLegalizer::PromoteIntegerResult(SDNode *N, unsigned ResNo) {
     Res = PromoteIntRes_CLMUL(N);
     break;
 
+  case ISD::BEXT:
+    Res = PromoteIntRes_BEXT(N);
+    break;
+
+  case ISD::BDEP:
+    Res = PromoteIntRes_BDEP(N);
+    break;
+
   case ISD::IS_FPCLASS:
     Res = PromoteIntRes_IS_FPCLASS(N);
     break;
@@ -1763,6 +1771,30 @@ SDValue DAGTypeLegalizer::PromoteIntRes_CLMUL(SDNode *N) {
                      DAG.getShiftAmountConstant(ShAmt, VT, DL));
 }
 
+SDValue DAGTypeLegalizer::PromoteIntRes_BEXT(SDNode *N) {
+  SDLoc DL(N);
+  EVT VT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
+  if (!TLI.isOperationLegalOrCustomOrPromote(ISD::BEXT, VT)) {
+    if (SDValue Res = TLI.expandBEXT(N, DAG))
+      return DAG.getNode(ISD::ANY_EXTEND, DL, VT, Res);
+  }
+  SDValue X = ZExtPromotedInteger(N->getOperand(0));
+  SDValue Y = ZExtPromotedInteger(N->getOperand(1));
+  return DAG.getNode(ISD::BEXT, DL, VT, X, Y);
+}
+
+SDValue DAGTypeLegalizer::PromoteIntRes_BDEP(SDNode *N) {
+  SDLoc DL(N);
+  EVT VT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
+  if (!TLI.isOperationLegalOrCustomOrPromote(ISD::BDEP, VT)) {
+    if (SDValue Res = TLI.expandBDEP(N, DAG))
+      return DAG.getNode(ISD::ANY_EXTEND, DL, VT, Res);
+  }
+  SDValue X = ZExtPromotedInteger(N->getOperand(0));
+  SDValue Y = ZExtPromotedInteger(N->getOperand(1));
+  return DAG.getNode(ISD::BDEP, DL, VT, X, Y);
+}
+
 SDValue DAGTypeLegalizer::PromoteIntRes_TRUNCATE(SDNode *N) {
   EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
   SDValue Res;
@@ -3312,6 +3344,14 @@ void DAGTypeLegalizer::ExpandIntegerResult(SDNode *N, unsigned ResNo) {
     ExpandIntRes_CLMUL(N, Lo, Hi);
     break;
 
+  case ISD::BEXT:
+    ExpandIntRes_BEXT(N, Lo, Hi);
+    break;
+
+  case ISD::BDEP:
+    ExpandIntRes_BDEP(N, Lo, Hi);
+    break;
+
   case ISD::VSCALE:
     ExpandIntRes_VSCALE(N, Lo, Hi);
     break;
@@ -5621,6 +5661,16 @@ void DAGTypeLegalizer::ExpandIntRes_CLMUL(SDNode *N, SDValue &Lo, SDValue &Hi) {
   Hi = DAG.getNode(ISD::XOR, DL, HalfVT, LoH, HiLoCross);
 }
 
+void DAGTypeLegalizer::ExpandIntRes_BEXT(SDNode *N, SDValue &Lo, SDValue &Hi) {
+  SDValue Res = TLI.expandBEXT(N, DAG);
+  SplitInteger(Res, Lo, Hi);
+}
+
+void DAGTypeLegalizer::ExpandIntRes_BDEP(SDNode *N, SDValue &Lo, SDValue &Hi) {
+  SDValue Res = TLI.expandBDEP(N, DAG);
+  SplitInteger(Res, Lo, Hi);
+}
+
 void DAGTypeLegalizer::ExpandIntRes_VSCALE(SDNode *N, SDValue &Lo,
                                            SDValue &Hi) {
   EVT VT = N->getValueType(0);
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
index 9c37eb8065ba5..3933f05c306c8 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
@@ -359,6 +359,8 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
   SDValue PromoteIntRes_FunnelShift(SDNode *N);
   SDValue PromoteIntRes_VPFunnelShift(SDNode *N);
   SDValue PromoteIntRes_CLMUL(SDNode *N);
+  SDValue PromoteIntRes_BEXT(SDNode *N);
+  SDValue PromoteIntRes_BDEP(SDNode *N);
   SDValue PromoteIntRes_IS_FPCLASS(SDNode *N);
   SDValue PromoteIntRes_PATCHPOINT(SDNode *N);
   SDValue PromoteIntRes_READ_REGISTER(SDNode *N);
@@ -502,6 +504,8 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
   void ExpandIntRes_Rotate            (SDNode *N, SDValue &Lo, SDValue &Hi);
   void ExpandIntRes_FunnelShift       (SDNode *N, SDValue &Lo, SDValue &Hi);
   void ExpandIntRes_CLMUL(SDNode *N, SDValue &Lo, SDValue &Hi);
+  void ExpandIntRes_BEXT(SDNode *N, SDValue &Lo, SDValue &Hi);
+  void ExpandIntRes_BDEP(SDNode *N, SDValue &Lo, SDValue &Hi);
 
   void ExpandIntRes_VSCALE            (SDNode *N, SDValue &Lo, SDValue &Hi);
   void ExpandIntRes_READ_REGISTER(SDNode *N, SDValue &Lo, SDValue &Hi);
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
index 0a78cec3062da..0fe9309898459 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
@@ -1200,6 +1200,12 @@ void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
       return;
     }
     break;
+  case ISD::BEXT:
+    Results.push_back(TLI.expandBEXT(Node, DAG));
+    return;
+  case ISD::BDEP:
+    Results.push_back(TLI.expandBDEP(Node, DAG));
+    return;
   case ISD::ROTL:
   case ISD::ROTR:
     if (SDValue Expanded = TLI.expandROT(Node, false /*AllowVectorOps*/, DAG)) {
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
index 02e25e5855577..d55e921e21774 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
@@ -207,6 +207,8 @@ void DAGTypeLegalizer::ScalarizeVectorResult(SDNode *N, unsigned ResNo) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:
+  case ISD::BEXT:
+  case ISD::BDEP:
     R = ScalarizeVecRes_BinOp(N);
     break;
 
@@ -1518,6 +1520,8 @@ void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:
+  case ISD::BEXT:
+  case ISD::BDEP:
   case ISD::MULHS:
   case ISD::MULHU:
   case ISD::ABDS:
@@ -5205,6 +5209,8 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:
+  case ISD::BEXT:
+  case ISD::BDEP:
   case ISD::FMINNUM:
   case ISD::FMINNUM_IEEE:
   case ISD::VP_FMINNUM:
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 75d550801315b..c644206d6232c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -3958,6 +3958,18 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
     Known = KnownBits::clmul(Known, Known2);
     break;
   }
+  case ISD::BEXT: {
+    Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
+    Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
+    Known = KnownBits::bext(Known, Known2);
+    break;
+  }
+  case ISD::BDEP: {
+    Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
+    Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
+    Known = KnownBits::bdep(Known, Known2);
+    break;
+  }
   case ISD::MGATHER:
   case ISD::MLOAD: {
     ISD::LoadExtType ETy =
@@ -7449,6 +7461,10 @@ static std::optional<APInt> FoldValue(unsigned Opcode, const APInt &C1,
     return APIntOps::clmulr(C1, C2);
   case ISD::CLMULH:
     return APIntOps::clmulh(C1, C2);
+  case ISD::BEXT:
+    return APIntOps::compressBits(C1, C2);
+  case ISD::BDEP:
+    return APIntOps::expandBits(C1, C2);
   }
   return std::nullopt;
 }
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 20b1f9d32ace5..f31c1da3dcb8f 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -7410,6 +7410,18 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
     setValue(&I, DAG.getNode(ISD::CLMUL, sdl, X.getValueType(), X, Y));
     return;
   }
+  case Intrinsic::bext: {
+    SDValue X = getValue(I.getArgOperand(0));
+    SDValue Y = getValue(I.getArgOperand(1));
+    setValue(&I, DAG.getNode(ISD::BEXT, sdl, X.getValueType(), X, Y));
+    return;
+  }
+  case Intrinsic::bdep: {
+    SDValue X = getValue(I.getArgOperand(0));
+    SDValue Y = getValue(I.getArgOperand(1));
+    setValue(&I, DAG.getNode(ISD::BDEP, sdl, X.getValueType(), X, Y));
+    return;
+  }
   case Intrinsic::sadd_sat: {
     SDValue Op1 = getValue(I.getArgOperand(0));
     SDValue Op2 = getValue(I.getArgOperand(1));
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
index 7b500fc863b72..82696812b4bfc 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
@@ -307,6 +307,8 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
   case ISD::CLMUL:                      return "clmul";
   case ISD::CLMULR:                     return "clmulr";
   case ISD::CLMULH:                     return "clmulh";
+  case ISD::BEXT:                       return "bext";
+  case ISD::BDEP:                       return "bdep";
   case ISD::FADD:                       return "fadd";
   case ISD::STRICT_FADD:                return "strict_fadd";
   case ISD::FSUB:                       return "fsub";
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index 48fe1eed9093f..bcccb2e262c71 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -8962,6 +8962,81 @@ SDValue TargetLowering::expandCLMUL(SDNode *Node, SelectionDAG &DAG) const {
   llvm_unreachable("Expected CLMUL, CLMULR, or CLMULH");
 }
 
+SDValue TargetLowering::expandBEXT(SDNode *Node, SelectionDAG &DAG) const {
+  SDLoc DL(Node);
+  EVT VT = Node->getValueType(0);
+  SDValue Val = Node->getOperand(0);
+  SDValue Msk = Node->getOperand(1);
+  unsigned BW = VT.getScalarSizeInBits();
+
+  // Hacker's Delight §7-4: Compress, or Generalized Extract
+  SDValue X = DAG.getNode(ISD::AND, DL, VT, Val, Msk);
+  SDValue M = Msk;
+  SDValue One = DAG.getShiftAmountConstant(1, VT, DL);
+  SDValue Mk = DAG.getNode(ISD::SHL, DL, VT, DAG.getNOT(DL, M, VT), One);
+
+  // Repeatedly compute which bits would shift to the right by an odd amount,
+  // shift all such bits in parallel using a mask, and double the shift amount.
+  for (unsigned I = 1; I < BW; I <<= 1) {
+    // This expands the "parallel prefix" operation to clmul(Mk, ~0).
+    SDValue Mp = DAG.getNode(ISD::CLMUL, DL, VT, Mk,
+                             DAG.getAllOnesConstant(DL, VT));
+    SDValue Mv = DAG.getNode(ISD::AND, DL, VT, Mp, M);
+    SDValue ShiftI = DAG.getShiftAmountConstant(I, VT, DL);
+    M = DAG.getNode(ISD::OR, DL, VT, DAG.getNode(ISD::XOR, DL, VT, M, Mv),
+                    DAG.getNode(ISD::SRL, DL, VT, Mv, ShiftI));
+    SDValue T = DAG.getNode(ISD::AND, DL, VT, X, Mv);
+    X = DAG.getNode(ISD::OR, DL, VT, DAG.getNode(ISD::XOR, DL, VT, X, T),
+                    DAG.getNode(ISD::SRL, DL, VT, T, ShiftI));
+    Mk = DAG.getNode(ISD::AND, DL, VT, Mk, DAG.getNOT(DL, Mp, VT));
+  }
+
+  return X;
+}
+
+SDValue TargetLowering::expandBDEP(SDNode *Node, SelectionDAG &DAG) const {
+  SDLoc DL(Node);
+  EVT VT = Node->getValueType(0);
+  SDValue Val = Node->getOperand(0);
+  SDValue Msk = Node->getOperand(1);
+  unsigned BW = VT.getScalarSizeInBits();
+
+  // Hacker's Delight §7-5: Expand, or Generalized Insert.
+  unsigned LogBW = Log2_32_Ceil(BW);
+  SmallVector<SDValue, 8> MvArray(LogBW);
+  SDValue One = DAG.getShiftAmountConstant(1, VT, DL);
+  SDValue Mc = Msk;
+  SDValue Mk = DAG.getNode(ISD::SHL, DL, VT, DAG.getNOT(DL, Msk, VT), One);
+
+  // First pass: compute move masks for each power of two that a bit moves by.
+  for (unsigned S = 0; S < LogBW; ++S) {
+    unsigned ShiftS = 1u << S;
+    // This expands the "parallel prefix" operation to clmul(Mk, ~0).
+    SDValue Mp = DAG.getNode(ISD::CLMUL, DL, VT, Mk,
+                             DAG.getAllOnesConstant(DL, VT));
+    MvArray[S] = DAG.getNode(ISD::AND, DL, VT, Mp, Mc);
+    SDValue ShiftSv = DAG.getShiftAmountConstant(ShiftS, VT, DL);
+    Mc = DAG.getNode(ISD::OR, DL, VT,
+                     DAG.getNode(ISD::XOR, DL, VT, Mc, MvArray[S]),
+                     DAG.getNode(ISD::SRL, DL, VT, MvArray[S], ShiftSv));
+    Mk = DAG.getNode(ISD::AND, DL, VT, Mk, DAG.getNOT(DL, Mp, VT));
+  }
+
+  // Second pass: move bits by 32, 16, 8, 4, 2, 1, using masks, in parallel.
+  // Each pass handles half the shift amount of the previous pass.
+  SDValue X = Val;
+  for (int S = (int)LogBW - 1; S >= 0; --S) {
+    SDValue ShiftSv = DAG.getShiftAmountConstant(1u << S, VT, DL);
+    SDValue T = DAG.getNode(ISD::SHL, DL, VT, X, ShiftSv);
+    X = DAG.getNode(
+        ISD::OR, DL, VT,
+        DAG.getNode(ISD::AND, DL, VT, X, DAG.getNOT(DL, MvArray[S], VT)),
+        DAG.getNode(ISD::AND, DL, VT, T, MvArray[S]));
+  }
+
+  return DAG.getNode(ISD::AND, DL, VT, X, Msk);
+}
+
 void TargetLowering::expandShiftParts(SDNode *Node, SDValue &Lo, SDValue &Hi,
                                       SelectionDAG &DAG) const {
   assert(Node->getNumOperands() == 3 && "Not a double-shift!");
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 1f4842fb3df15..9a25af680b6ee 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -1188,6 +1188,9 @@ void TargetLoweringBase::initActions() {
     // Carry-less multiply
     setOperationAction({ISD::CLMUL, ISD::CLMULR, ISD::CLMULH}, VT, Expand);
 
+    // Bit extract/deposit (compress/expand)
+    setOperationAction({ISD::BEXT, ISD::BDEP}, VT, Expand);
+
     // Saturated trunc
     setOperationAction(ISD::TRUNCATE_SSAT_S, VT, Expand);
     setOperationAction(ISD::TRUNCATE_SSAT_U, VT, Expand);
diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp
index b1b985b80cffd..27a379fb49301 100644
--- a/llvm/lib/Support/KnownBits.cpp
+++ b/llvm/lib/Support/KnownBits.cpp
@@ -642,6 +642,71 @@ KnownBits KnownBits::clmul(const KnownBits &LHS, const KnownBits &RHS) {
   return Res;
 }
 
+KnownBits KnownBits::bext(const KnownBits &LHS, const KnownBits &RHS) {
+  // For each source position I where mask[I] could be set, the output index j
+  // lies in [M0, M1] where these track the range of possible set-bit counts
+  // seen so far in mask.
+  //
+  // The output bit j
+  // - can be 0 if any candidate LHS[I] could be zero or popcount(mask) could
+  //   be <= j, and
+  // - can be 1 only if some candidate LHS[I] could be one and popcount(mask)
+  //   is known > j.
+  unsigned BitWidth = LHS.getBitWidth();
+  KnownBits Res(BitWidth);
+  Res.setAllConflict();
+
+  unsigned M0 = 0, M1 = 0;
+  for (unsigned I = 0; I < BitWidth; ++I) {
+    if (!RHS.Zero[I]) {
+      APInt Range = APInt::getBitsSet(BitWidth, M0, M1 + 1);
+      if (!LHS.Zero[I])
+        Res.Zero &= ~Range; // some position in Range could be 1
+      if (!LHS.One[I])
+        Res.One &= ~Range; // some position in Range could be 0
+    }
+    if (RHS.One[I])
+      ++M0, ++M1;
+    else if (!RHS.Zero[I])
+      ++M1;
+  }
+
+  // Output positions j >= M0 may have no source (popcount(mask) <= j), in
+  // which case they default to zero.
+  Res.One &= APInt::getLowBitsSet(BitWidth, M0);
+  return Res;
+}
+
+KnownBits KnownBits::bdep(const KnownBits &LHS, const KnownBits &RHS) {
+  // For each output position I where mask[I] could be set, the source index j
+  // lies in [M0, M1] where these track possible counts of set mask bits < I.
+  //
+  // The output bit
+  // - can be 0 if mask[I] or any candidate LHS[j] could be zero, and
+  // - can be 1 only if both mask[I] and some candidate LHS[j] could be one.
+  unsigned BitWidth = LHS.getBitWidth();
+  KnownBits Res(BitWidth);
+  Res.setAllConflict();
+
+  unsigned M0 = 0, M1 = 0;
+  for (unsigned I = 0; I < BitWidth; ++I) {
+    if (!RHS.One[I])
+      Res.One.clearBit(I); // mask[I] could be 0 -> output[I] could be 0
+    if (!RHS.Zero[I]) {
+      APInt Range = APInt::getBitsSet(BitWidth, M0, M1 + 1);
+      if (!Range.isSubsetOf(LHS.One))
+        Res.One.clearBit(I); // some candidate could be 0
+      if (!Range.isSubsetOf(LHS.Zero))
+        Res.Zero.clearBit(I); // some candidate could be 1
+    }
+    if (RHS.One[I])
+      ++M0, ++M1;
+    else if (!RHS.Zero[I])
+      ++M1;
+  }
+  return Res;
+}
+
 std::optional<bool> KnownBits::eq(const KnownBits &LHS, const KnownBits &RHS) {
   if (LHS.isConstant() && RHS.isConstant())
     return LHS.getConstant() == RHS.getConstant();
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 9b36339e419fb..2974b8aa774e8 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -2108,6 +2108,19 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
       }
     }
 
+    // Map generic BEXT/BDEP to SVE2 bitperm BEXT/BDEP instructions.
+    if (Subtarget->hasSVEBitPerm() &&
+        (Subtarget->isSVEAvailable() ||
+         (Subtarget->isSVEorStreamingSVEAvailable() &&
+          Subtarget->hasSSVE_BitPerm()))) {
+      for (auto VT : {MVT::nxv16i8, MVT::nxv8i16, MVT::nxv4i32, MVT::nxv2i64}) {
+        setOperationAction(ISD::BEXT, VT, Custom);
+        setOperationAction(ISD::BDEP, VT, Custom);
+      }
+      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i32, Custom);
+      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i64, Custom);
+    }
+
     if (Subtarget->hasBF16())
       setPartialReduceMLAAction(ISD::PARTIAL_REDUCE_FMLA, MVT::nxv4f32,
                                 MVT::nxv8bf16, Legal);
@@ -8629,6 +8642,38 @@ SDValue AArch64TargetLowering::LowerOperation(SDValue Op,
     return LowerPARTIAL_REDUCE_MLA(Op, DAG);
   case ISD::CLMUL:
     return LowerCLMUL(Op, DAG);
+  case ISD::BEXT:
+  case ISD::BDEP: {
+    // Lower generic BEXT/BDEP to SVE2 intrinsics.
+    SDLoc DL(Op);
+    EVT VT = Op.getValueType();
+    unsigned IntrID = Op.getOpcode() == ISD::BEXT
+                          ? Intrinsic::aarch64_sve_bext_x
+                          : Intrinsic::aarch64_sve_bdep_x;
+
+    if (VT.isScalarInteger()) {
+      assert((VT == MVT::i32 || VT == MVT::i64) && "Unexpected scalar type");
+      EVT NeonVT = VT == MVT::i64 ? MVT::v2i64 : MVT::v4i32;
+      EVT SveVT = VT == MVT::i64 ? MVT::nxv2i64 : MVT::nxv4i32;
+      SDValue Zero = DAG.getVectorIdxConstant(0, DL);
+      auto ToScalable = [&](SDValue X) {
+        SDValue V = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, NeonVT, X);
+        return DAG.getNode(ISD::INSERT_SUBVECTOR, DL, SveVT,
+                           DAG.getUNDEF(SveVT), V, Zero);
+      };
+      SDValue Z0 = ToScalable(Op.getOperand(0));
+      SDValue Z1 = ToScalable(Op.getOperand(1));
+      SDValue R =
+          DAG.getNode(ISD::INTRINSIC_WO_CHAIN, DL, SveVT,
+                      DAG.getTargetConstant(IntrID, DL, MVT::i32), Z0, Z1);
+      SDValue Fixed = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, NeonVT, R, Zero);
+      return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, Fixed, Zero);
+    }
+
+    return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, DL, VT,
+                       DAG.getTargetConstant(IntrID, DL, MVT::i32),
+                       Op.getOperand(0), Op.getOperand(1));
+  }
   case ISD::FCANONICALIZE:
     return LowerFCANONICALIZE(Op, DAG);
   case ISD::CTTZ_ELTS:
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index b6aee44b4de2e..360db807a95a4 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -480,6 +480,14 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
     setOperationAction(ISD::CTPOP          , MVT::i64  , Custom);
   }
 
+  if (Subtarget.hasBMI2()) {
+    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i8, Promote);
+    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i16, Promote);
+    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i32, Custom);
+    if (Subtarget.is64Bit())
+      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i64, Custom);
+  }
+
   setOperationAction(ISD::READCYCLECOUNTER , MVT::i64  , Custom);
 
   if (!Subtarget.hasMOVBE())
@@ -33833,6 +33841,16 @@ static SDValue LowerCLMUL(SDValue Op, const X86Subtarget &Subtarget,
   return Result;
 }
 
+static SDValue LowerBEXT(SDValue Op, SelectionDAG &DAG) {
+  return DAG.getNode(X86ISD::PEXT, SDLoc(Op), Op.getValueType(),
+                     Op.getOperand(0), Op.getOperand(1));
+}
+
+static SDValue LowerBDEP(SDValue Op, SelectionDAG &DAG) {
+  return DAG.getNode(X86ISD::PDEP, SDLoc(Op), Op.getValueType(),
+                     Op.getOperand(0), Op.getOperand(1));
+}
+
 static SDValue LowerPARITY(SDValue Op, const X86Subtarget &Subtarget,
                            SelectionDAG &DAG) {
   SDLoc DL(Op);
@@ -34565,6 +34583,8 @@ SDValue X86TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
   case ISD::BITREVERSE:         return LowerBITREVERSE(Op, Subtarget, DAG);
   case ISD::CLMUL:
   case ISD::CLMULH:             return LowerCLMUL(Op, Subtarget, DAG);
+  case ISD::BEXT:               return LowerBEXT(Op, DAG);
+  case ISD::BDEP:               return LowerBDEP(Op, DAG);
   case ISD::PARITY:             return LowerPARITY(Op, Subtarget, DAG);
   case ISD::BUILD_VECTOR:       return LowerBUILD_VECTOR(Op, DAG);
   case ISD::CONCAT_VECTORS:     return LowerCONCAT_VECTORS(Op, Subtarget, DAG);
diff --git a/llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll b/llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll
new file mode 100644
index 0000000000000..835ddd360f443
--- /dev/null
+++ b/llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll
@@ -0,0 +1,96 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -passes=instcombine -S < %s | FileCheck %s
+
+; bext(x, 0b00001111) produces a 4-bit result; bit 4 and above are always zero.
+define i1 @bext_high_bits_zero(i8 %x) nounwind {
+; CHECK-LABEL: @bext_high_bits_zero(
+; CHECK-NEXT:    ret i1 true
+;
+  %bext = call i8 @llvm.bext.i8(i8 %x, i8 15)
+  %and = and i8 %bext, 240
+  %r = icmp eq i8 %and, 0
+  ret i1 %r
+}
+
+; bext(x, 0b11001100) can produce up to 4 bits; bits 4..7 are zero.
+define i1 @bext_sparse_mask_high_zero(i8 %x) nounwind {
+; CHECK-LABEL: @bext_sparse_mask_high_zero(
+; CHECK-NEXT:    ret i1 true
+;
+  %bext = call i8 @llvm.bext.i8(i8 %x, i8 204)
+  %and = and i8 %bext, 240
+  %r = icmp eq i8 %and, 0
+  ret i1 %r
+}
+
+; bext(x, 0) -> all bits zero: the AND with any mask is always zero.
+define i1 @bext_zero_mask_known_zero(i8 %x) nounwind {
+; CHECK-LABEL: @bext_zero_mask_known_zero(
+; CHECK-NEXT:    ret i1 true
+;
+  %bext = call i8 @llvm.bext.i8(i8 %x, i8 0)
+  %r = icmp eq i8 %bext, 0
+  ret i1 %r
+}
+
+; Negative: bext(x, 0b11001100) can have bits 0-3 set; can't prove bit 0 is zero.
+define i1 @bext_low_bits_not_known(i8 %x) nounwind {
+; CHECK-LABEL: @bext_low_bits_not_known(
+; CHECK-NEXT:    [[BEXT:%.*]] = call i8 @llvm.bext.i8(i8 [[X:%.*]], i8 -52)
+; CHECK-NEXT:    [[AND:%.*]] = and i8 [[BEXT]], 1
+; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[AND]], 0
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %bext = call i8 @llvm.bext.i8(i8 %x, i8 204)
+  %and = and i8 %bext, 1
+  %r = icmp eq i8 %and, 0
+  ret i1 %r
+}
+
+; bdep(x, 0b11110000): bits 0..3 of result are always zero.
+define i1 @bdep_low_bits_zero(i8 %x) nounwind {
+; CHECK-LABEL: @bdep_low_bits_zero(
+; CHECK-NEXT:    ret i1 true
+;
+  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 240)
+  %and = and i8 %bdep, 15
+  %r = icmp eq i8 %and, 0
+  ret i1 %r
+}
+
+; bdep(x, 0b00001111): bits 4..7 of result are always zero.
+define i1 @bdep_high_bits_zero(i8 %x) nounwind {
+; CHECK-LABEL: @bdep_high_bits_zero(
+; CHECK-NEXT:    ret i1 true
+;
+  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 15)
+  %and = and i8 %bdep, 240
+  %r = icmp eq i8 %and, 0
+  ret i1 %r
+}
+
+; bdep(x, 0) -> all bits zero.
+define i1 @bdep_zero_mask_known_zero(i8 %x) nounwind {
+; CHECK-LABEL: @bdep_zero_mask_known_zero(
+; CHECK-NEXT:    ret i1 true
+;
+  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 0)
+  %r = icmp eq i8 %bdep, 0
+  ret i1 %r
+}
+
+; Negative: bdep(x, 0b11001100) can have bits 2,3,6,7 set.
+define i1 @bdep_mask_bits_not_known(i8 %x) nounwind {
+; CHECK-LABEL: @bdep_mask_bits_not_known(
+; CHECK-NEXT:    [[BDEP:%.*]] = call i8 @llvm.bdep.i8(i8 [[X:%.*]], i8 -52)
+; CHECK-NEXT:    [[R:%.*]] = icmp sgt i8 [[BDEP]], -1
+; CHECK-NEXT:    ret i1 [[R]]
+;
+  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 204)
+  %and = and i8 %bdep, 128
+  %r = icmp eq i8 %and, 0
+  ret i1 %r
+}
+
+declare i8 @llvm.bext.i8(i8, i8)
+declare i8 @llvm.bdep.i8(i8, i8)
diff --git a/llvm/test/CodeGen/AArch64/bext-bdep.ll b/llvm/test/CodeGen/AArch64/bext-bdep.ll
new file mode 100644
index 0000000000000..454f6e079cd10
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/bext-bdep.ll
@@ -0,0 +1,4057 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2-bitperm | FileCheck %s --check-prefix=BITPERM
+; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2 | FileCheck %s --check-prefix=NOSVE2BITPERM
+
+define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
+; BITPERM-LABEL: bext_i8:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    and w8, w0, #0xff
+; BITPERM-NEXT:    and w9, w1, #0xff
+; BITPERM-NEXT:    fmov s0, w8
+; BITPERM-NEXT:    fmov s1, w9
+; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_i8:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w9, w1
+; NOSVE2BITPERM-NEXT:    mov w8, #-1 // =0xffffffff
+; NOSVE2BITPERM-NEXT:    and w10, w0, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w9, #1
+; NOSVE2BITPERM-NEXT:    fmov s0, w8
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w8, s1
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    and w11, w10, w8
+; NOSVE2BITPERM-NEXT:    eor w13, w1, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, #0xfe
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11
+; NOSVE2BITPERM-NEXT:    and w11, w11, #0xfe
+; NOSVE2BITPERM-NEXT:    orr w8, w13, w8, lsr #1
+; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w12, s1
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w12
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w10, w11, lsr #1
+; NOSVE2BITPERM-NEXT:    and w10, w12, w8
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w11, w9, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, #0xfc
+; NOSVE2BITPERM-NEXT:    pmul v0.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w11, w11, #0xfc
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11, lsr #2
+; NOSVE2BITPERM-NEXT:    fmov w10, s0
+; NOSVE2BITPERM-NEXT:    and w8, w10, w8
+; NOSVE2BITPERM-NEXT:    and w8, w9, w8
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, #0xf0
+; NOSVE2BITPERM-NEXT:    orr w0, w9, w8, lsr #4
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i8 @llvm.bext.i8(i8 %val, i8 %mask)
+  ret i8 %res
+}
+
+define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
+; BITPERM-LABEL: bdep_i8:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    and w8, w0, #0xff
+; BITPERM-NEXT:    and w9, w1, #0xff
+; BITPERM-NEXT:    fmov s0, w8
+; BITPERM-NEXT:    fmov s1, w9
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i8:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w9, w1
+; NOSVE2BITPERM-NEXT:    mov w8, #-1 // =0xffffffff
+; NOSVE2BITPERM-NEXT:    lsl w9, w9, #1
+; NOSVE2BITPERM-NEXT:    fmov s0, w8
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w8, s1
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    eor w11, w1, w8
+; NOSVE2BITPERM-NEXT:    and w12, w8, #0xfe
+; NOSVE2BITPERM-NEXT:    orr w11, w11, w12, lsr #1
+; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w10, s1
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    and w9, w10, w11
+; NOSVE2BITPERM-NEXT:    eor w10, w11, w9
+; NOSVE2BITPERM-NEXT:    and w11, w9, #0xfc
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w11, lsr #2
+; NOSVE2BITPERM-NEXT:    pmul v0.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w11, s0
+; NOSVE2BITPERM-NEXT:    and w10, w11, w10
+; NOSVE2BITPERM-NEXT:    and w11, w10, w0, lsl #4
+; NOSVE2BITPERM-NEXT:    bic w10, w0, w10
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w11
+; NOSVE2BITPERM-NEXT:    and w11, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    bic w9, w10, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w0, w8, w1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i8 @llvm.bdep.i8(i8 %val, i8 %mask)
+  ret i8 %res
+}
+
+define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
+; BITPERM-LABEL: bext_i16:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    and w8, w0, #0xffff
+; BITPERM-NEXT:    and w9, w1, #0xffff
+; BITPERM-NEXT:    fmov s0, w8
+; BITPERM-NEXT:    fmov s1, w9
+; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_i16:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w8, w1
+; NOSVE2BITPERM-NEXT:    and w14, w0, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
+; NOSVE2BITPERM-NEXT:    neg w11, w8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w11
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    neg w11, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w1, w8
+; NOSVE2BITPERM-NEXT:    and w15, w8, #0xfffe
+; NOSVE2BITPERM-NEXT:    and w8, w14, w8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w15, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, #0xfffe
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    orr w8, w14, w8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, w13
+; NOSVE2BITPERM-NEXT:    eor w11, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    neg w12, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    and w14, w8, w10
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, #0xfffc
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w14
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    and w14, w14, #0xfffc
+; NOSVE2BITPERM-NEXT:    orr w10, w13, w10, lsr #2
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w14, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w12
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w11, w11, w10
+; NOSVE2BITPERM-NEXT:    eor w12, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    and w13, w8, w11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w13
+; NOSVE2BITPERM-NEXT:    and w13, w13, #0xfff0
+; NOSVE2BITPERM-NEXT:    and w11, w11, #0xfff0
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w13, lsr #4
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w11, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    and w10, w8, w10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w11, w12, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    neg w9, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w9, w11, w9
+; NOSVE2BITPERM-NEXT:    and w9, w10, w9
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w9
+; NOSVE2BITPERM-NEXT:    and w9, w9, #0xff00
+; NOSVE2BITPERM-NEXT:    orr w0, w8, w9, lsr #8
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i16 @llvm.bext.i16(i16 %val, i16 %mask)
+  ret i16 %res
+}
+
+define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
+; BITPERM-LABEL: bdep_i16:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    and w8, w0, #0xffff
+; BITPERM-NEXT:    and w9, w1, #0xffff
+; BITPERM-NEXT:    fmov s0, w8
+; BITPERM-NEXT:    fmov s1, w9
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i16:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w8, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
+; NOSVE2BITPERM-NEXT:    neg w11, w8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w11
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    neg w11, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w1, w8
+; NOSVE2BITPERM-NEXT:    and w14, w8, #0xfffe
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, w13
+; NOSVE2BITPERM-NEXT:    eor w11, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    neg w12, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w10
+; NOSVE2BITPERM-NEXT:    and w14, w10, #0xfffc
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w12
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w11, w11, w13
+; NOSVE2BITPERM-NEXT:    eor w12, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11
+; NOSVE2BITPERM-NEXT:    and w14, w11, #0xfff0
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    neg w9, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w9, w12, w9
+; NOSVE2BITPERM-NEXT:    and w9, w9, w13
+; NOSVE2BITPERM-NEXT:    and w12, w9, w0, lsl #8
+; NOSVE2BITPERM-NEXT:    bic w9, w0, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w12
+; NOSVE2BITPERM-NEXT:    and w12, w11, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w12
+; NOSVE2BITPERM-NEXT:    and w11, w10, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w0, w8, w1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i16 @llvm.bdep.i16(i16 %val, i16 %mask)
+  ret i16 %res
+}
+
+define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
+; BITPERM-LABEL: bext_i32:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    fmov s0, w0
+; BITPERM-NEXT:    fmov s1, w1
+; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_i32:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w8, w1
+; NOSVE2BITPERM-NEXT:    and w14, w0, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #30
+; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #31
+; NOSVE2BITPERM-NEXT:    bic w10, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    eor w9, w10, w10, lsl #1
+; NOSVE2BITPERM-NEXT:    and w15, w14, w8
+; NOSVE2BITPERM-NEXT:    eor w16, w1, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w16, w8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w15
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w15, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w10, w9
+; NOSVE2BITPERM-NEXT:    and w9, w9, w8
+; NOSVE2BITPERM-NEXT:    eor w10, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    and w15, w14, w9
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w9
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w9, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w9, w14, w15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w15, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, w8
+; NOSVE2BITPERM-NEXT:    eor w12, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    and w14, w9, w10
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w10
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w14
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w14, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
+; NOSVE2BITPERM-NEXT:    and w12, w12, w8
+; NOSVE2BITPERM-NEXT:    eor w13, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w12
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w12, lsr #8
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w13, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    and w13, w9, w12
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w13, lsr #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    and w8, w9, w8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    and w8, w8, w10
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w0, w9, w8, lsr #16
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 %mask)
+  ret i32 %res
+}
+
+define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
+; BITPERM-LABEL: bdep_i32:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    fmov s0, w0
+; BITPERM-NEXT:    fmov s1, w1
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i32:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w8, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #30
+; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #31
+; NOSVE2BITPERM-NEXT:    bic w10, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    eor w9, w10, w10, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w1, w8
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w10, w9
+; NOSVE2BITPERM-NEXT:    and w9, w9, w14
+; NOSVE2BITPERM-NEXT:    eor w10, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w9
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w9, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, w14
+; NOSVE2BITPERM-NEXT:    eor w12, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w10
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w10, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
+; NOSVE2BITPERM-NEXT:    and w12, w12, w14
+; NOSVE2BITPERM-NEXT:    eor w13, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w12
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w12, lsr #8
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w11, w13, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    and w11, w11, w14
+; NOSVE2BITPERM-NEXT:    and w13, w11, w0, lsl #16
+; NOSVE2BITPERM-NEXT:    bic w11, w0, w11
+; NOSVE2BITPERM-NEXT:    orr w11, w11, w13
+; NOSVE2BITPERM-NEXT:    and w13, w12, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
+; NOSVE2BITPERM-NEXT:    orr w11, w11, w13
+; NOSVE2BITPERM-NEXT:    and w12, w10, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    bic w10, w11, w10
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w12
+; NOSVE2BITPERM-NEXT:    and w11, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    bic w9, w10, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w0, w8, w1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+  ret i32 %res
+}
+
+define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
+; BITPERM-LABEL: bext_i64:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    fmov d0, x0
+; BITPERM-NEXT:    fmov d1, x1
+; BITPERM-NEXT:    bext z0.d, z0.d, z1.d
+; BITPERM-NEXT:    fmov x0, d0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_i64:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn x8, x1
+; NOSVE2BITPERM-NEXT:    and x15, x0, x1
+; NOSVE2BITPERM-NEXT:    lsl x9, x8, #1
+; NOSVE2BITPERM-NEXT:    eor x10, x9, x8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #62
+; NOSVE2BITPERM-NEXT:    eor x8, x10, x8, lsl #63
+; NOSVE2BITPERM-NEXT:    bic x10, x9, x8
+; NOSVE2BITPERM-NEXT:    and x8, x8, x1
+; NOSVE2BITPERM-NEXT:    eor x9, x10, x10, lsl #1
+; NOSVE2BITPERM-NEXT:    and x16, x15, x8
+; NOSVE2BITPERM-NEXT:    eor x17, x1, x8
+; NOSVE2BITPERM-NEXT:    orr x8, x17, x8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x16
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #2
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x16, lsr #1
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x11, x10, x9
+; NOSVE2BITPERM-NEXT:    and x9, x9, x8
+; NOSVE2BITPERM-NEXT:    eor x10, x11, x11, lsl #1
+; NOSVE2BITPERM-NEXT:    and x16, x15, x9
+; NOSVE2BITPERM-NEXT:    eor x8, x8, x9
+; NOSVE2BITPERM-NEXT:    orr x8, x8, x9, lsr #2
+; NOSVE2BITPERM-NEXT:    eor x9, x15, x16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #2
+; NOSVE2BITPERM-NEXT:    orr x9, x9, x16, lsr #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x12, x11, x10
+; NOSVE2BITPERM-NEXT:    and x10, x10, x8
+; NOSVE2BITPERM-NEXT:    eor x11, x12, x12, lsl #1
+; NOSVE2BITPERM-NEXT:    and x15, x9, x10
+; NOSVE2BITPERM-NEXT:    eor x8, x8, x10
+; NOSVE2BITPERM-NEXT:    orr x8, x8, x10, lsr #4
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x15
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #2
+; NOSVE2BITPERM-NEXT:    orr x9, x9, x15, lsr #4
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x12, x12, x11
+; NOSVE2BITPERM-NEXT:    and x11, x11, x8
+; NOSVE2BITPERM-NEXT:    eor x13, x12, x12, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x8, x8, x11
+; NOSVE2BITPERM-NEXT:    orr x8, x8, x11, lsr #8
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x13, x13, x12, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x12, x12, x13
+; NOSVE2BITPERM-NEXT:    eor x14, x12, x12, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x12, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x14, x12, lsl #58
+; NOSVE2BITPERM-NEXT:    and x14, x9, x11
+; NOSVE2BITPERM-NEXT:    and x11, x13, x8
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x14
+; NOSVE2BITPERM-NEXT:    eor x8, x8, x11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x12, lsl #59
+; NOSVE2BITPERM-NEXT:    orr x9, x9, x14, lsr #8
+; NOSVE2BITPERM-NEXT:    orr x8, x8, x11, lsr #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x12, lsl #60
+; NOSVE2BITPERM-NEXT:    and x13, x9, x11
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x12, lsl #61
+; NOSVE2BITPERM-NEXT:    orr x9, x9, x13, lsr #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x12, lsl #62
+; NOSVE2BITPERM-NEXT:    and x8, x9, x8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x12, lsl #63
+; NOSVE2BITPERM-NEXT:    and x8, x8, x10
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x8
+; NOSVE2BITPERM-NEXT:    orr x0, x9, x8, lsr #32
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i64 @llvm.bext.i64(i64 %val, i64 %mask)
+  ret i64 %res
+}
+
+define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
+; BITPERM-LABEL: bdep_i64:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    fmov d0, x0
+; BITPERM-NEXT:    fmov d1, x1
+; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
+; BITPERM-NEXT:    fmov x0, d0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i64:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn x8, x1
+; NOSVE2BITPERM-NEXT:    lsl x9, x8, #1
+; NOSVE2BITPERM-NEXT:    eor x10, x9, x8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #62
+; NOSVE2BITPERM-NEXT:    eor x8, x10, x8, lsl #63
+; NOSVE2BITPERM-NEXT:    bic x10, x9, x8
+; NOSVE2BITPERM-NEXT:    and x8, x8, x1
+; NOSVE2BITPERM-NEXT:    eor x9, x10, x10, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x1, x8
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x11, x10, x9
+; NOSVE2BITPERM-NEXT:    and x9, x9, x15
+; NOSVE2BITPERM-NEXT:    eor x10, x11, x11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x9
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x9, lsr #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x12, x11, x10
+; NOSVE2BITPERM-NEXT:    and x10, x10, x15
+; NOSVE2BITPERM-NEXT:    eor x11, x12, x12, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x10
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x10, lsr #4
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x13, x12, x11
+; NOSVE2BITPERM-NEXT:    and x11, x11, x15
+; NOSVE2BITPERM-NEXT:    eor x12, x13, x13, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x11
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x11, lsr #8
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x13, x13, x12
+; NOSVE2BITPERM-NEXT:    and x12, x12, x15
+; NOSVE2BITPERM-NEXT:    eor x14, x13, x13, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x12
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x12, lsr #16
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #62
+; NOSVE2BITPERM-NEXT:    eor x13, x14, x13, lsl #63
+; NOSVE2BITPERM-NEXT:    and x13, x13, x15
+; NOSVE2BITPERM-NEXT:    and x14, x13, x0, lsl #32
+; NOSVE2BITPERM-NEXT:    bic x13, x0, x13
+; NOSVE2BITPERM-NEXT:    orr x13, x13, x14
+; NOSVE2BITPERM-NEXT:    and x14, x12, x13, lsl #16
+; NOSVE2BITPERM-NEXT:    bic x12, x13, x12
+; NOSVE2BITPERM-NEXT:    orr x12, x12, x14
+; NOSVE2BITPERM-NEXT:    and x13, x11, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    bic x11, x12, x11
+; NOSVE2BITPERM-NEXT:    orr x11, x11, x13
+; NOSVE2BITPERM-NEXT:    and x12, x10, x11, lsl #4
+; NOSVE2BITPERM-NEXT:    bic x10, x11, x10
+; NOSVE2BITPERM-NEXT:    orr x10, x10, x12
+; NOSVE2BITPERM-NEXT:    and x11, x9, x10, lsl #2
+; NOSVE2BITPERM-NEXT:    bic x9, x10, x9
+; NOSVE2BITPERM-NEXT:    orr x9, x9, x11
+; NOSVE2BITPERM-NEXT:    and x10, x8, x9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic x8, x9, x8
+; NOSVE2BITPERM-NEXT:    orr x8, x8, x10
+; NOSVE2BITPERM-NEXT:    and x0, x8, x1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i64 @llvm.bdep.i64(i64 %val, i64 %mask)
+  ret i64 %res
+}
+
+define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
+; BITPERM-LABEL: bext_nxv16i8:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bext z0.b, z0.b, z1.b
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_nxv16i8:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.b, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    lsl z3.b, z3.b, #1
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    and z5.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z5.b, z5.b, #1
+; NOSVE2BITPERM-NEXT:    pmul z6.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.b, z4.b, #1
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z6.d, z1.d
+; NOSVE2BITPERM-NEXT:    pmul z2.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    and z5.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.b, z4.b, #2
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z3.b, z5.b, #2
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    and z1.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    and z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    lsr z1.b, z1.b, #4
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 16 x i8> @llvm.bext.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
+  ret <vscale x 16 x i8> %res
+}
+
+define <vscale x 16 x i8> @bdep_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv16i8:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.b, z0.b, z1.b
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv16i8:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.b, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    lsl z3.b, z3.b, #1
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    and z5.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor z4.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z6.b, z5.b, #1
+; NOSVE2BITPERM-NEXT:    pmul z7.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    orr z4.d, z4.d, z6.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z7.d, z4.d
+; NOSVE2BITPERM-NEXT:    pmul z2.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    eor z4.d, z4.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z7.b, z6.b, #2
+; NOSVE2BITPERM-NEXT:    orr z3.d, z4.d, z7.d
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z3.b, z0.b, #4
+; NOSVE2BITPERM-NEXT:    bsl z3.d, z3.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z0.b, z3.b, #2
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsl z2.b, z0.b, #1
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 16 x i8> @llvm.bdep.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
+  ret <vscale x 16 x i8> %res
+}
+
+define <vscale x 8 x i16> @bext_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
+; BITPERM-LABEL: bext_nxv8i16:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bext z0.h, z0.h, z1.h
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_nxv8i16:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.h, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    lsl z3.h, z3.h, #1
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z6.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    eortb z6.b, z6.b, z4.b
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z7.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    eortb z7.b, z7.b, z4.b
+; NOSVE2BITPERM-NEXT:    and z4.d, z6.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z24.h, z4.h, #1
+; NOSVE2BITPERM-NEXT:    and z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.h, z4.h, #1
+; NOSVE2BITPERM-NEXT:    trn1 z5.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z6.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z25.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    pmul z5.b, z6.b, z5.b
+; NOSVE2BITPERM-NEXT:    and z6.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z6.h, z6.h, #2
+; NOSVE2BITPERM-NEXT:    eorbt z5.b, z5.b, z5.b
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.h, z4.h, #2
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z6.d
+; NOSVE2BITPERM-NEXT:    eortb z25.b, z25.b, z5.b
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z25.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z25.d, z1.d
+; NOSVE2BITPERM-NEXT:    trn1 z5.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z6.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z2.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    and z7.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.h, z4.h, #4
+; NOSVE2BITPERM-NEXT:    pmul z3.b, z6.b, z5.b
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsr z5.h, z7.h, #4
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    eorbt z3.b, z3.b, z3.b
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eortb z2.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    and z1.d, z1.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    lsr z1.h, z1.h, #8
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 8 x i16> @llvm.bext.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
+  ret <vscale x 8 x i16> %res
+}
+
+define <vscale x 8 x i16> @bdep_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv8i16:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.h, z0.h, z1.h
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv8i16:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.h, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    lsl z3.h, z3.h, #1
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z6.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    eortb z6.b, z6.b, z4.b
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z7.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    eortb z7.b, z7.b, z4.b
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z24.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    and z5.d, z6.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor z6.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z25.h, z5.h, #1
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    orr z6.d, z6.d, z25.d
+; NOSVE2BITPERM-NEXT:    eortb z24.b, z24.b, z4.b
+; NOSVE2BITPERM-NEXT:    and z4.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z6.d, z6.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z7.h, z4.h, #2
+; NOSVE2BITPERM-NEXT:    trn1 z25.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z26.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z2.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    orr z3.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    pmul z6.b, z26.b, z25.b
+; NOSVE2BITPERM-NEXT:    and z7.d, z24.d, z3.d
+; NOSVE2BITPERM-NEXT:    eorbt z6.b, z6.b, z6.b
+; NOSVE2BITPERM-NEXT:    eor z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsr z24.h, z7.h, #4
+; NOSVE2BITPERM-NEXT:    orr z3.d, z3.d, z24.d
+; NOSVE2BITPERM-NEXT:    eortb z2.b, z2.b, z6.b
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z3.h, z0.h, #8
+; NOSVE2BITPERM-NEXT:    bsl z3.d, z3.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z0.h, z3.h, #4
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsl z2.h, z0.h, #2
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsl z0.h, z2.h, #1
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 8 x i16> @llvm.bdep.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
+  ret <vscale x 8 x i16> %res
+}
+
+define <vscale x 4 x i32> @bext_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
+; BITPERM-LABEL: bext_nxv4i32:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_nxv4i32:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.s, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    lsl z3.s, z3.s, #1
+; NOSVE2BITPERM-NEXT:    pmullt z4.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z5.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z4.s, z5.s, z4.s
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    pmullt z5.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z24.s, z4.s, #1
+; NOSVE2BITPERM-NEXT:    pmullb z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    and z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.s, z4.s, #1
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    trn1 z5.s, z6.s, z5.s
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z1.d
+; NOSVE2BITPERM-NEXT:    pmullt z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    pmullb z7.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z4.s, z7.s, z6.s
+; NOSVE2BITPERM-NEXT:    lsr z6.s, z5.s, #2
+; NOSVE2BITPERM-NEXT:    and z5.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z6.d
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z5.s, z5.s, #2
+; NOSVE2BITPERM-NEXT:    pmullt z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    pmullb z7.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z5.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.s, z4.s, #4
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z5.s, z5.s, #4
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    trn1 z4.s, z7.s, z6.s
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z5.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    pmullt z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    pmullb z2.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z3.s, z4.s, #8
+; NOSVE2BITPERM-NEXT:    lsr z4.s, z5.s, #8
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    orr z1.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    trn1 z2.s, z2.s, z6.s
+; NOSVE2BITPERM-NEXT:    and z1.d, z1.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    lsr z1.s, z1.s, #16
+; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 4 x i32> @llvm.bext.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
+  ret <vscale x 4 x i32> %res
+}
+
+define <vscale x 4 x i32> @bdep_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv4i32:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv4i32:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.s, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    lsl z3.s, z3.s, #1
+; NOSVE2BITPERM-NEXT:    pmullt z4.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z5.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z4.s, z5.s, z4.s
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    pmullt z5.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    lsr z24.s, z4.s, #1
+; NOSVE2BITPERM-NEXT:    pmullb z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z5.s, z6.s, z5.s
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z5.d
+; NOSVE2BITPERM-NEXT:    pmullt z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z7.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z6.s, z7.s, z6.s
+; NOSVE2BITPERM-NEXT:    eor z7.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    pmullt z24.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z7.d
+; NOSVE2BITPERM-NEXT:    pmullb z25.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z26.s, z5.s, #2
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z26.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    trn1 z24.s, z25.s, z24.s
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z25.s, z6.s, #4
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z25.d
+; NOSVE2BITPERM-NEXT:    pmullt z26.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z2.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    and z3.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsr z24.s, z3.s, #8
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    trn1 z2.s, z2.s, z26.s
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsl z7.s, z0.s, #16
+; NOSVE2BITPERM-NEXT:    bsl z7.d, z7.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z0.s, z7.s, #8
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z7.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z2.s, z0.s, #4
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsl z0.s, z2.s, #2
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsl z2.s, z0.s, #1
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 4 x i32> @llvm.bdep.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
+  ret <vscale x 4 x i32> %res
+}
+
+define <vscale x 2 x i64> @bext_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
+; BITPERM-LABEL: bext_nxv2i64:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bext z0.d, z0.d, z1.d
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bext_nxv2i64:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-16
+; NOSVE2BITPERM-NEXT:    str z23, [sp] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z22, [sp, #1, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z21, [sp, #2, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z20, [sp, #3, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z19, [sp, #4, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z18, [sp, #5, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z17, [sp, #6, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z16, [sp, #7, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z15, [sp, #8, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z14, [sp, #9, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z13, [sp, #10, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z12, [sp, #11, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z8, [sp, #15, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-2
+; NOSVE2BITPERM-NEXT:    str z0, [sp, #1, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    movprfx z0, z1
+; NOSVE2BITPERM-NEXT:    subr z0.b, z0.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z5.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    str z1, [sp] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z0.d, #1
+; NOSVE2BITPERM-NEXT:    mov z31.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z25.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mov z6.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z7.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mov z21.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mov z22.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    eor z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #64
+; NOSVE2BITPERM-NEXT:    mov z5.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z4.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x100000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x400000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x800000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x200000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x100000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z1.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    eor3 z24.d, z24.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    eor z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x80000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z25.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z4.d, z2.d, z4.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z1.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z3.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z1.d, z7.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z22.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z6, z0
+; NOSVE2BITPERM-NEXT:    mul z6.d, z6.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z2.d, z2.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z1.d, z7.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z22.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    ldr z26, [sp] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z25, z0
+; NOSVE2BITPERM-NEXT:    mul z25.d, z25.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z6, z0
+; NOSVE2BITPERM-NEXT:    mul z6.d, z6.d, #4
+; NOSVE2BITPERM-NEXT:    eor z1.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z6.d, z25.d
+; NOSVE2BITPERM-NEXT:    movprfx z6, z0
+; NOSVE2BITPERM-NEXT:    mul z6.d, z6.d, #32
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #64
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z7.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z7.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    and z7.d, z24.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    ldr z6, [sp, #1, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    eor z27.d, z26.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z26.d
+; NOSVE2BITPERM-NEXT:    lsr z26.d, z7.d, #1
+; NOSVE2BITPERM-NEXT:    and z7.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    orr z26.d, z27.d, z26.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    eor z6.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsr z7.d, z7.d, #1
+; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z6.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    and z7.d, z6.d, z5.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z24.d, z26.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z5.d, z5.d, #2
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z26.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    eor z6.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsr z7.d, z7.d, #2
+; NOSVE2BITPERM-NEXT:    orr z5.d, z24.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z26.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    orr z6.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z5.d, z5.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    and z25.d, z6.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    orr z4.d, z5.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor z5.d, z6.d, z25.d
+; NOSVE2BITPERM-NEXT:    lsr z6.d, z25.d, #4
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    and z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    orr z5.d, z5.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    eor z4.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    and z24.d, z5.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsr z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    eor z5.d, z5.d, z24.d
+; NOSVE2BITPERM-NEXT:    lsr z24.d, z24.d, #8
+; NOSVE2BITPERM-NEXT:    orr z3.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    orr z4.d, z5.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z5.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    and z7.d, z4.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor z3.d, z3.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsr z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z6.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z5.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mul z6.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    eor z4.d, z4.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsr z7.d, z7.d, #16
+; NOSVE2BITPERM-NEXT:    orr z2.d, z3.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z6.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z6.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    orr z4.d, z4.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z5.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z0.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z4.d, z2.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor z1.d, z4.d, z0.d
+; NOSVE2BITPERM-NEXT:    lsr z0.d, z0.d, #32
+; NOSVE2BITPERM-NEXT:    orr z0.d, z1.d, z0.d
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #2
+; NOSVE2BITPERM-NEXT:    ldr z23, [sp] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z22, [sp, #1, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z21, [sp, #2, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z20, [sp, #3, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z19, [sp, #4, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z18, [sp, #5, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z17, [sp, #6, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z16, [sp, #7, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z15, [sp, #8, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z14, [sp, #9, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z13, [sp, #10, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z12, [sp, #11, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z8, [sp, #15, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #16
+; NOSVE2BITPERM-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 2 x i64> @llvm.bext.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
+  ret <vscale x 2 x i64> %res
+}
+
+define <vscale x 2 x i64> @bdep_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv2i64:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv2i64:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-16
+; NOSVE2BITPERM-NEXT:    str z23, [sp] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z22, [sp, #1, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z21, [sp, #2, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z20, [sp, #3, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z19, [sp, #4, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z18, [sp, #5, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z17, [sp, #6, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z16, [sp, #7, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z15, [sp, #8, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z14, [sp, #9, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z13, [sp, #10, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z12, [sp, #11, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z8, [sp, #15, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-2
+; NOSVE2BITPERM-NEXT:    str z0, [sp, #1, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    movprfx z0, z1
+; NOSVE2BITPERM-NEXT:    subr z0.b, z0.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z5.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    str z1, [sp] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z0.d, #1
+; NOSVE2BITPERM-NEXT:    mov z31.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z25.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mov z7.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z24.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x400000
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    eor z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #64
+; NOSVE2BITPERM-NEXT:    mov z5.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z4.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x400000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x80000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z1.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    eor z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x40000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z25.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x200000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z4.d, z2.d, z4.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z1.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mov z23.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z3.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z1.d, z7.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x20000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z2.d, z2.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z1.d, z7.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z7.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z7.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mov z23.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    movprfx z25, z0
+; NOSVE2BITPERM-NEXT:    mul z25.d, z25.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #4
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #64
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z24.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z24.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    ldr z26, [sp] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z26.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z19.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z26.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z24.d, z6.d, #1
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z19.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z5.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    lsr z15.d, z5.d, #2
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z15.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z11.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z11.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    and z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsr z31.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z0.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsr z25.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z0.d, z7.d, z25.d
+; NOSVE2BITPERM-NEXT:    ldr z7, [sp, #1, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    and z0.d, z1.d, z0.d
+; NOSVE2BITPERM-NEXT:    lsl z1.d, z7.d, #32
+; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z7.d, z0.d
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #16
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z1.d, z0.d, #8
+; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsl z1.d, z0.d, #2
+; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #1
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z6.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #2
+; NOSVE2BITPERM-NEXT:    ldr z23, [sp] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z22, [sp, #1, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z21, [sp, #2, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z20, [sp, #3, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z19, [sp, #4, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z18, [sp, #5, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z17, [sp, #6, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z16, [sp, #7, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z15, [sp, #8, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z14, [sp, #9, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z13, [sp, #10, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z12, [sp, #11, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z8, [sp, #15, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #16
+; NOSVE2BITPERM-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 2 x i64> @llvm.bdep.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
+  ret <vscale x 2 x i64> %res
+}
+
+declare i8 @llvm.bext.i8(i8, i8)
+declare i16 @llvm.bext.i16(i16, i16)
+declare i32 @llvm.bext.i32(i32, i32)
+declare i64 @llvm.bext.i64(i64, i64)
+declare i8 @llvm.bdep.i8(i8, i8)
+declare i16 @llvm.bdep.i16(i16, i16)
+declare i32 @llvm.bdep.i32(i32, i32)
+declare i64 @llvm.bdep.i64(i64, i64)
+declare <vscale x 16 x i8> @llvm.bext.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
+declare <vscale x 8 x i16> @llvm.bext.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
+declare <vscale x 4 x i32> @llvm.bext.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
+declare <vscale x 2 x i64> @llvm.bext.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
+declare <vscale x 16 x i8> @llvm.bdep.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
+declare <vscale x 8 x i16> @llvm.bdep.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
+declare <vscale x 4 x i32> @llvm.bdep.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
+declare <vscale x 2 x i64> @llvm.bdep.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
diff --git a/llvm/test/CodeGen/X86/bext-bdep.ll b/llvm/test/CodeGen/X86/bext-bdep.ll
new file mode 100644
index 0000000000000..d27094d8423b2
--- /dev/null
+++ b/llvm/test/CodeGen/X86/bext-bdep.ll
@@ -0,0 +1,4123 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+bmi2 | FileCheck %s --check-prefix=BMI2
+; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=NOBMI2
+
+define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
+; BMI2-LABEL: bext_i8:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movzbl %sil, %eax
+; BMI2-NEXT:    movzbl %dil, %ecx
+; BMI2-NEXT:    pextl %eax, %ecx, %eax
+; BMI2-NEXT:    # kill: def $al killed $al killed $eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i8:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl %esi, %ecx
+; NOBMI2-NEXT:    notb %cl
+; NOBMI2-NEXT:    leal (,%rcx,4), %edx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorb %al, %dl
+; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shlb $4, %r9b
+; NOBMI2-NEXT:    xorb %r8b, %r9b
+; NOBMI2-NEXT:    xorb %dl, %r9b
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shlb $5, %dl
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shlb $6, %r8b
+; NOBMI2-NEXT:    xorb %dl, %r8b
+; NOBMI2-NEXT:    shlb $7, %cl
+; NOBMI2-NEXT:    xorb %r8b, %cl
+; NOBMI2-NEXT:    xorb %r9b, %cl
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    andb %sil, %dl
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    andb %dl, %r8b
+; NOBMI2-NEXT:    xorb %r8b, %dil
+; NOBMI2-NEXT:    shrb %r8b
+; NOBMI2-NEXT:    orb %dil, %r8b
+; NOBMI2-NEXT:    xorb %dl, %sil
+; NOBMI2-NEXT:    shrb %dl
+; NOBMI2-NEXT:    orb %sil, %dl
+; NOBMI2-NEXT:    notb %cl
+; NOBMI2-NEXT:    andb %al, %cl
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorb %cl, %al
+; NOBMI2-NEXT:    leal (,%rcx,4), %esi
+; NOBMI2-NEXT:    leal (,%rcx,8), %edi
+; NOBMI2-NEXT:    xorb %sil, %dil
+; NOBMI2-NEXT:    xorb %al, %dil
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shlb $4, %al
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shlb $5, %r9b
+; NOBMI2-NEXT:    xorb %al, %r9b
+; NOBMI2-NEXT:    movl %ecx, %esi
+; NOBMI2-NEXT:    shlb $6, %sil
+; NOBMI2-NEXT:    xorb %r9b, %sil
+; NOBMI2-NEXT:    xorb %dil, %sil
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    andb %dl, %al
+; NOBMI2-NEXT:    movl %r8d, %edi
+; NOBMI2-NEXT:    andb %al, %dil
+; NOBMI2-NEXT:    xorb %dil, %r8b
+; NOBMI2-NEXT:    shrb $2, %dil
+; NOBMI2-NEXT:    orb %r8b, %dil
+; NOBMI2-NEXT:    xorb %al, %dl
+; NOBMI2-NEXT:    shrb $2, %al
+; NOBMI2-NEXT:    orb %dl, %al
+; NOBMI2-NEXT:    notb %sil
+; NOBMI2-NEXT:    andb %cl, %sil
+; NOBMI2-NEXT:    leal (%rsi,%rsi), %ecx
+; NOBMI2-NEXT:    xorb %sil, %cl
+; NOBMI2-NEXT:    leal (,%rsi,4), %edx
+; NOBMI2-NEXT:    leal (,%rsi,8), %r8d
+; NOBMI2-NEXT:    xorb %dl, %r8b
+; NOBMI2-NEXT:    xorb %cl, %r8b
+; NOBMI2-NEXT:    movl %esi, %ecx
+; NOBMI2-NEXT:    shlb $4, %cl
+; NOBMI2-NEXT:    movl %esi, %edx
+; NOBMI2-NEXT:    shlb $5, %dl
+; NOBMI2-NEXT:    xorb %cl, %dl
+; NOBMI2-NEXT:    shlb $6, %sil
+; NOBMI2-NEXT:    xorb %dl, %sil
+; NOBMI2-NEXT:    xorb %r8b, %sil
+; NOBMI2-NEXT:    andb %dil, %al
+; NOBMI2-NEXT:    andb %sil, %al
+; NOBMI2-NEXT:    xorb %al, %dil
+; NOBMI2-NEXT:    shrb $4, %al
+; NOBMI2-NEXT:    orb %dil, %al
+; NOBMI2-NEXT:    retq
+  %res = call i8 @llvm.bext.i8(i8 %val, i8 %mask)
+  ret i8 %res
+}
+
+define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
+; BMI2-LABEL: bdep_i8:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pdepl %esi, %edi, %eax
+; BMI2-NEXT:    # kill: def $al killed $al killed $eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_i8:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    notb %al
+; NOBMI2-NEXT:    leal (,%rax,4), %ecx
+; NOBMI2-NEXT:    leal (%rax,%rax), %edx
+; NOBMI2-NEXT:    xorb %dl, %cl
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shlb $4, %r9b
+; NOBMI2-NEXT:    xorb %r8b, %r9b
+; NOBMI2-NEXT:    xorb %cl, %r9b
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shlb $5, %cl
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shlb $6, %r8b
+; NOBMI2-NEXT:    xorb %cl, %r8b
+; NOBMI2-NEXT:    shlb $7, %al
+; NOBMI2-NEXT:    xorb %r8b, %al
+; NOBMI2-NEXT:    xorb %r9b, %al
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    andb %sil, %cl
+; NOBMI2-NEXT:    movl %esi, %r8d
+; NOBMI2-NEXT:    xorb %cl, %r8b
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shrb %r9b
+; NOBMI2-NEXT:    orb %r8b, %r9b
+; NOBMI2-NEXT:    notb %al
+; NOBMI2-NEXT:    andb %dl, %al
+; NOBMI2-NEXT:    leal (%rax,%rax), %edx
+; NOBMI2-NEXT:    xorb %al, %dl
+; NOBMI2-NEXT:    leal (,%rax,4), %r8d
+; NOBMI2-NEXT:    leal (,%rax,8), %r10d
+; NOBMI2-NEXT:    xorb %r8b, %r10b
+; NOBMI2-NEXT:    xorb %dl, %r10b
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shlb $4, %dl
+; NOBMI2-NEXT:    movl %eax, %r11d
+; NOBMI2-NEXT:    shlb $5, %r11b
+; NOBMI2-NEXT:    xorb %dl, %r11b
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shlb $6, %r8b
+; NOBMI2-NEXT:    xorb %r11b, %r8b
+; NOBMI2-NEXT:    xorb %r10b, %r8b
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    andb %r9b, %dl
+; NOBMI2-NEXT:    xorb %dl, %r9b
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shrb $2, %r10b
+; NOBMI2-NEXT:    orb %r9b, %r10b
+; NOBMI2-NEXT:    notb %r8b
+; NOBMI2-NEXT:    andb %al, %r8b
+; NOBMI2-NEXT:    leal (%r8,%r8), %eax
+; NOBMI2-NEXT:    xorb %r8b, %al
+; NOBMI2-NEXT:    leal (,%r8,4), %r9d
+; NOBMI2-NEXT:    leal (,%r8,8), %r11d
+; NOBMI2-NEXT:    xorb %r9b, %r11b
+; NOBMI2-NEXT:    xorb %al, %r11b
+; NOBMI2-NEXT:    movl %r8d, %eax
+; NOBMI2-NEXT:    shlb $4, %al
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shlb $5, %r9b
+; NOBMI2-NEXT:    xorb %al, %r9b
+; NOBMI2-NEXT:    shlb $6, %r8b
+; NOBMI2-NEXT:    xorb %r9b, %r8b
+; NOBMI2-NEXT:    xorb %r11b, %r8b
+; NOBMI2-NEXT:    movl %edi, %eax
+; NOBMI2-NEXT:    shlb $4, %al
+; NOBMI2-NEXT:    xorb %dil, %al
+; NOBMI2-NEXT:    andb %r10b, %al
+; NOBMI2-NEXT:    andb %r8b, %al
+; NOBMI2-NEXT:    xorb %dil, %al
+; NOBMI2-NEXT:    leal (,%rax,4), %edi
+; NOBMI2-NEXT:    xorb %al, %dil
+; NOBMI2-NEXT:    andb %dl, %dil
+; NOBMI2-NEXT:    xorb %al, %dil
+; NOBMI2-NEXT:    leal (%rdi,%rdi), %eax
+; NOBMI2-NEXT:    xorb %dil, %al
+; NOBMI2-NEXT:    andb %cl, %al
+; NOBMI2-NEXT:    xorb %dil, %al
+; NOBMI2-NEXT:    andb %sil, %al
+; NOBMI2-NEXT:    # kill: def $al killed $al killed $eax
+; NOBMI2-NEXT:    retq
+  %res = call i8 @llvm.bdep.i8(i8 %val, i8 %mask)
+  ret i8 %res
+}
+
+define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
+; BMI2-LABEL: bext_i16:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movzwl %si, %eax
+; BMI2-NEXT:    movzwl %di, %ecx
+; BMI2-NEXT:    pextl %eax, %ecx, %eax
+; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i16:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    pushq %rbx
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    leal (,%rax,4), %edx
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $14, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    shll $15, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    xorl %r9d, %eax
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    andl %esi, %r8d
+; NOBMI2-NEXT:    movl %edi, %edx
+; NOBMI2-NEXT:    andl %r8d, %edx
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movzwl %dx, %edx
+; NOBMI2-NEXT:    shrl %edx
+; NOBMI2-NEXT:    orl %edi, %edx
+; NOBMI2-NEXT:    xorl %r8d, %esi
+; NOBMI2-NEXT:    movzwl %r8w, %edi
+; NOBMI2-NEXT:    shrl %edi
+; NOBMI2-NEXT:    orl %esi, %edi
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rax,4), %esi
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $4, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $5, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $6, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $7, %esi
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $9, %esi
+; NOBMI2-NEXT:    xorl %r8d, %esi
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $11, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $12, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $13, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    andl %edi, %r8d
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    andl %r8d, %esi
+; NOBMI2-NEXT:    xorl %esi, %edx
+; NOBMI2-NEXT:    movzwl %si, %esi
+; NOBMI2-NEXT:    shrl $2, %esi
+; NOBMI2-NEXT:    orl %edx, %esi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movzwl %r8w, %edx
+; NOBMI2-NEXT:    shrl $2, %edx
+; NOBMI2-NEXT:    orl %edi, %edx
+; NOBMI2-NEXT:    notl %ecx
+; NOBMI2-NEXT:    andl %eax, %ecx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    leal (,%rcx,4), %edi
+; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $5, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %edi, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $7, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $9, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $12, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shll $13, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $14, %eax
+; NOBMI2-NEXT:    xorl %r9d, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    movl %esi, %edi
+; NOBMI2-NEXT:    andl %r8d, %edi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movzwl %di, %edi
+; NOBMI2-NEXT:    shrl $4, %edi
+; NOBMI2-NEXT:    orl %esi, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movzwl %r8w, %ebx
+; NOBMI2-NEXT:    shrl $4, %ebx
+; NOBMI2-NEXT:    orl %edx, %ebx
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rax,4), %edx
+; NOBMI2-NEXT:    leal (,%rax,8), %esi
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $4, %ecx
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $6, %ecx
+; NOBMI2-NEXT:    xorl %edx, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $8, %esi
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $9, %edx
+; NOBMI2-NEXT:    xorl %esi, %edx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $10, %esi
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $11, %ecx
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $13, %ecx
+; NOBMI2-NEXT:    xorl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    xorl %esi, %eax
+; NOBMI2-NEXT:    andl %edi, %ebx
+; NOBMI2-NEXT:    andl %eax, %ebx
+; NOBMI2-NEXT:    xorl %ebx, %edi
+; NOBMI2-NEXT:    movzbl %bh, %eax
+; NOBMI2-NEXT:    orl %edi, %eax
+; NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax
+; NOBMI2-NEXT:    popq %rbx
+; NOBMI2-NEXT:    retq
+  %res = call i16 @llvm.bext.i16(i16 %val, i16 %mask)
+  ret i16 %res
+}
+
+define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
+; BMI2-LABEL: bdep_i16:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pdepl %esi, %edi, %eax
+; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_i16:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    pushq %rbx
+; NOBMI2-NEXT:    movl %esi, %edx
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rdx,8), %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $5, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $7, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $12, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    shll $15, %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    andl %esi, %ecx
+; NOBMI2-NEXT:    movl %esi, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movzwl %cx, %r9d
+; NOBMI2-NEXT:    shrl %r9d
+; NOBMI2-NEXT:    orl %r8d, %r9d
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    andl %eax, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    leal (,%rdx,4), %r8d
+; NOBMI2-NEXT:    leal (,%rdx,8), %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %eax, %r10d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $5, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    xorl %r10d, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $7, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $8, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $9, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $10, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %eax, %r10d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $12, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $13, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $14, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %r8d, %eax
+; NOBMI2-NEXT:    andl %r9d, %eax
+; NOBMI2-NEXT:    xorl %eax, %r9d
+; NOBMI2-NEXT:    movzwl %ax, %r10d
+; NOBMI2-NEXT:    shrl $2, %r10d
+; NOBMI2-NEXT:    orl %r9d, %r10d
+; NOBMI2-NEXT:    notl %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    leal (%r8,%r8), %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    leal (,%r8,4), %r9d
+; NOBMI2-NEXT:    leal (,%r8,8), %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    xorl %edx, %r11d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $4, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $5, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $6, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    xorl %r11d, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $7, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $8, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $10, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    xorl %edx, %r11d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $11, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $12, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $13, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $14, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r9d, %edx
+; NOBMI2-NEXT:    andl %r10d, %edx
+; NOBMI2-NEXT:    xorl %edx, %r10d
+; NOBMI2-NEXT:    movzwl %dx, %r11d
+; NOBMI2-NEXT:    shrl $4, %r11d
+; NOBMI2-NEXT:    orl %r10d, %r11d
+; NOBMI2-NEXT:    notl %r9d
+; NOBMI2-NEXT:    andl %r8d, %r9d
+; NOBMI2-NEXT:    leal (%r9,%r9), %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    leal (,%r9,4), %r10d
+; NOBMI2-NEXT:    leal (,%r9,8), %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    xorl %r8d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $4, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $5, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    xorl %ebx, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $7, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $8, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $9, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $10, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    xorl %r8d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $11, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $12, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    shll $14, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %ebx, %r9d
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    andl %r11d, %r8d
+; NOBMI2-NEXT:    andl %r9d, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %r8d, %edi
+; NOBMI2-NEXT:    shll $4, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    andl %edx, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    leal (,%rdi,4), %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    andl %eax, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    andl %esi, %eax
+; NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax
+; NOBMI2-NEXT:    popq %rbx
+; NOBMI2-NEXT:    retq
+  %res = call i16 @llvm.bdep.i16(i16 %val, i16 %mask)
+  ret i16 %res
+}
+
+define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
+; BMI2-LABEL: bext_i32:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pextl %esi, %edi, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i32:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    leal (,%rax,4), %edx
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $14, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $15, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %r10d
+; NOBMI2-NEXT:    shll $16, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %r9d, %r10d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $17, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $18, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $19, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $20, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $21, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $22, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    xorl %r10d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $23, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $24, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $25, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $26, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $27, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $28, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $29, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $30, %edx
+; NOBMI2-NEXT:    shll $31, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    andl %esi, %edx
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    shrl %r8d
+; NOBMI2-NEXT:    orl %edi, %r8d
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    shrl %edx
+; NOBMI2-NEXT:    orl %esi, %edx
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rax,4), %esi
+; NOBMI2-NEXT:    leal (,%rax,8), %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    xorl %ecx, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $4, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $5, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $6, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $7, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $8, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $9, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $10, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    xorl %ecx, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $11, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $12, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $13, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $14, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $15, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $16, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $17, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $18, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $19, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $20, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $21, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $22, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $23, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $24, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $25, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $26, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $27, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $28, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $29, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %ecx, %esi
+; NOBMI2-NEXT:    andl %edx, %esi
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    andl %esi, %r9d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    shrl $2, %r9d
+; NOBMI2-NEXT:    orl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %esi, %edx
+; NOBMI2-NEXT:    shrl $2, %esi
+; NOBMI2-NEXT:    orl %edx, %esi
+; NOBMI2-NEXT:    notl %ecx
+; NOBMI2-NEXT:    andl %eax, %ecx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    leal (,%rcx,4), %edx
+; NOBMI2-NEXT:    leal (,%rcx,8), %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    xorl %edi, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $8, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $9, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $10, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $13, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $14, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $15, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $16, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $17, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $18, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $19, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $20, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $21, %eax
+; NOBMI2-NEXT:    xorl %edi, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $22, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $23, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $24, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $25, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $26, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $27, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $28, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $29, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $30, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %edx, %edi
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    andl %edi, %r8d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    shrl $4, %r8d
+; NOBMI2-NEXT:    orl %r9d, %r8d
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    shrl $4, %edi
+; NOBMI2-NEXT:    orl %esi, %edi
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    andl %ecx, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
+; NOBMI2-NEXT:    leal (,%rdx,8), %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    xorl %eax, %esi
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $5, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    xorl %esi, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $7, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $8, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $9, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $10, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    xorl %eax, %esi
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $12, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $13, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $15, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $16, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $17, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $18, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $19, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $20, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $21, %eax
+; NOBMI2-NEXT:    xorl %esi, %eax
+; NOBMI2-NEXT:    xorl %r9d, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $22, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $23, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $24, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $25, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $26, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $27, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $28, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    xorl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $29, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    andl %edi, %eax
+; NOBMI2-NEXT:    movl %r8d, %esi
+; NOBMI2-NEXT:    andl %eax, %esi
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    shrl $8, %esi
+; NOBMI2-NEXT:    orl %r8d, %esi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    shrl $8, %eax
+; NOBMI2-NEXT:    orl %edi, %eax
+; NOBMI2-NEXT:    notl %ecx
+; NOBMI2-NEXT:    andl %edx, %ecx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    leal (,%rcx,4), %edi
+; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $4, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $5, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $6, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $7, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $9, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $11, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $12, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $13, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $14, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shll $15, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $16, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $17, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $18, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $19, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $20, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $21, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $22, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $23, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $24, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $25, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $26, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $27, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $28, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $29, %edx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    xorl %edx, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    andl %esi, %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    xorl %eax, %esi
+; NOBMI2-NEXT:    shrl $16, %eax
+; NOBMI2-NEXT:    orl %esi, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 %mask)
+  ret i32 %res
+}
+
+define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
+; BMI2-LABEL: bdep_i32:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pdepl %esi, %edi, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_i32:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    pushq %rbp
+; NOBMI2-NEXT:    pushq %r14
+; NOBMI2-NEXT:    pushq %rbx
+; NOBMI2-NEXT:    movl %esi, %edx
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rdx,8), %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $5, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $7, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $12, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $15, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $16, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %r9d, %r10d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $17, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $18, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $19, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $20, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $21, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $22, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    xorl %r10d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $23, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $24, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $25, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $26, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $27, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $28, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $29, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    shll $31, %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    andl %esi, %ecx
+; NOBMI2-NEXT:    movl %esi, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shrl %r9d
+; NOBMI2-NEXT:    orl %r8d, %r9d
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    andl %eax, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    leal (,%rdx,4), %r8d
+; NOBMI2-NEXT:    leal (,%rdx,8), %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %eax, %r10d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $5, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    xorl %r10d, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $7, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $8, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $9, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $10, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %eax, %r10d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $12, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $13, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $14, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %r11d
+; NOBMI2-NEXT:    shll $15, %r11d
+; NOBMI2-NEXT:    xorl %r8d, %r11d
+; NOBMI2-NEXT:    xorl %r10d, %r11d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $16, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $17, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $18, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $19, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $20, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $21, %eax
+; NOBMI2-NEXT:    xorl %r10d, %eax
+; NOBMI2-NEXT:    xorl %r11d, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $22, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $23, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $24, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $25, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $26, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
+; NOBMI2-NEXT:    shll $27, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %edx, %r11d
+; NOBMI2-NEXT:    shll $28, %r11d
+; NOBMI2-NEXT:    xorl %r10d, %r11d
+; NOBMI2-NEXT:    xorl %eax, %r11d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $29, %eax
+; NOBMI2-NEXT:    movl %edx, %r8d
+; NOBMI2-NEXT:    shll $30, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    xorl %r11d, %r8d
+; NOBMI2-NEXT:    movl %r8d, %eax
+; NOBMI2-NEXT:    andl %r9d, %eax
+; NOBMI2-NEXT:    xorl %eax, %r9d
+; NOBMI2-NEXT:    movl %eax, %r10d
+; NOBMI2-NEXT:    shrl $2, %r10d
+; NOBMI2-NEXT:    orl %r9d, %r10d
+; NOBMI2-NEXT:    notl %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    leal (%r8,%r8), %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    leal (,%r8,4), %r9d
+; NOBMI2-NEXT:    leal (,%r8,8), %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    xorl %edx, %r11d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $4, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $5, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $6, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    xorl %r11d, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $7, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $8, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $10, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    xorl %edx, %r11d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $11, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $12, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $13, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $14, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %ebx
+; NOBMI2-NEXT:    shll $15, %ebx
+; NOBMI2-NEXT:    xorl %r9d, %ebx
+; NOBMI2-NEXT:    xorl %r11d, %ebx
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $16, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $17, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $18, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $19, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $20, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $21, %edx
+; NOBMI2-NEXT:    xorl %r11d, %edx
+; NOBMI2-NEXT:    xorl %ebx, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $22, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $23, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $24, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $25, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $26, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r8d, %r11d
+; NOBMI2-NEXT:    shll $27, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %ebx
+; NOBMI2-NEXT:    shll $28, %ebx
+; NOBMI2-NEXT:    xorl %r11d, %ebx
+; NOBMI2-NEXT:    xorl %edx, %ebx
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $29, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $30, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    xorl %ebx, %r9d
+; NOBMI2-NEXT:    movl %r9d, %edx
+; NOBMI2-NEXT:    andl %r10d, %edx
+; NOBMI2-NEXT:    xorl %edx, %r10d
+; NOBMI2-NEXT:    movl %edx, %r11d
+; NOBMI2-NEXT:    shrl $4, %r11d
+; NOBMI2-NEXT:    orl %r10d, %r11d
+; NOBMI2-NEXT:    notl %r9d
+; NOBMI2-NEXT:    andl %r8d, %r9d
+; NOBMI2-NEXT:    leal (%r9,%r9), %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    leal (,%r9,4), %r10d
+; NOBMI2-NEXT:    leal (,%r9,8), %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    xorl %r8d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $4, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $5, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    xorl %ebx, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $7, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $8, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $9, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $10, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    xorl %r8d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $11, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $12, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $14, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebp
+; NOBMI2-NEXT:    shll $15, %ebp
+; NOBMI2-NEXT:    xorl %r10d, %ebp
+; NOBMI2-NEXT:    xorl %ebx, %ebp
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $16, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $17, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $18, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $19, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $20, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $21, %r8d
+; NOBMI2-NEXT:    xorl %ebx, %r8d
+; NOBMI2-NEXT:    xorl %ebp, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $22, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $23, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $24, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $25, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $26, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $27, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %ebp
+; NOBMI2-NEXT:    shll $28, %ebp
+; NOBMI2-NEXT:    xorl %ebx, %ebp
+; NOBMI2-NEXT:    xorl %r8d, %ebp
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $29, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $30, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %ebp, %r10d
+; NOBMI2-NEXT:    movl %r10d, %r8d
+; NOBMI2-NEXT:    andl %r11d, %r8d
+; NOBMI2-NEXT:    xorl %r8d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %ebx
+; NOBMI2-NEXT:    shrl $8, %ebx
+; NOBMI2-NEXT:    orl %r11d, %ebx
+; NOBMI2-NEXT:    notl %r10d
+; NOBMI2-NEXT:    andl %r9d, %r10d
+; NOBMI2-NEXT:    leal (%r10,%r10), %r9d
+; NOBMI2-NEXT:    xorl %r10d, %r9d
+; NOBMI2-NEXT:    leal (,%r10,4), %r11d
+; NOBMI2-NEXT:    leal (,%r10,8), %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    xorl %r9d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $5, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $6, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    xorl %ebp, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $7, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $8, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $9, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $10, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    xorl %r9d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $12, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $13, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $14, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r14d
+; NOBMI2-NEXT:    shll $15, %r14d
+; NOBMI2-NEXT:    xorl %r11d, %r14d
+; NOBMI2-NEXT:    xorl %ebp, %r14d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $16, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $17, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $18, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $19, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $20, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $21, %r9d
+; NOBMI2-NEXT:    xorl %ebp, %r9d
+; NOBMI2-NEXT:    xorl %r14d, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $22, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $23, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $24, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $25, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $26, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $27, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $28, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $29, %r9d
+; NOBMI2-NEXT:    shll $30, %r10d
+; NOBMI2-NEXT:    xorl %r9d, %r10d
+; NOBMI2-NEXT:    xorl %r11d, %r10d
+; NOBMI2-NEXT:    movl %edi, %r9d
+; NOBMI2-NEXT:    shll $16, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    andl %ebx, %r9d
+; NOBMI2-NEXT:    andl %r10d, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    movl %r9d, %edi
+; NOBMI2-NEXT:    shll $8, %edi
+; NOBMI2-NEXT:    xorl %r9d, %edi
+; NOBMI2-NEXT:    andl %r8d, %edi
+; NOBMI2-NEXT:    xorl %r9d, %edi
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    shll $4, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    leal (,%r8,4), %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    andl %eax, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    andl %esi, %eax
+; NOBMI2-NEXT:    popq %rbx
+; NOBMI2-NEXT:    popq %r14
+; NOBMI2-NEXT:    popq %rbp
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+  ret i32 %res
+}
+
+define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
+; BMI2-LABEL: bext_i64:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pextq %rsi, %rdi, %rax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i64:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    andq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rsi, %rax
+; NOBMI2-NEXT:    notq %rax
+; NOBMI2-NEXT:    leaq (,%rax,4), %rdx
+; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
+; NOBMI2-NEXT:    xorq %rcx, %rdx
+; NOBMI2-NEXT:    leaq (,%rax,8), %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $4, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $5, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $6, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $7, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $9, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $11, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $12, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $13, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $14, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $15, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $16, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $18, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shlq $21, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $22, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $23, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $24, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $25, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $26, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $27, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $28, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $29, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $31, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $33, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shlq $36, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $37, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $38, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $39, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $40, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $41, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $42, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $43, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $44, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $45, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $46, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $48, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $50, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $52, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shlq $55, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $56, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $57, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $58, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $59, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $60, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $61, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $62, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    shlq $63, %rax
+; NOBMI2-NEXT:    xorq %r9, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    andq %rsi, %rdx
+; NOBMI2-NEXT:    movq %rdi, %r8
+; NOBMI2-NEXT:    andq %rdx, %r8
+; NOBMI2-NEXT:    xorq %r8, %rdi
+; NOBMI2-NEXT:    shrq %r8
+; NOBMI2-NEXT:    orq %rdi, %r8
+; NOBMI2-NEXT:    xorq %rdx, %rsi
+; NOBMI2-NEXT:    shrq %rdx
+; NOBMI2-NEXT:    orq %rsi, %rdx
+; NOBMI2-NEXT:    notq %rax
+; NOBMI2-NEXT:    andq %rcx, %rax
+; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
+; NOBMI2-NEXT:    xorq %rax, %rcx
+; NOBMI2-NEXT:    leaq (,%rax,4), %rsi
+; NOBMI2-NEXT:    leaq (,%rax,8), %rdi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $4, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $5, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $6, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $7, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $8, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $9, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $10, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $11, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $12, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $13, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $14, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $15, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $16, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $17, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $18, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $19, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $21, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $22, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $23, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $24, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $25, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $26, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $27, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $28, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $29, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $30, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $31, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $32, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $33, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $34, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $36, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $37, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $38, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $39, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $40, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $41, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $42, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $43, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $44, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $45, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $46, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $47, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $48, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $49, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $50, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $51, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $52, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $53, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $55, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $56, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $57, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $58, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $59, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $60, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $61, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $62, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rcx, %rsi
+; NOBMI2-NEXT:    andq %rdx, %rsi
+; NOBMI2-NEXT:    movq %r8, %rdi
+; NOBMI2-NEXT:    andq %rsi, %rdi
+; NOBMI2-NEXT:    xorq %rdi, %r8
+; NOBMI2-NEXT:    shrq $2, %rdi
+; NOBMI2-NEXT:    orq %r8, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdx
+; NOBMI2-NEXT:    shrq $2, %rsi
+; NOBMI2-NEXT:    orq %rdx, %rsi
+; NOBMI2-NEXT:    notq %rcx
+; NOBMI2-NEXT:    andq %rax, %rcx
+; NOBMI2-NEXT:    leaq (%rcx,%rcx), %rax
+; NOBMI2-NEXT:    xorq %rcx, %rax
+; NOBMI2-NEXT:    leaq (,%rcx,4), %rdx
+; NOBMI2-NEXT:    leaq (,%rcx,8), %r8
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $4, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $5, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $6, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $7, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $11, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $12, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $13, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $14, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $15, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $16, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $18, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $21, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $22, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $23, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $24, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $25, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $26, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $27, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $28, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $29, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $31, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $33, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $36, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $37, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $38, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $39, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $40, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $41, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $42, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $43, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $44, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $45, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $46, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $48, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $50, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $52, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $55, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $56, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $57, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $58, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $59, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $60, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $61, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $62, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    andq %rsi, %rdx
+; NOBMI2-NEXT:    movq %rdi, %r8
+; NOBMI2-NEXT:    andq %rdx, %r8
+; NOBMI2-NEXT:    xorq %r8, %rdi
+; NOBMI2-NEXT:    shrq $4, %r8
+; NOBMI2-NEXT:    orq %rdi, %r8
+; NOBMI2-NEXT:    xorq %rdx, %rsi
+; NOBMI2-NEXT:    shrq $4, %rdx
+; NOBMI2-NEXT:    orq %rsi, %rdx
+; NOBMI2-NEXT:    notq %rax
+; NOBMI2-NEXT:    andq %rcx, %rax
+; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
+; NOBMI2-NEXT:    xorq %rax, %rcx
+; NOBMI2-NEXT:    leaq (,%rax,4), %rsi
+; NOBMI2-NEXT:    leaq (,%rax,8), %rdi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $4, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $5, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $6, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $7, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $8, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $9, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $10, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $11, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $12, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $13, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $14, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $15, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $16, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $17, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $18, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $19, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $21, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $22, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $23, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $24, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $25, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $26, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $27, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $28, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $29, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $30, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $31, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $32, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $33, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $34, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $36, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $37, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $38, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $39, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $40, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $41, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $42, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $43, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $44, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $45, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $46, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $47, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $48, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $49, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $50, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $51, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $52, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $53, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $55, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $56, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $57, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $58, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $59, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $60, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $61, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $62, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rcx, %rsi
+; NOBMI2-NEXT:    andq %rdx, %rsi
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    andq %rsi, %r9
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    shrq $8, %r9
+; NOBMI2-NEXT:    orq %r8, %r9
+; NOBMI2-NEXT:    xorq %rsi, %rdx
+; NOBMI2-NEXT:    shrq $8, %rsi
+; NOBMI2-NEXT:    orq %rdx, %rsi
+; NOBMI2-NEXT:    notq %rcx
+; NOBMI2-NEXT:    andq %rax, %rcx
+; NOBMI2-NEXT:    leaq (%rcx,%rcx), %rax
+; NOBMI2-NEXT:    xorq %rcx, %rax
+; NOBMI2-NEXT:    leaq (,%rcx,4), %rdx
+; NOBMI2-NEXT:    leaq (,%rcx,8), %rdi
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $4, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $5, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $6, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $7, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $8, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $9, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $10, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $11, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $12, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $13, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $14, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $15, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $16, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $17, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $18, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $19, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $20, %r8
+; NOBMI2-NEXT:    xorq %rdi, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $21, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $22, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $23, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $24, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $25, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $26, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $27, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $28, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $29, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $30, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $31, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $32, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $33, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $34, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $35, %r8
+; NOBMI2-NEXT:    xorq %rdi, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $36, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $37, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $38, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $39, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $40, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $41, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $42, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $43, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $44, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $45, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $46, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $47, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $48, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $49, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $50, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $51, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $52, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $53, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $54, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $55, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $56, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $57, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $58, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $59, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $60, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $61, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $62, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    andq %rsi, %rax
+; NOBMI2-NEXT:    movq %r9, %rdi
+; NOBMI2-NEXT:    andq %rax, %rdi
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    shrq $16, %rdi
+; NOBMI2-NEXT:    orq %r9, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rsi
+; NOBMI2-NEXT:    shrq $16, %rax
+; NOBMI2-NEXT:    orq %rsi, %rax
+; NOBMI2-NEXT:    notq %rdx
+; NOBMI2-NEXT:    andq %rcx, %rdx
+; NOBMI2-NEXT:    leaq (%rdx,%rdx), %rcx
+; NOBMI2-NEXT:    xorq %rdx, %rcx
+; NOBMI2-NEXT:    leaq (,%rdx,4), %rsi
+; NOBMI2-NEXT:    leaq (,%rdx,8), %r8
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $4, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $5, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $6, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $7, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $9, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $11, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $12, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $13, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $14, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $15, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $16, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $18, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $21, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $22, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $23, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $24, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $25, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $26, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $27, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $28, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $29, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $31, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $33, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $36, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $37, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $38, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $39, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $40, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $41, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $42, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $43, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $44, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $45, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $46, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $48, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $50, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $52, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $55, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $56, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $57, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $58, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $59, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $60, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $61, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $62, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    shlq $63, %rdx
+; NOBMI2-NEXT:    xorq %rcx, %rdx
+; NOBMI2-NEXT:    xorq %rsi, %rdx
+; NOBMI2-NEXT:    andq %rdi, %rax
+; NOBMI2-NEXT:    andq %rdx, %rax
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    shrq $32, %rax
+; NOBMI2-NEXT:    orq %rdi, %rax
+; NOBMI2-NEXT:    retq
+  %res = call i64 @llvm.bext.i64(i64 %val, i64 %mask)
+  ret i64 %res
+}
+
+define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
+; BMI2-LABEL: bdep_i64:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pdepq %rsi, %rdi, %rax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_i64:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    pushq %r15
+; NOBMI2-NEXT:    pushq %r14
+; NOBMI2-NEXT:    pushq %r12
+; NOBMI2-NEXT:    pushq %rbx
+; NOBMI2-NEXT:    movq %rsi, %rdx
+; NOBMI2-NEXT:    notq %rdx
+; NOBMI2-NEXT:    leaq (,%rdx,4), %rcx
+; NOBMI2-NEXT:    leaq (%rdx,%rdx), %rax
+; NOBMI2-NEXT:    xorq %rax, %rcx
+; NOBMI2-NEXT:    leaq (,%rdx,8), %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $4, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $5, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $6, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $7, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $9, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $11, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $12, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $13, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $14, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $15, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $16, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $18, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $21, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $22, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $23, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $24, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $25, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $26, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $27, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $28, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $29, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $31, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $33, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $36, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $37, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $38, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $39, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $40, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $41, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $42, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $43, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $44, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $45, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $46, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $48, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $50, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $52, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $55, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $56, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $57, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $58, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $59, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $60, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $61, %rcx
+; NOBMI2-NEXT:    xorq %r9, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $62, %r9
+; NOBMI2-NEXT:    xorq %rcx, %r9
+; NOBMI2-NEXT:    shlq $63, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    andq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rsi, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shrq %r9
+; NOBMI2-NEXT:    orq %r8, %r9
+; NOBMI2-NEXT:    notq %rdx
+; NOBMI2-NEXT:    andq %rax, %rdx
+; NOBMI2-NEXT:    leaq (%rdx,%rdx), %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    leaq (,%rdx,4), %r8
+; NOBMI2-NEXT:    leaq (,%rdx,8), %r10
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $4, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $5, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $6, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $7, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $8, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $9, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $10, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $11, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $12, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $13, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $14, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $15, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $16, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $17, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $18, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $19, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r11
+; NOBMI2-NEXT:    shlq $20, %r11
+; NOBMI2-NEXT:    xorq %r10, %r11
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $21, %r8
+; NOBMI2-NEXT:    xorq %r11, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $22, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $23, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $24, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $25, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $26, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $27, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $28, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $29, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $30, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $31, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $32, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $33, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $34, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r11
+; NOBMI2-NEXT:    shlq $35, %r11
+; NOBMI2-NEXT:    xorq %r10, %r11
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $36, %r8
+; NOBMI2-NEXT:    xorq %r11, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $37, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $38, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $39, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $40, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $41, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $42, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $43, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $44, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $45, %rax
+; NOBMI2-NEXT:    xorq %r10, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $46, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $47, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $48, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $49, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $50, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $51, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $52, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $53, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $54, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %rdx, %r10
+; NOBMI2-NEXT:    shlq $55, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    xorq %rax, %r10
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $56, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $57, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $58, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $59, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    shlq $60, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rdx, %r11
+; NOBMI2-NEXT:    shlq $61, %r11
+; NOBMI2-NEXT:    xorq %rax, %r11
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $62, %r8
+; NOBMI2-NEXT:    xorq %r11, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r8, %rax
+; NOBMI2-NEXT:    andq %r9, %rax
+; NOBMI2-NEXT:    xorq %rax, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shrq $2, %r10
+; NOBMI2-NEXT:    orq %r9, %r10
+; NOBMI2-NEXT:    notq %r8
+; NOBMI2-NEXT:    andq %rdx, %r8
+; NOBMI2-NEXT:    leaq (%r8,%r8), %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    leaq (,%r8,4), %r9
+; NOBMI2-NEXT:    leaq (,%r8,8), %r11
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $4, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $5, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $6, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $7, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $8, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $9, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $10, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $12, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $13, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $14, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $15, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $16, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $17, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $18, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $19, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %rbx
+; NOBMI2-NEXT:    shlq $20, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $21, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $22, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $23, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $24, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $25, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $26, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $27, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $28, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $29, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $30, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $31, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $32, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $33, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $34, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %rbx
+; NOBMI2-NEXT:    shlq $35, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $36, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $37, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $38, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $39, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $40, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $41, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $42, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $43, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $44, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $45, %rdx
+; NOBMI2-NEXT:    xorq %r11, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $46, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $47, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $48, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $49, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $50, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $51, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $52, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $53, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r8, %r11
+; NOBMI2-NEXT:    shlq $55, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    xorq %rdx, %r11
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $56, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $57, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $58, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $59, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %r8, %rdx
+; NOBMI2-NEXT:    shlq $60, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %r8, %rbx
+; NOBMI2-NEXT:    shlq $61, %rbx
+; NOBMI2-NEXT:    xorq %rdx, %rbx
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    shlq $62, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r9, %rdx
+; NOBMI2-NEXT:    andq %r10, %rdx
+; NOBMI2-NEXT:    xorq %rdx, %r10
+; NOBMI2-NEXT:    movq %rdx, %r11
+; NOBMI2-NEXT:    shrq $4, %r11
+; NOBMI2-NEXT:    orq %r10, %r11
+; NOBMI2-NEXT:    notq %r9
+; NOBMI2-NEXT:    andq %r8, %r9
+; NOBMI2-NEXT:    leaq (%r9,%r9), %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    leaq (,%r9,4), %r10
+; NOBMI2-NEXT:    leaq (,%r9,8), %rbx
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $4, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $5, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $6, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $7, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $8, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $9, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $10, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $11, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $12, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $13, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $14, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $15, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $16, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $17, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $18, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $19, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r14
+; NOBMI2-NEXT:    shlq $20, %r14
+; NOBMI2-NEXT:    xorq %rbx, %r14
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $21, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $22, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $23, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $24, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $25, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $26, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $27, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $28, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $29, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $30, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $31, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $32, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $33, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $34, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r14
+; NOBMI2-NEXT:    shlq $35, %r14
+; NOBMI2-NEXT:    xorq %rbx, %r14
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $36, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $37, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $38, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $39, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $40, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $41, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $42, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $43, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $44, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $45, %r8
+; NOBMI2-NEXT:    xorq %rbx, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $46, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $47, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $48, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $49, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $50, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $51, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $52, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $53, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $54, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shlq $55, %rbx
+; NOBMI2-NEXT:    xorq %r10, %rbx
+; NOBMI2-NEXT:    xorq %r8, %rbx
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $56, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $57, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $58, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $59, %r10
+; NOBMI2-NEXT:    xorq %r8, %r10
+; NOBMI2-NEXT:    movq %r9, %r8
+; NOBMI2-NEXT:    shlq $60, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    movq %r9, %r14
+; NOBMI2-NEXT:    shlq $61, %r14
+; NOBMI2-NEXT:    xorq %r8, %r14
+; NOBMI2-NEXT:    movq %r9, %r10
+; NOBMI2-NEXT:    shlq $62, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    xorq %rbx, %r10
+; NOBMI2-NEXT:    movq %r10, %r8
+; NOBMI2-NEXT:    andq %r11, %r8
+; NOBMI2-NEXT:    xorq %r8, %r11
+; NOBMI2-NEXT:    movq %r8, %r14
+; NOBMI2-NEXT:    shrq $8, %r14
+; NOBMI2-NEXT:    orq %r11, %r14
+; NOBMI2-NEXT:    notq %r10
+; NOBMI2-NEXT:    andq %r9, %r10
+; NOBMI2-NEXT:    leaq (%r10,%r10), %r9
+; NOBMI2-NEXT:    xorq %r10, %r9
+; NOBMI2-NEXT:    leaq (,%r10,4), %r11
+; NOBMI2-NEXT:    leaq (,%r10,8), %rbx
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $4, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $5, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $6, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $7, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $8, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $9, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $10, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $11, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $12, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $13, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $14, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $15, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $16, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $17, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $18, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $19, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r15
+; NOBMI2-NEXT:    shlq $20, %r15
+; NOBMI2-NEXT:    xorq %rbx, %r15
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $21, %r11
+; NOBMI2-NEXT:    xorq %r15, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $22, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $23, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $24, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $25, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $26, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $27, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $28, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $29, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $30, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $31, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $32, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $33, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $34, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r15
+; NOBMI2-NEXT:    shlq $35, %r15
+; NOBMI2-NEXT:    xorq %rbx, %r15
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $36, %r11
+; NOBMI2-NEXT:    xorq %r15, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $37, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $38, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $39, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $40, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $41, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $42, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $43, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $44, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $45, %r9
+; NOBMI2-NEXT:    xorq %rbx, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $46, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $47, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $48, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $49, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $50, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $51, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $52, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $53, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $54, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r10, %rbx
+; NOBMI2-NEXT:    shlq $55, %rbx
+; NOBMI2-NEXT:    xorq %r11, %rbx
+; NOBMI2-NEXT:    xorq %r9, %rbx
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $56, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $57, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $58, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $59, %r11
+; NOBMI2-NEXT:    xorq %r9, %r11
+; NOBMI2-NEXT:    movq %r10, %r9
+; NOBMI2-NEXT:    shlq $60, %r9
+; NOBMI2-NEXT:    xorq %r11, %r9
+; NOBMI2-NEXT:    movq %r10, %r15
+; NOBMI2-NEXT:    shlq $61, %r15
+; NOBMI2-NEXT:    xorq %r9, %r15
+; NOBMI2-NEXT:    movq %r10, %r11
+; NOBMI2-NEXT:    shlq $62, %r11
+; NOBMI2-NEXT:    xorq %r15, %r11
+; NOBMI2-NEXT:    xorq %rbx, %r11
+; NOBMI2-NEXT:    movq %r11, %r9
+; NOBMI2-NEXT:    andq %r14, %r9
+; NOBMI2-NEXT:    xorq %r9, %r14
+; NOBMI2-NEXT:    movq %r9, %rbx
+; NOBMI2-NEXT:    shrq $16, %rbx
+; NOBMI2-NEXT:    orq %r14, %rbx
+; NOBMI2-NEXT:    notq %r11
+; NOBMI2-NEXT:    andq %r10, %r11
+; NOBMI2-NEXT:    leaq (%r11,%r11), %r10
+; NOBMI2-NEXT:    xorq %r11, %r10
+; NOBMI2-NEXT:    leaq (,%r11,4), %r14
+; NOBMI2-NEXT:    leaq (,%r11,8), %r15
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    xorq %r10, %r14
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $4, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $5, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $6, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $7, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $8, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $9, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $10, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $11, %r10
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $12, %r14
+; NOBMI2-NEXT:    xorq %r10, %r14
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $13, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $14, %r14
+; NOBMI2-NEXT:    xorq %r10, %r14
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $15, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $16, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $17, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $18, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $19, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r12
+; NOBMI2-NEXT:    shlq $20, %r12
+; NOBMI2-NEXT:    xorq %r15, %r12
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $21, %r14
+; NOBMI2-NEXT:    xorq %r12, %r14
+; NOBMI2-NEXT:    xorq %r10, %r14
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $22, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $23, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $24, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $25, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $26, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $27, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $28, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $29, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $30, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $31, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $32, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $33, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $34, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r12
+; NOBMI2-NEXT:    shlq $35, %r12
+; NOBMI2-NEXT:    xorq %r15, %r12
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $36, %r14
+; NOBMI2-NEXT:    xorq %r12, %r14
+; NOBMI2-NEXT:    xorq %r10, %r14
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $37, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $38, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $39, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $40, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $41, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $42, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $43, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $44, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $45, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    xorq %r14, %r10
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $46, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $47, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $48, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $49, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $50, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $51, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $52, %r14
+; NOBMI2-NEXT:    xorq %r15, %r14
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $53, %r15
+; NOBMI2-NEXT:    xorq %r14, %r15
+; NOBMI2-NEXT:    movq %r11, %r12
+; NOBMI2-NEXT:    shlq $54, %r12
+; NOBMI2-NEXT:    xorq %r15, %r12
+; NOBMI2-NEXT:    movq %r11, %r14
+; NOBMI2-NEXT:    shlq $55, %r14
+; NOBMI2-NEXT:    xorq %r12, %r14
+; NOBMI2-NEXT:    xorq %r10, %r14
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $56, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $57, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $58, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $59, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $60, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    movq %r11, %r15
+; NOBMI2-NEXT:    shlq $61, %r15
+; NOBMI2-NEXT:    xorq %r10, %r15
+; NOBMI2-NEXT:    movq %r11, %r10
+; NOBMI2-NEXT:    shlq $62, %r10
+; NOBMI2-NEXT:    xorq %r15, %r10
+; NOBMI2-NEXT:    shlq $63, %r11
+; NOBMI2-NEXT:    xorq %r10, %r11
+; NOBMI2-NEXT:    xorq %r14, %r11
+; NOBMI2-NEXT:    movq %rdi, %r10
+; NOBMI2-NEXT:    shlq $32, %r10
+; NOBMI2-NEXT:    xorq %rdi, %r10
+; NOBMI2-NEXT:    andq %rbx, %r10
+; NOBMI2-NEXT:    andq %r11, %r10
+; NOBMI2-NEXT:    xorq %rdi, %r10
+; NOBMI2-NEXT:    movq %r10, %rdi
+; NOBMI2-NEXT:    shlq $16, %rdi
+; NOBMI2-NEXT:    xorq %r10, %rdi
+; NOBMI2-NEXT:    andq %r9, %rdi
+; NOBMI2-NEXT:    xorq %r10, %rdi
+; NOBMI2-NEXT:    movq %rdi, %r9
+; NOBMI2-NEXT:    shlq $8, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    andq %r8, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %r9, %rdi
+; NOBMI2-NEXT:    shlq $4, %rdi
+; NOBMI2-NEXT:    xorq %r9, %rdi
+; NOBMI2-NEXT:    andq %rdx, %rdi
+; NOBMI2-NEXT:    xorq %r9, %rdi
+; NOBMI2-NEXT:    leaq (,%rdi,4), %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    andq %rax, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    leaq (%rdx,%rdx), %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    andq %rcx, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    andq %rsi, %rax
+; NOBMI2-NEXT:    popq %rbx
+; NOBMI2-NEXT:    popq %r12
+; NOBMI2-NEXT:    popq %r14
+; NOBMI2-NEXT:    popq %r15
+; NOBMI2-NEXT:    retq
+  %res = call i64 @llvm.bdep.i64(i64 %val, i64 %mask)
+  ret i64 %res
+}
+
+define i32 @bext_mask_zero(i32 %val) nounwind {
+; BMI2-LABEL: bext_mask_zero:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    xorl %eax, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_mask_zero:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    xorl %eax, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 0)
+  ret i32 %res
+}
+
+define i32 @bext_mask_allones(i32 %val) nounwind {
+; BMI2-LABEL: bext_mask_allones:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movl %edi, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_mask_allones:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl %edi, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 -1)
+  ret i32 %res
+}
+
+define i32 @bdep_mask_zero(i32 %val) nounwind {
+; BMI2-LABEL: bdep_mask_zero:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    xorl %eax, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_mask_zero:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    xorl %eax, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bdep.i32(i32 %val, i32 0)
+  ret i32 %res
+}
+
+define i32 @bdep_mask_allones(i32 %val) nounwind {
+; BMI2-LABEL: bdep_mask_allones:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movl %edi, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_mask_allones:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl %edi, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bdep.i32(i32 %val, i32 -1)
+  ret i32 %res
+}
+
+define i32 @bext_const_fold() nounwind {
+; BMI2-LABEL: bext_const_fold:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movl $10, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_const_fold:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl $10, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 170, i32 204)
+  ret i32 %res
+}
+
+define i32 @bdep_const_fold() nounwind {
+; BMI2-LABEL: bdep_const_fold:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movl $136, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bdep_const_fold:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl $136, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bdep.i32(i32 10, i32 204)
+  ret i32 %res
+}
+
+declare i8 @llvm.bext.i8(i8, i8)
+declare i16 @llvm.bext.i16(i16, i16)
+declare i32 @llvm.bext.i32(i32, i32)
+declare i64 @llvm.bext.i64(i64, i64)
+declare i8 @llvm.bdep.i8(i8, i8)
+declare i16 @llvm.bdep.i16(i16, i16)
+declare i32 @llvm.bdep.i32(i32, i32)
+declare i64 @llvm.bdep.i64(i64, i64)
diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp
index 0303b2f121c3b..a314a8b40fbe8 100644
--- a/llvm/unittests/Support/KnownBitsTest.cpp
+++ b/llvm/unittests/Support/KnownBitsTest.cpp
@@ -635,6 +635,8 @@ TEST(KnownBitsTest, BinaryExhaustive) {
   testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS);
 
   testBinaryOpExhaustive("clmul", KnownBits::clmul, APIntOps::clmul);
+  testBinaryOpExhaustive("bext", KnownBits::bext, APIntOps::compressBits);
+  testBinaryOpExhaustive("bdep", KnownBits::bdep, APIntOps::expandBits);
 }
 
 TEST(KnownBitsTest, UnaryExhaustive) {

>From bdc9f8774df5eda1150cdf8674e95a1271387282 Mon Sep 17 00:00:00 2001
From: Eisenwave <me at eisenwave.net>
Date: Sat, 30 May 2026 17:39:28 +0200
Subject: [PATCH 2/6] Legalize BEXT/BDEP on x86 directly, revert KnownBits
 changes, split up tests

---
 llvm/include/llvm/Support/KnownBits.h         |    6 -
 .../include/llvm/Target/TargetSelectionDAG.td |    2 +
 llvm/lib/Analysis/ValueTracking.cpp           |   12 -
 .../lib/CodeGen/SelectionDAG/SelectionDAG.cpp |   12 -
 .../CodeGen/SelectionDAG/TargetLowering.cpp   |    8 +-
 llvm/lib/Support/KnownBits.cpp                |   65 -
 llvm/lib/Target/X86/X86ISelLowering.cpp       |   16 +-
 llvm/lib/Target/X86/X86InstrMisc.td           |   39 +
 .../ValueTracking/knownbits-bextbdep.ll       |   96 -
 llvm/test/CodeGen/AArch64/bdep.ll             | 2001 +++++++++++++
 .../CodeGen/AArch64/{bext-bdep.ll => bext.ll} | 2035 +------------
 .../CodeGen/X86/{bext-bdep.ll => bdep.ll}     | 2638 ++---------------
 llvm/test/CodeGen/X86/bext.ll                 | 2050 +++++++++++++
 llvm/unittests/Support/KnownBitsTest.cpp      |    2 -
 14 files changed, 4403 insertions(+), 4579 deletions(-)
 delete mode 100644 llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll
 create mode 100644 llvm/test/CodeGen/AArch64/bdep.ll
 rename llvm/test/CodeGen/AArch64/{bext-bdep.ll => bext.ll} (50%)
 rename llvm/test/CodeGen/X86/{bext-bdep.ll => bdep.ll} (50%)
 create mode 100644 llvm/test/CodeGen/X86/bext.ll

diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h
index 09fea9f1085ec..e47383dc6b2d1 100644
--- a/llvm/include/llvm/Support/KnownBits.h
+++ b/llvm/include/llvm/Support/KnownBits.h
@@ -479,12 +479,6 @@ struct KnownBits {
   /// Compute known bits for clmul(LHS, RHS).
   LLVM_ABI static KnownBits clmul(const KnownBits &LHS, const KnownBits &RHS);
 
-  /// Compute known bits for bext(LHS, RHS).
-  LLVM_ABI static KnownBits bext(const KnownBits &LHS, const KnownBits &RHS);
-
-  /// Compute known bits for bdep(LHS, RHS).
-  LLVM_ABI static KnownBits bdep(const KnownBits &LHS, const KnownBits &RHS);
-
   /// Determine if these known bits always give the same ICMP_EQ result.
   LLVM_ABI static std::optional<bool> eq(const KnownBits &LHS,
                                          const KnownBits &RHS);
diff --git a/llvm/include/llvm/Target/TargetSelectionDAG.td b/llvm/include/llvm/Target/TargetSelectionDAG.td
index 52248b9da85fe..70cbf13fcb237 100644
--- a/llvm/include/llvm/Target/TargetSelectionDAG.td
+++ b/llvm/include/llvm/Target/TargetSelectionDAG.td
@@ -480,6 +480,8 @@ def clmul      : SDNode<"ISD::CLMUL"     , SDTIntBinOp,
                         [SDNPCommutative, SDNPAssociative]>;
 def clmulr     : SDNode<"ISD::CLMULR"    , SDTIntBinOp, [SDNPCommutative]>;
 def clmulh     : SDNode<"ISD::CLMULH"    , SDTIntBinOp, [SDNPCommutative]>;
+def bext       : SDNode<"ISD::BEXT"      , SDTIntBinOp>;
+def bdep       : SDNode<"ISD::BDEP"      , SDTIntBinOp>;
 def and        : SDNode<"ISD::AND"       , SDTIntBinOp,
                         [SDNPCommutative, SDNPAssociative]>;
 def or         : SDNode<"ISD::OR"        , SDTIntBinOp,
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 5aed74d8914d0..3be0db5ad9c7e 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -2091,18 +2091,6 @@ static void computeKnownBitsFromOperator(const Operator *I,
         computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
         Known = KnownBits::clmul(Known, Known2);
         break;
-      case Intrinsic::bext: {
-        computeKnownBits(I->getOperand(0), DemandedElts, Known, Q, Depth + 1);
-        computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
-        Known = KnownBits::bext(Known, Known2);
-        break;
-      }
-      case Intrinsic::bdep: {
-        computeKnownBits(I->getOperand(0), DemandedElts, Known, Q, Depth + 1);
-        computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
-        Known = KnownBits::bdep(Known, Known2);
-        break;
-      }
       case Intrinsic::uadd_sat:
         computeKnownBits(I->getOperand(0), DemandedElts, Known, Q, Depth + 1);
         computeKnownBits(I->getOperand(1), DemandedElts, Known2, Q, Depth + 1);
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index c644206d6232c..17f78dc0e0664 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -3958,18 +3958,6 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
     Known = KnownBits::clmul(Known, Known2);
     break;
   }
-  case ISD::BEXT: {
-    Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
-    Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
-    Known = KnownBits::bext(Known, Known2);
-    break;
-  }
-  case ISD::BDEP: {
-    Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
-    Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
-    Known = KnownBits::bdep(Known, Known2);
-    break;
-  }
   case ISD::MGATHER:
   case ISD::MLOAD: {
     ISD::LoadExtType ETy =
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index bcccb2e262c71..7af937dfac001 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -8979,8 +8979,8 @@ SDValue TargetLowering::expandBEXT(SDNode *Node, SelectionDAG &DAG) const {
   // shift all such bits in parallel using a mask, and double the shift amount.
   for (unsigned I = 1; I < BW; I <<= 1) {
     // This expands the "parallel prefix" operation to clmul(Mk, ~0).
-    SDValue Mp = DAG.getNode(ISD::CLMUL, DL, VT, Mk,
-                             DAG.getAllOnesConstant(DL, VT));
+    SDValue Mp =
+        DAG.getNode(ISD::CLMUL, DL, VT, Mk, DAG.getAllOnesConstant(DL, VT));
     SDValue Mv = DAG.getNode(ISD::AND, DL, VT, Mp, M);
     SDValue ShiftI = DAG.getShiftAmountConstant(I, VT, DL);
     M = DAG.getNode(ISD::OR, DL, VT, DAG.getNode(ISD::XOR, DL, VT, M, Mv),
@@ -9012,8 +9012,8 @@ SDValue TargetLowering::expandBDEP(SDNode *Node, SelectionDAG &DAG) const {
   for (unsigned S = 0; S < LogBW; ++S) {
     unsigned ShiftS = 1u << S;
     // This expands the "parallel prefix" operation to clmul(Mk, ~0).
-    SDValue Mp = DAG.getNode(ISD::CLMUL, DL, VT, Mk,
-                             DAG.getAllOnesConstant(DL, VT));
+    SDValue Mp =
+        DAG.getNode(ISD::CLMUL, DL, VT, Mk, DAG.getAllOnesConstant(DL, VT));
     MvArray[S] = DAG.getNode(ISD::AND, DL, VT, Mp, Mc);
     SDValue ShiftSv = DAG.getShiftAmountConstant(ShiftS, VT, DL);
     Mc = DAG.getNode(ISD::OR, DL, VT,
diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp
index 27a379fb49301..b1b985b80cffd 100644
--- a/llvm/lib/Support/KnownBits.cpp
+++ b/llvm/lib/Support/KnownBits.cpp
@@ -642,71 +642,6 @@ KnownBits KnownBits::clmul(const KnownBits &LHS, const KnownBits &RHS) {
   return Res;
 }
 
-KnownBits KnownBits::bext(const KnownBits &LHS, const KnownBits &RHS) {
-  // For each source position I where mask[I] could be set, the output index j
-  // lies in [M0, M1] where these track the range of possible set-bit counts
-  // seen so far in mask.
-  //
-  // The output bit j
-  // - can be 0 if any candidate LHS[I] could be zero or popcount(mask) could
-  //   be <= j, and
-  // - can be 1 only if some candidate LHS[I] could be one and popcount(mask)
-  //   is known > j.
-  unsigned BitWidth = LHS.getBitWidth();
-  KnownBits Res(BitWidth);
-  Res.setAllConflict();
-
-  unsigned M0 = 0, M1 = 0;
-  for (unsigned I = 0; I < BitWidth; ++I) {
-    if (!RHS.Zero[I]) {
-      APInt Range = APInt::getBitsSet(BitWidth, M0, M1 + 1);
-      if (!LHS.Zero[I])
-        Res.Zero &= ~Range; // some position in Range could be 1
-      if (!LHS.One[I])
-        Res.One &= ~Range; // some position in Range could be 0
-    }
-    if (RHS.One[I])
-      ++M0, ++M1;
-    else if (!RHS.Zero[I])
-      ++M1;
-  }
-
-  // Output positions j >= M0 may have no source (popcount(mask) <= j), in
-  // which case they default to zero.
-  Res.One &= APInt::getLowBitsSet(BitWidth, M0);
-  return Res;
-}
-
-KnownBits KnownBits::bdep(const KnownBits &LHS, const KnownBits &RHS) {
-  // For each output position I where mask[I] could be set, the source index j
-  // lies in [M0, M1] where these track possible counts of set mask bits < I.
-  //
-  // The output bit
-  // - can be 0 if mask[I] or any candidate LHS[j] could be zero, and
-  // - can be 1 only if both mask[I] and some candidate LHS[j] could be one.
-  unsigned BitWidth = LHS.getBitWidth();
-  KnownBits Res(BitWidth);
-  Res.setAllConflict();
-
-  unsigned M0 = 0, M1 = 0;
-  for (unsigned I = 0; I < BitWidth; ++I) {
-    if (!RHS.One[I])
-      Res.One.clearBit(I); // mask[I] could be 0 -> output[I] could be 0
-    if (!RHS.Zero[I]) {
-      APInt Range = APInt::getBitsSet(BitWidth, M0, M1 + 1);
-      if (!Range.isSubsetOf(LHS.One))
-        Res.One.clearBit(I); // some candidate could be 0
-      if (!Range.isSubsetOf(LHS.Zero))
-        Res.Zero.clearBit(I); // some candidate could be 1
-    }
-    if (RHS.One[I])
-      ++M0, ++M1;
-    else if (!RHS.Zero[I])
-      ++M1;
-  }
-  return Res;
-}
-
 std::optional<bool> KnownBits::eq(const KnownBits &LHS, const KnownBits &RHS) {
   if (LHS.isConstant() && RHS.isConstant())
     return LHS.getConstant() == RHS.getConstant();
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 360db807a95a4..94296801c8a8e 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -483,9 +483,9 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
   if (Subtarget.hasBMI2()) {
     setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i8, Promote);
     setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i16, Promote);
-    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i32, Custom);
+    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i32, Legal);
     if (Subtarget.is64Bit())
-      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i64, Custom);
+      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i64, Legal);
   }
 
   setOperationAction(ISD::READCYCLECOUNTER , MVT::i64  , Custom);
@@ -33841,16 +33841,6 @@ static SDValue LowerCLMUL(SDValue Op, const X86Subtarget &Subtarget,
   return Result;
 }
 
-static SDValue LowerBEXT(SDValue Op, SelectionDAG &DAG) {
-  return DAG.getNode(X86ISD::PEXT, SDLoc(Op), Op.getValueType(),
-                     Op.getOperand(0), Op.getOperand(1));
-}
-
-static SDValue LowerBDEP(SDValue Op, SelectionDAG &DAG) {
-  return DAG.getNode(X86ISD::PDEP, SDLoc(Op), Op.getValueType(),
-                     Op.getOperand(0), Op.getOperand(1));
-}
-
 static SDValue LowerPARITY(SDValue Op, const X86Subtarget &Subtarget,
                            SelectionDAG &DAG) {
   SDLoc DL(Op);
@@ -34583,8 +34573,6 @@ SDValue X86TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
   case ISD::BITREVERSE:         return LowerBITREVERSE(Op, Subtarget, DAG);
   case ISD::CLMUL:
   case ISD::CLMULH:             return LowerCLMUL(Op, Subtarget, DAG);
-  case ISD::BEXT:               return LowerBEXT(Op, DAG);
-  case ISD::BDEP:               return LowerBDEP(Op, DAG);
   case ISD::PARITY:             return LowerPARITY(Op, Subtarget, DAG);
   case ISD::BUILD_VECTOR:       return LowerBUILD_VECTOR(Op, DAG);
   case ISD::CONCAT_VECTORS:     return LowerCONCAT_VECTORS(Op, Subtarget, DAG);
diff --git a/llvm/lib/Target/X86/X86InstrMisc.td b/llvm/lib/Target/X86/X86InstrMisc.td
index fc6be26338f3d..96c3dbb74b839 100644
--- a/llvm/lib/Target/X86/X86InstrMisc.td
+++ b/llvm/lib/Target/X86/X86InstrMisc.td
@@ -1404,6 +1404,45 @@ let Predicates = [HasBMI2, HasEGPR] in {
   defm PEXT64 : PdepPext<"pext", Xi64, X86pext, "_EVEX">, XS, REX_W, EVEX;
 }
 
+// ISD::BEXT / ISD::BDEP are legal on BMI2 and select directly to PEXT / PDEP.
+let Predicates = [HasBMI2, NoEGPR] in {
+  def : Pat<(i32 (bext GR32:$src, GR32:$mask)),
+            (PEXT32rr GR32:$src, GR32:$mask)>;
+  def : Pat<(i32 (bext GR32:$src, (loadi32 addr:$mask))),
+            (PEXT32rm GR32:$src, i32mem:$mask)>;
+  def : Pat<(i64 (bext GR64:$src, GR64:$mask)),
+            (PEXT64rr GR64:$src, GR64:$mask)>;
+  def : Pat<(i64 (bext GR64:$src, (loadi64 addr:$mask))),
+            (PEXT64rm GR64:$src, i64mem:$mask)>;
+  def : Pat<(i32 (bdep GR32:$src, GR32:$mask)),
+            (PDEP32rr GR32:$src, GR32:$mask)>;
+  def : Pat<(i32 (bdep GR32:$src, (loadi32 addr:$mask))),
+            (PDEP32rm GR32:$src, i32mem:$mask)>;
+  def : Pat<(i64 (bdep GR64:$src, GR64:$mask)),
+            (PDEP64rr GR64:$src, GR64:$mask)>;
+  def : Pat<(i64 (bdep GR64:$src, (loadi64 addr:$mask))),
+            (PDEP64rm GR64:$src, i64mem:$mask)>;
+}
+
+let Predicates = [HasBMI2, HasEGPR] in {
+  def : Pat<(i32 (bext GR32:$src, GR32:$mask)),
+            (PEXT32rr_EVEX GR32:$src, GR32:$mask)>;
+  def : Pat<(i32 (bext GR32:$src, (loadi32 addr:$mask))),
+            (PEXT32rm_EVEX GR32:$src, i32mem:$mask)>;
+  def : Pat<(i64 (bext GR64:$src, GR64:$mask)),
+            (PEXT64rr_EVEX GR64:$src, GR64:$mask)>;
+  def : Pat<(i64 (bext GR64:$src, (loadi64 addr:$mask))),
+            (PEXT64rm_EVEX GR64:$src, i64mem:$mask)>;
+  def : Pat<(i32 (bdep GR32:$src, GR32:$mask)),
+            (PDEP32rr_EVEX GR32:$src, GR32:$mask)>;
+  def : Pat<(i32 (bdep GR32:$src, (loadi32 addr:$mask))),
+            (PDEP32rm_EVEX GR32:$src, i32mem:$mask)>;
+  def : Pat<(i64 (bdep GR64:$src, GR64:$mask)),
+            (PDEP64rr_EVEX GR64:$src, GR64:$mask)>;
+  def : Pat<(i64 (bdep GR64:$src, (loadi64 addr:$mask))),
+            (PDEP64rm_EVEX GR64:$src, i64mem:$mask)>;
+}
+
 //===----------------------------------------------------------------------===//
 // Lightweight Profiling Instructions
 
diff --git a/llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll b/llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll
deleted file mode 100644
index 835ddd360f443..0000000000000
--- a/llvm/test/Analysis/ValueTracking/knownbits-bextbdep.ll
+++ /dev/null
@@ -1,96 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -passes=instcombine -S < %s | FileCheck %s
-
-; bext(x, 0b00001111) produces a 4-bit result; bit 4 and above are always zero.
-define i1 @bext_high_bits_zero(i8 %x) nounwind {
-; CHECK-LABEL: @bext_high_bits_zero(
-; CHECK-NEXT:    ret i1 true
-;
-  %bext = call i8 @llvm.bext.i8(i8 %x, i8 15)
-  %and = and i8 %bext, 240
-  %r = icmp eq i8 %and, 0
-  ret i1 %r
-}
-
-; bext(x, 0b11001100) can produce up to 4 bits; bits 4..7 are zero.
-define i1 @bext_sparse_mask_high_zero(i8 %x) nounwind {
-; CHECK-LABEL: @bext_sparse_mask_high_zero(
-; CHECK-NEXT:    ret i1 true
-;
-  %bext = call i8 @llvm.bext.i8(i8 %x, i8 204)
-  %and = and i8 %bext, 240
-  %r = icmp eq i8 %and, 0
-  ret i1 %r
-}
-
-; bext(x, 0) -> all bits zero: the AND with any mask is always zero.
-define i1 @bext_zero_mask_known_zero(i8 %x) nounwind {
-; CHECK-LABEL: @bext_zero_mask_known_zero(
-; CHECK-NEXT:    ret i1 true
-;
-  %bext = call i8 @llvm.bext.i8(i8 %x, i8 0)
-  %r = icmp eq i8 %bext, 0
-  ret i1 %r
-}
-
-; Negative: bext(x, 0b11001100) can have bits 0-3 set; can't prove bit 0 is zero.
-define i1 @bext_low_bits_not_known(i8 %x) nounwind {
-; CHECK-LABEL: @bext_low_bits_not_known(
-; CHECK-NEXT:    [[BEXT:%.*]] = call i8 @llvm.bext.i8(i8 [[X:%.*]], i8 -52)
-; CHECK-NEXT:    [[AND:%.*]] = and i8 [[BEXT]], 1
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[AND]], 0
-; CHECK-NEXT:    ret i1 [[R]]
-;
-  %bext = call i8 @llvm.bext.i8(i8 %x, i8 204)
-  %and = and i8 %bext, 1
-  %r = icmp eq i8 %and, 0
-  ret i1 %r
-}
-
-; bdep(x, 0b11110000): bits 0..3 of result are always zero.
-define i1 @bdep_low_bits_zero(i8 %x) nounwind {
-; CHECK-LABEL: @bdep_low_bits_zero(
-; CHECK-NEXT:    ret i1 true
-;
-  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 240)
-  %and = and i8 %bdep, 15
-  %r = icmp eq i8 %and, 0
-  ret i1 %r
-}
-
-; bdep(x, 0b00001111): bits 4..7 of result are always zero.
-define i1 @bdep_high_bits_zero(i8 %x) nounwind {
-; CHECK-LABEL: @bdep_high_bits_zero(
-; CHECK-NEXT:    ret i1 true
-;
-  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 15)
-  %and = and i8 %bdep, 240
-  %r = icmp eq i8 %and, 0
-  ret i1 %r
-}
-
-; bdep(x, 0) -> all bits zero.
-define i1 @bdep_zero_mask_known_zero(i8 %x) nounwind {
-; CHECK-LABEL: @bdep_zero_mask_known_zero(
-; CHECK-NEXT:    ret i1 true
-;
-  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 0)
-  %r = icmp eq i8 %bdep, 0
-  ret i1 %r
-}
-
-; Negative: bdep(x, 0b11001100) can have bits 2,3,6,7 set.
-define i1 @bdep_mask_bits_not_known(i8 %x) nounwind {
-; CHECK-LABEL: @bdep_mask_bits_not_known(
-; CHECK-NEXT:    [[BDEP:%.*]] = call i8 @llvm.bdep.i8(i8 [[X:%.*]], i8 -52)
-; CHECK-NEXT:    [[R:%.*]] = icmp sgt i8 [[BDEP]], -1
-; CHECK-NEXT:    ret i1 [[R]]
-;
-  %bdep = call i8 @llvm.bdep.i8(i8 %x, i8 204)
-  %and = and i8 %bdep, 128
-  %r = icmp eq i8 %and, 0
-  ret i1 %r
-}
-
-declare i8 @llvm.bext.i8(i8, i8)
-declare i8 @llvm.bdep.i8(i8, i8)
diff --git a/llvm/test/CodeGen/AArch64/bdep.ll b/llvm/test/CodeGen/AArch64/bdep.ll
new file mode 100644
index 0000000000000..2facdbd8c919a
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/bdep.ll
@@ -0,0 +1,2001 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2-bitperm | FileCheck %s --check-prefix=BITPERM
+; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2 | FileCheck %s --check-prefix=NOSVE2BITPERM
+
+define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
+; BITPERM-LABEL: bdep_i8:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    and w8, w0, #0xff
+; BITPERM-NEXT:    and w9, w1, #0xff
+; BITPERM-NEXT:    fmov s0, w8
+; BITPERM-NEXT:    fmov s1, w9
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i8:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w9, w1
+; NOSVE2BITPERM-NEXT:    mov w8, #-1 // =0xffffffff
+; NOSVE2BITPERM-NEXT:    lsl w9, w9, #1
+; NOSVE2BITPERM-NEXT:    fmov s0, w8
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w8, s1
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    eor w11, w1, w8
+; NOSVE2BITPERM-NEXT:    and w12, w8, #0xfe
+; NOSVE2BITPERM-NEXT:    orr w11, w11, w12, lsr #1
+; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w10, s1
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    fmov s1, w9
+; NOSVE2BITPERM-NEXT:    and w9, w10, w11
+; NOSVE2BITPERM-NEXT:    eor w10, w11, w9
+; NOSVE2BITPERM-NEXT:    and w11, w9, #0xfc
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w11, lsr #2
+; NOSVE2BITPERM-NEXT:    pmul v0.8b, v1.8b, v0.8b
+; NOSVE2BITPERM-NEXT:    fmov w11, s0
+; NOSVE2BITPERM-NEXT:    and w10, w11, w10
+; NOSVE2BITPERM-NEXT:    and w11, w10, w0, lsl #4
+; NOSVE2BITPERM-NEXT:    bic w10, w0, w10
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w11
+; NOSVE2BITPERM-NEXT:    and w11, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    bic w9, w10, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w0, w8, w1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i8 @llvm.bdep.i8(i8 %val, i8 %mask)
+  ret i8 %res
+}
+
+define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
+; BITPERM-LABEL: bdep_i16:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    and w8, w0, #0xffff
+; BITPERM-NEXT:    and w9, w1, #0xffff
+; BITPERM-NEXT:    fmov s0, w8
+; BITPERM-NEXT:    fmov s1, w9
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i16:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w8, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
+; NOSVE2BITPERM-NEXT:    neg w11, w8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w8, w8, w11
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    neg w11, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w1, w8
+; NOSVE2BITPERM-NEXT:    and w14, w8, #0xfffe
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, w13
+; NOSVE2BITPERM-NEXT:    eor w11, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    neg w12, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w10
+; NOSVE2BITPERM-NEXT:    and w14, w10, #0xfffc
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w11, w11, w12
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w11, w11, w13
+; NOSVE2BITPERM-NEXT:    eor w12, w9, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11
+; NOSVE2BITPERM-NEXT:    and w14, w11, #0xfff0
+; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #14
+; NOSVE2BITPERM-NEXT:    neg w9, w9, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w9, w12, w9
+; NOSVE2BITPERM-NEXT:    and w9, w9, w13
+; NOSVE2BITPERM-NEXT:    and w12, w9, w0, lsl #8
+; NOSVE2BITPERM-NEXT:    bic w9, w0, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w12
+; NOSVE2BITPERM-NEXT:    and w12, w11, w9, lsl #4
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w12
+; NOSVE2BITPERM-NEXT:    and w11, w10, w9, lsl #2
+; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w0, w8, w1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i16 @llvm.bdep.i16(i16 %val, i16 %mask)
+  ret i16 %res
+}
+
+define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
+; BITPERM-LABEL: bdep_i32:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    fmov s0, w0
+; BITPERM-NEXT:    fmov s1, w1
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i32:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn w8, w1
+; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
+; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #30
+; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #31
+; NOSVE2BITPERM-NEXT:    bic w10, w9, w8
+; NOSVE2BITPERM-NEXT:    and w8, w8, w1
+; NOSVE2BITPERM-NEXT:    eor w9, w10, w10, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w1, w8
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w10, w9
+; NOSVE2BITPERM-NEXT:    and w9, w9, w14
+; NOSVE2BITPERM-NEXT:    eor w10, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w9
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w9, lsr #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w10
+; NOSVE2BITPERM-NEXT:    and w10, w10, w14
+; NOSVE2BITPERM-NEXT:    eor w12, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w10
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w10, lsr #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
+; NOSVE2BITPERM-NEXT:    and w12, w12, w14
+; NOSVE2BITPERM-NEXT:    eor w13, w11, w11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor w14, w14, w12
+; NOSVE2BITPERM-NEXT:    orr w14, w14, w12, lsr #8
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor w11, w13, w11, lsl #30
+; NOSVE2BITPERM-NEXT:    and w11, w11, w14
+; NOSVE2BITPERM-NEXT:    and w13, w11, w0, lsl #16
+; NOSVE2BITPERM-NEXT:    bic w11, w0, w11
+; NOSVE2BITPERM-NEXT:    orr w11, w11, w13
+; NOSVE2BITPERM-NEXT:    and w13, w12, w11, lsl #8
+; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
+; NOSVE2BITPERM-NEXT:    orr w11, w11, w13
+; NOSVE2BITPERM-NEXT:    and w12, w10, w11, lsl #4
+; NOSVE2BITPERM-NEXT:    bic w10, w11, w10
+; NOSVE2BITPERM-NEXT:    orr w10, w10, w12
+; NOSVE2BITPERM-NEXT:    and w11, w9, w10, lsl #2
+; NOSVE2BITPERM-NEXT:    bic w9, w10, w9
+; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
+; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
+; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
+; NOSVE2BITPERM-NEXT:    and w0, w8, w1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+  ret i32 %res
+}
+
+define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
+; BITPERM-LABEL: bdep_i64:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    fmov d0, x0
+; BITPERM-NEXT:    fmov d1, x1
+; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
+; BITPERM-NEXT:    fmov x0, d0
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_i64:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    mvn x8, x1
+; NOSVE2BITPERM-NEXT:    lsl x9, x8, #1
+; NOSVE2BITPERM-NEXT:    eor x10, x9, x8, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #62
+; NOSVE2BITPERM-NEXT:    eor x8, x10, x8, lsl #63
+; NOSVE2BITPERM-NEXT:    bic x10, x9, x8
+; NOSVE2BITPERM-NEXT:    and x8, x8, x1
+; NOSVE2BITPERM-NEXT:    eor x9, x10, x10, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x1, x8
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x8, lsr #1
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x11, x10, x9
+; NOSVE2BITPERM-NEXT:    and x9, x9, x15
+; NOSVE2BITPERM-NEXT:    eor x10, x11, x11, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x9
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x9, lsr #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x12, x11, x10
+; NOSVE2BITPERM-NEXT:    and x10, x10, x15
+; NOSVE2BITPERM-NEXT:    eor x11, x12, x12, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x10
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x10, lsr #4
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x13, x12, x11
+; NOSVE2BITPERM-NEXT:    and x11, x11, x15
+; NOSVE2BITPERM-NEXT:    eor x12, x13, x13, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x11
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x11, lsr #8
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #62
+; NOSVE2BITPERM-NEXT:    bic x13, x13, x12
+; NOSVE2BITPERM-NEXT:    and x12, x12, x15
+; NOSVE2BITPERM-NEXT:    eor x14, x13, x13, lsl #1
+; NOSVE2BITPERM-NEXT:    eor x15, x15, x12
+; NOSVE2BITPERM-NEXT:    orr x15, x15, x12, lsr #16
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #2
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #3
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #4
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #5
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #6
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #7
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #8
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #9
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #10
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #11
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #12
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #13
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #14
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #15
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #16
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #17
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #18
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #19
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #20
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #21
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #22
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #23
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #24
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #25
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #26
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #27
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #28
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #29
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #30
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #31
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #32
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #33
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #34
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #35
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #36
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #37
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #38
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #39
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #40
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #41
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #42
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #43
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #44
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #45
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #46
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #47
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #48
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #49
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #50
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #51
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #52
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #53
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #54
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #55
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #56
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #57
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #58
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #59
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #60
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #61
+; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #62
+; NOSVE2BITPERM-NEXT:    eor x13, x14, x13, lsl #63
+; NOSVE2BITPERM-NEXT:    and x13, x13, x15
+; NOSVE2BITPERM-NEXT:    and x14, x13, x0, lsl #32
+; NOSVE2BITPERM-NEXT:    bic x13, x0, x13
+; NOSVE2BITPERM-NEXT:    orr x13, x13, x14
+; NOSVE2BITPERM-NEXT:    and x14, x12, x13, lsl #16
+; NOSVE2BITPERM-NEXT:    bic x12, x13, x12
+; NOSVE2BITPERM-NEXT:    orr x12, x12, x14
+; NOSVE2BITPERM-NEXT:    and x13, x11, x12, lsl #8
+; NOSVE2BITPERM-NEXT:    bic x11, x12, x11
+; NOSVE2BITPERM-NEXT:    orr x11, x11, x13
+; NOSVE2BITPERM-NEXT:    and x12, x10, x11, lsl #4
+; NOSVE2BITPERM-NEXT:    bic x10, x11, x10
+; NOSVE2BITPERM-NEXT:    orr x10, x10, x12
+; NOSVE2BITPERM-NEXT:    and x11, x9, x10, lsl #2
+; NOSVE2BITPERM-NEXT:    bic x9, x10, x9
+; NOSVE2BITPERM-NEXT:    orr x9, x9, x11
+; NOSVE2BITPERM-NEXT:    and x10, x8, x9, lsl #1
+; NOSVE2BITPERM-NEXT:    bic x8, x9, x8
+; NOSVE2BITPERM-NEXT:    orr x8, x8, x10
+; NOSVE2BITPERM-NEXT:    and x0, x8, x1
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call i64 @llvm.bdep.i64(i64 %val, i64 %mask)
+  ret i64 %res
+}
+
+define <vscale x 16 x i8> @bdep_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv16i8:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.b, z0.b, z1.b
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv16i8:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.b, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    lsl z3.b, z3.b, #1
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    and z5.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor z4.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z6.b, z5.b, #1
+; NOSVE2BITPERM-NEXT:    pmul z7.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    orr z4.d, z4.d, z6.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z7.d, z4.d
+; NOSVE2BITPERM-NEXT:    pmul z2.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    eor z4.d, z4.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z7.b, z6.b, #2
+; NOSVE2BITPERM-NEXT:    orr z3.d, z4.d, z7.d
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z3.b, z0.b, #4
+; NOSVE2BITPERM-NEXT:    bsl z3.d, z3.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z0.b, z3.b, #2
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsl z2.b, z0.b, #1
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 16 x i8> @llvm.bdep.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
+  ret <vscale x 16 x i8> %res
+}
+
+define <vscale x 8 x i16> @bdep_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv8i16:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.h, z0.h, z1.h
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv8i16:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.h, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    lsl z3.h, z3.h, #1
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z6.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    eortb z6.b, z6.b, z4.b
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z7.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    eortb z7.b, z7.b, z4.b
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z24.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
+; NOSVE2BITPERM-NEXT:    and z5.d, z6.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor z6.d, z1.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z25.h, z5.h, #1
+; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
+; NOSVE2BITPERM-NEXT:    orr z6.d, z6.d, z25.d
+; NOSVE2BITPERM-NEXT:    eortb z24.b, z24.b, z4.b
+; NOSVE2BITPERM-NEXT:    and z4.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z6.d, z6.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z7.h, z4.h, #2
+; NOSVE2BITPERM-NEXT:    trn1 z25.b, z2.b, z3.b
+; NOSVE2BITPERM-NEXT:    trn2 z26.b, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    pmullb z2.h, z3.b, z2.b
+; NOSVE2BITPERM-NEXT:    orr z3.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    pmul z6.b, z26.b, z25.b
+; NOSVE2BITPERM-NEXT:    and z7.d, z24.d, z3.d
+; NOSVE2BITPERM-NEXT:    eorbt z6.b, z6.b, z6.b
+; NOSVE2BITPERM-NEXT:    eor z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsr z24.h, z7.h, #4
+; NOSVE2BITPERM-NEXT:    orr z3.d, z3.d, z24.d
+; NOSVE2BITPERM-NEXT:    eortb z2.b, z2.b, z6.b
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z3.h, z0.h, #8
+; NOSVE2BITPERM-NEXT:    bsl z3.d, z3.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z0.h, z3.h, #4
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsl z2.h, z0.h, #2
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsl z0.h, z2.h, #1
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 8 x i16> @llvm.bdep.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
+  ret <vscale x 8 x i16> %res
+}
+
+define <vscale x 4 x i32> @bdep_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv4i32:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv4i32:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    movprfx z3, z1
+; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z2.s, #-1 // =0xffffffffffffffff
+; NOSVE2BITPERM-NEXT:    lsl z3.s, z3.s, #1
+; NOSVE2BITPERM-NEXT:    pmullt z4.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z5.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z4.s, z5.s, z4.s
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z1.d
+; NOSVE2BITPERM-NEXT:    pmullt z5.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    lsr z24.s, z4.s, #1
+; NOSVE2BITPERM-NEXT:    pmullb z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z5.s, z6.s, z5.s
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z5.d
+; NOSVE2BITPERM-NEXT:    pmullt z6.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z7.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    trn1 z6.s, z7.s, z6.s
+; NOSVE2BITPERM-NEXT:    eor z7.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    pmullt z24.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z7.d
+; NOSVE2BITPERM-NEXT:    pmullb z25.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsr z26.s, z5.s, #2
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z26.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z7.d
+; NOSVE2BITPERM-NEXT:    trn1 z24.s, z25.s, z24.s
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z25.s, z6.s, #4
+; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z25.d
+; NOSVE2BITPERM-NEXT:    pmullt z26.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    pmullb z2.d, z3.s, z2.s
+; NOSVE2BITPERM-NEXT:    and z3.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsr z24.s, z3.s, #8
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    trn1 z2.s, z2.s, z26.s
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z7.d
+; NOSVE2BITPERM-NEXT:    lsl z7.s, z0.s, #16
+; NOSVE2BITPERM-NEXT:    bsl z7.d, z7.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z0.s, z7.s, #8
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z7.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z2.s, z0.s, #4
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsl z0.s, z2.s, #2
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsl z2.s, z0.s, #1
+; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 4 x i32> @llvm.bdep.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
+  ret <vscale x 4 x i32> %res
+}
+
+define <vscale x 2 x i64> @bdep_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
+; BITPERM-LABEL: bdep_nxv2i64:
+; BITPERM:       // %bb.0:
+; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
+; BITPERM-NEXT:    ret
+;
+; NOSVE2BITPERM-LABEL: bdep_nxv2i64:
+; NOSVE2BITPERM:       // %bb.0:
+; NOSVE2BITPERM-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-16
+; NOSVE2BITPERM-NEXT:    str z23, [sp] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z22, [sp, #1, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z21, [sp, #2, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z20, [sp, #3, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z19, [sp, #4, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z18, [sp, #5, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z17, [sp, #6, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z16, [sp, #7, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z15, [sp, #8, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z14, [sp, #9, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z13, [sp, #10, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z12, [sp, #11, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    str z8, [sp, #15, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-2
+; NOSVE2BITPERM-NEXT:    str z0, [sp, #1, mul vl] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    movprfx z0, z1
+; NOSVE2BITPERM-NEXT:    subr z0.b, z0.b, #255 // =0xff
+; NOSVE2BITPERM-NEXT:    mov z5.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    str z1, [sp] // 16-byte Folded Spill
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z0.d, #1
+; NOSVE2BITPERM-NEXT:    mov z31.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z25.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mov z7.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z24.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x400000
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    eor z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #64
+; NOSVE2BITPERM-NEXT:    mov z5.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z4.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x400000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x80000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z1.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z6.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    eor z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z4.d, z3.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x40000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z25.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x200000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z23.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    movprfx z4, z0
+; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z4.d, z2.d, z4.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z1.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mov z23.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z4.d
+; NOSVE2BITPERM-NEXT:    movprfx z3, z0
+; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z3.d, z2.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z1.d, z7.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mov z26.d, #8192 // =0x2000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    mov z19.d, #0x20000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    mov z28.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z2, z0
+; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    eor z2.d, z2.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z1.d, z7.d
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #64
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z7.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z7.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mov z22.d, #4096 // =0x1000
+; NOSVE2BITPERM-NEXT:    mov z23.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #16384 // =0x4000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
+; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mov z17.d, #0x1000000000000
+; NOSVE2BITPERM-NEXT:    mov z18.d, #0x20000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000000
+; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mov z13.d, #0x10000000000000
+; NOSVE2BITPERM-NEXT:    mov z14.d, #0x200000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000000000
+; NOSVE2BITPERM-NEXT:    mov z11.d, #0x40000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mov z9.d, #0x100000000000000
+; NOSVE2BITPERM-NEXT:    mov z10.d, #0x2000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    mov z8.d, #0x800000000000000
+; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    mov z29.d, #0x1000000000000000
+; NOSVE2BITPERM-NEXT:    mov z30.d, #0x4000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z25.d
+; NOSVE2BITPERM-NEXT:    mov z27.d, #0x8000000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
+; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z2.d
+; NOSVE2BITPERM-NEXT:    movprfx z25, z0
+; NOSVE2BITPERM-NEXT:    mul z25.d, z25.d, #2
+; NOSVE2BITPERM-NEXT:    movprfx z1, z0
+; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #1
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #8
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #4
+; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z21.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    movprfx z7, z0
+; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #32
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #128 // =0x80
+; NOSVE2BITPERM-NEXT:    movprfx z24, z0
+; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #64
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #512 // =0x200
+; NOSVE2BITPERM-NEXT:    mov z24.d, #256 // =0x100
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #2048 // =0x800
+; NOSVE2BITPERM-NEXT:    mov z24.d, #1024 // =0x400
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z22.d
+; NOSVE2BITPERM-NEXT:    ldr z26, [sp] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z23.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z28.d
+; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z26.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z19.d
+; NOSVE2BITPERM-NEXT:    mul z19.d, z0.d, z20.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x800000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x400000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x2000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x1000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x8000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x4000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x20000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x800000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x400000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x2000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x1000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x8000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x4000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x20000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000000000
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000000
+; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z26.d, z6.d
+; NOSVE2BITPERM-NEXT:    lsr z24.d, z6.d, #1
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
+; NOSVE2BITPERM-NEXT:    mov z24.d, #0x2000000000000
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z19.d, z25.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z17.d
+; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z7.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z5.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z15.d
+; NOSVE2BITPERM-NEXT:    lsr z15.d, z5.d, #2
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z16.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z15.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z18.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z13.d
+; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z12.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z11.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsr z11.d, z4.d, #4
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z11.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z14.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z9.d
+; NOSVE2BITPERM-NEXT:    and z3.d, z3.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z8.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z31.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsr z31.d, z3.d, #8
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z31.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z10.d
+; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z29.d
+; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z7.d
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
+; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z27.d
+; NOSVE2BITPERM-NEXT:    mul z0.d, z0.d, z30.d
+; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsr z25.d, z2.d, #16
+; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z0.d, z24.d
+; NOSVE2BITPERM-NEXT:    orr z0.d, z7.d, z25.d
+; NOSVE2BITPERM-NEXT:    ldr z7, [sp, #1, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    and z0.d, z1.d, z0.d
+; NOSVE2BITPERM-NEXT:    lsl z1.d, z7.d, #32
+; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z7.d, z0.d
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #16
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z2.d
+; NOSVE2BITPERM-NEXT:    lsl z1.d, z0.d, #8
+; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z0.d, z3.d
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #4
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z4.d
+; NOSVE2BITPERM-NEXT:    lsl z1.d, z0.d, #2
+; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z0.d, z5.d
+; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #1
+; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z6.d
+; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z26.d
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #2
+; NOSVE2BITPERM-NEXT:    ldr z23, [sp] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z22, [sp, #1, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z21, [sp, #2, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z20, [sp, #3, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z19, [sp, #4, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z18, [sp, #5, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z17, [sp, #6, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z16, [sp, #7, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z15, [sp, #8, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z14, [sp, #9, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z13, [sp, #10, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z12, [sp, #11, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ldr z8, [sp, #15, mul vl] // 16-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    addvl sp, sp, #16
+; NOSVE2BITPERM-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
+; NOSVE2BITPERM-NEXT:    ret
+  %res = call <vscale x 2 x i64> @llvm.bdep.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
+  ret <vscale x 2 x i64> %res
+}
+
diff --git a/llvm/test/CodeGen/AArch64/bext-bdep.ll b/llvm/test/CodeGen/AArch64/bext.ll
similarity index 50%
rename from llvm/test/CodeGen/AArch64/bext-bdep.ll
rename to llvm/test/CodeGen/AArch64/bext.ll
index 454f6e079cd10..9d844d6c291a5 100644
--- a/llvm/test/CodeGen/AArch64/bext-bdep.ll
+++ b/llvm/test/CodeGen/AArch64/bext.ll
@@ -57,58 +57,6 @@ define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
   ret i8 %res
 }
 
-define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
-; BITPERM-LABEL: bdep_i8:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    and w8, w0, #0xff
-; BITPERM-NEXT:    and w9, w1, #0xff
-; BITPERM-NEXT:    fmov s0, w8
-; BITPERM-NEXT:    fmov s1, w9
-; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
-; BITPERM-NEXT:    fmov w0, s0
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bdep_i8:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    mvn w9, w1
-; NOSVE2BITPERM-NEXT:    mov w8, #-1 // =0xffffffff
-; NOSVE2BITPERM-NEXT:    lsl w9, w9, #1
-; NOSVE2BITPERM-NEXT:    fmov s0, w8
-; NOSVE2BITPERM-NEXT:    fmov s1, w9
-; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
-; NOSVE2BITPERM-NEXT:    fmov w8, s1
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
-; NOSVE2BITPERM-NEXT:    and w8, w8, w1
-; NOSVE2BITPERM-NEXT:    fmov s1, w9
-; NOSVE2BITPERM-NEXT:    eor w11, w1, w8
-; NOSVE2BITPERM-NEXT:    and w12, w8, #0xfe
-; NOSVE2BITPERM-NEXT:    orr w11, w11, w12, lsr #1
-; NOSVE2BITPERM-NEXT:    pmul v1.8b, v1.8b, v0.8b
-; NOSVE2BITPERM-NEXT:    fmov w10, s1
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
-; NOSVE2BITPERM-NEXT:    fmov s1, w9
-; NOSVE2BITPERM-NEXT:    and w9, w10, w11
-; NOSVE2BITPERM-NEXT:    eor w10, w11, w9
-; NOSVE2BITPERM-NEXT:    and w11, w9, #0xfc
-; NOSVE2BITPERM-NEXT:    orr w10, w10, w11, lsr #2
-; NOSVE2BITPERM-NEXT:    pmul v0.8b, v1.8b, v0.8b
-; NOSVE2BITPERM-NEXT:    fmov w11, s0
-; NOSVE2BITPERM-NEXT:    and w10, w11, w10
-; NOSVE2BITPERM-NEXT:    and w11, w10, w0, lsl #4
-; NOSVE2BITPERM-NEXT:    bic w10, w0, w10
-; NOSVE2BITPERM-NEXT:    orr w10, w10, w11
-; NOSVE2BITPERM-NEXT:    and w11, w9, w10, lsl #2
-; NOSVE2BITPERM-NEXT:    bic w9, w10, w9
-; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
-; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
-; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
-; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
-; NOSVE2BITPERM-NEXT:    and w0, w8, w1
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call i8 @llvm.bdep.i8(i8 %val, i8 %mask)
-  ret i8 %res
-}
-
 define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
 ; BITPERM-LABEL: bext_i16:
 ; BITPERM:       // %bb.0:
@@ -226,119 +174,6 @@ define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
   ret i16 %res
 }
 
-define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
-; BITPERM-LABEL: bdep_i16:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    and w8, w0, #0xffff
-; BITPERM-NEXT:    and w9, w1, #0xffff
-; BITPERM-NEXT:    fmov s0, w8
-; BITPERM-NEXT:    fmov s1, w9
-; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
-; BITPERM-NEXT:    fmov w0, s0
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bdep_i16:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    mvn w8, w1
-; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
-; NOSVE2BITPERM-NEXT:    neg w11, w8, lsl #16
-; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w8, w8, w11
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w8
-; NOSVE2BITPERM-NEXT:    and w8, w8, w1
-; NOSVE2BITPERM-NEXT:    eor w10, w9, w9, lsl #1
-; NOSVE2BITPERM-NEXT:    neg w11, w9, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w13, w1, w8
-; NOSVE2BITPERM-NEXT:    and w14, w8, #0xfffe
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #2
-; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #1
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w9, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
-; NOSVE2BITPERM-NEXT:    and w10, w10, w13
-; NOSVE2BITPERM-NEXT:    eor w11, w9, w9, lsl #1
-; NOSVE2BITPERM-NEXT:    neg w12, w9, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w10
-; NOSVE2BITPERM-NEXT:    and w14, w10, #0xfffc
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #2
-; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #2
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w9, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w11, w11, w12
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
-; NOSVE2BITPERM-NEXT:    and w11, w11, w13
-; NOSVE2BITPERM-NEXT:    eor w12, w9, w9, lsl #1
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11
-; NOSVE2BITPERM-NEXT:    and w14, w11, #0xfff0
-; NOSVE2BITPERM-NEXT:    orr w13, w13, w14, lsr #4
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w9, lsl #14
-; NOSVE2BITPERM-NEXT:    neg w9, w9, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w9, w12, w9
-; NOSVE2BITPERM-NEXT:    and w9, w9, w13
-; NOSVE2BITPERM-NEXT:    and w12, w9, w0, lsl #8
-; NOSVE2BITPERM-NEXT:    bic w9, w0, w9
-; NOSVE2BITPERM-NEXT:    orr w9, w9, w12
-; NOSVE2BITPERM-NEXT:    and w12, w11, w9, lsl #4
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w11
-; NOSVE2BITPERM-NEXT:    orr w9, w9, w12
-; NOSVE2BITPERM-NEXT:    and w11, w10, w9, lsl #2
-; NOSVE2BITPERM-NEXT:    bic w9, w9, w10
-; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
-; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
-; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
-; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
-; NOSVE2BITPERM-NEXT:    and w0, w8, w1
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call i16 @llvm.bdep.i16(i16 %val, i16 %mask)
-  ret i16 %res
-}
-
 define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
 ; BITPERM-LABEL: bext_i32:
 ; BITPERM:       // %bb.0:
@@ -540,217 +375,16 @@ define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
   ret i32 %res
 }
 
-define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
-; BITPERM-LABEL: bdep_i32:
+define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
+; BITPERM-LABEL: bext_i64:
 ; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    fmov s0, w0
-; BITPERM-NEXT:    fmov s1, w1
-; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
-; BITPERM-NEXT:    fmov w0, s0
+; BITPERM-NEXT:    fmov d0, x0
+; BITPERM-NEXT:    fmov d1, x1
+; BITPERM-NEXT:    bext z0.d, z0.d, z1.d
+; BITPERM-NEXT:    fmov x0, d0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_i32:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    mvn w8, w1
-; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
-; NOSVE2BITPERM-NEXT:    eor w10, w9, w8, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #16
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #17
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #18
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #19
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #20
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #21
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #22
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #23
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #24
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #25
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #26
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #27
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #28
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #29
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w8, lsl #30
-; NOSVE2BITPERM-NEXT:    eor w8, w10, w8, lsl #31
-; NOSVE2BITPERM-NEXT:    bic w10, w9, w8
-; NOSVE2BITPERM-NEXT:    and w8, w8, w1
-; NOSVE2BITPERM-NEXT:    eor w9, w10, w10, lsl #1
-; NOSVE2BITPERM-NEXT:    eor w14, w1, w8
-; NOSVE2BITPERM-NEXT:    orr w14, w14, w8, lsr #1
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #16
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #17
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #18
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #19
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #20
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #21
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #22
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #23
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #24
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #25
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #26
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #27
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #28
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #29
-; NOSVE2BITPERM-NEXT:    eor w9, w9, w10, lsl #30
-; NOSVE2BITPERM-NEXT:    bic w11, w10, w9
-; NOSVE2BITPERM-NEXT:    and w9, w9, w14
-; NOSVE2BITPERM-NEXT:    eor w10, w11, w11, lsl #1
-; NOSVE2BITPERM-NEXT:    eor w14, w14, w9
-; NOSVE2BITPERM-NEXT:    orr w14, w14, w9, lsr #2
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #16
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #17
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #18
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #19
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #20
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #21
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #22
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #23
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #24
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #25
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #26
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #27
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #28
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #29
-; NOSVE2BITPERM-NEXT:    eor w10, w10, w11, lsl #30
-; NOSVE2BITPERM-NEXT:    bic w11, w11, w10
-; NOSVE2BITPERM-NEXT:    and w10, w10, w14
-; NOSVE2BITPERM-NEXT:    eor w12, w11, w11, lsl #1
-; NOSVE2BITPERM-NEXT:    eor w14, w14, w10
-; NOSVE2BITPERM-NEXT:    orr w14, w14, w10, lsr #4
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #16
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #17
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #18
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #19
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #20
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #21
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #22
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #23
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #24
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #25
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #26
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #27
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #28
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #29
-; NOSVE2BITPERM-NEXT:    eor w12, w12, w11, lsl #30
-; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
-; NOSVE2BITPERM-NEXT:    and w12, w12, w14
-; NOSVE2BITPERM-NEXT:    eor w13, w11, w11, lsl #1
-; NOSVE2BITPERM-NEXT:    eor w14, w14, w12
-; NOSVE2BITPERM-NEXT:    orr w14, w14, w12, lsr #8
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #2
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #3
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #4
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #5
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #6
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #7
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #8
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #9
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #10
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #11
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #12
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #13
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #14
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #15
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #16
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #17
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #18
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #19
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #20
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #21
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #22
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #23
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #24
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #25
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #26
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #27
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #28
-; NOSVE2BITPERM-NEXT:    eor w13, w13, w11, lsl #29
-; NOSVE2BITPERM-NEXT:    eor w11, w13, w11, lsl #30
-; NOSVE2BITPERM-NEXT:    and w11, w11, w14
-; NOSVE2BITPERM-NEXT:    and w13, w11, w0, lsl #16
-; NOSVE2BITPERM-NEXT:    bic w11, w0, w11
-; NOSVE2BITPERM-NEXT:    orr w11, w11, w13
-; NOSVE2BITPERM-NEXT:    and w13, w12, w11, lsl #8
-; NOSVE2BITPERM-NEXT:    bic w11, w11, w12
-; NOSVE2BITPERM-NEXT:    orr w11, w11, w13
-; NOSVE2BITPERM-NEXT:    and w12, w10, w11, lsl #4
-; NOSVE2BITPERM-NEXT:    bic w10, w11, w10
-; NOSVE2BITPERM-NEXT:    orr w10, w10, w12
-; NOSVE2BITPERM-NEXT:    and w11, w9, w10, lsl #2
-; NOSVE2BITPERM-NEXT:    bic w9, w10, w9
-; NOSVE2BITPERM-NEXT:    orr w9, w9, w11
-; NOSVE2BITPERM-NEXT:    and w10, w8, w9, lsl #1
-; NOSVE2BITPERM-NEXT:    bic w8, w9, w8
-; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
-; NOSVE2BITPERM-NEXT:    and w0, w8, w1
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
-  ret i32 %res
-}
-
-define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
-; BITPERM-LABEL: bext_i64:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    fmov d0, x0
-; BITPERM-NEXT:    fmov d1, x1
-; BITPERM-NEXT:    bext z0.d, z0.d, z1.d
-; BITPERM-NEXT:    fmov x0, d0
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bext_i64:
+; NOSVE2BITPERM-LABEL: bext_i64:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn x8, x1
 ; NOSVE2BITPERM-NEXT:    and x15, x0, x1
@@ -1172,444 +806,13 @@ define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
   ret i64 %res
 }
 
-define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
-; BITPERM-LABEL: bdep_i64:
+define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
+; BITPERM-LABEL: bext_nxv16i8:
 ; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    fmov d0, x0
-; BITPERM-NEXT:    fmov d1, x1
-; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
-; BITPERM-NEXT:    fmov x0, d0
+; BITPERM-NEXT:    bext z0.b, z0.b, z1.b
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_i64:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    mvn x8, x1
-; NOSVE2BITPERM-NEXT:    lsl x9, x8, #1
-; NOSVE2BITPERM-NEXT:    eor x10, x9, x8, lsl #2
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #3
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #4
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #5
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #6
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #7
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #8
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #9
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #10
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #11
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #12
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #13
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #14
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #15
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #16
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #17
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #18
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #19
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #20
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #21
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #22
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #23
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #24
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #25
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #26
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #27
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #28
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #29
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #30
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #31
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #32
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #33
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #34
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #35
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #36
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #37
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #38
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #39
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #40
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #41
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #42
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #43
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #44
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #45
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #46
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #47
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #48
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #49
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #50
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #51
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #52
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #53
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #54
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #55
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #56
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #57
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #58
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #59
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #60
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #61
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x8, lsl #62
-; NOSVE2BITPERM-NEXT:    eor x8, x10, x8, lsl #63
-; NOSVE2BITPERM-NEXT:    bic x10, x9, x8
-; NOSVE2BITPERM-NEXT:    and x8, x8, x1
-; NOSVE2BITPERM-NEXT:    eor x9, x10, x10, lsl #1
-; NOSVE2BITPERM-NEXT:    eor x15, x1, x8
-; NOSVE2BITPERM-NEXT:    orr x15, x15, x8, lsr #1
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #2
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #3
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #4
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #5
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #6
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #7
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #8
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #9
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #10
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #11
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #12
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #13
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #14
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #15
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #16
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #17
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #18
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #19
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #20
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #21
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #22
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #23
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #24
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #25
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #26
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #27
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #28
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #29
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #30
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #31
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #32
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #33
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #34
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #35
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #36
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #37
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #38
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #39
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #40
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #41
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #42
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #43
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #44
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #45
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #46
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #47
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #48
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #49
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #50
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #51
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #52
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #53
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #54
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #55
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #56
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #57
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #58
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #59
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #60
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #61
-; NOSVE2BITPERM-NEXT:    eor x9, x9, x10, lsl #62
-; NOSVE2BITPERM-NEXT:    bic x11, x10, x9
-; NOSVE2BITPERM-NEXT:    and x9, x9, x15
-; NOSVE2BITPERM-NEXT:    eor x10, x11, x11, lsl #1
-; NOSVE2BITPERM-NEXT:    eor x15, x15, x9
-; NOSVE2BITPERM-NEXT:    orr x15, x15, x9, lsr #2
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #2
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #3
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #4
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #5
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #6
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #7
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #8
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #9
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #10
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #11
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #12
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #13
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #14
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #15
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #16
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #17
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #18
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #19
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #20
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #21
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #22
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #23
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #24
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #25
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #26
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #27
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #28
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #29
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #30
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #31
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #32
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #33
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #34
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #35
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #36
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #37
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #38
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #39
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #40
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #41
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #42
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #43
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #44
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #45
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #46
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #47
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #48
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #49
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #50
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #51
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #52
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #53
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #54
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #55
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #56
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #57
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #58
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #59
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #60
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #61
-; NOSVE2BITPERM-NEXT:    eor x10, x10, x11, lsl #62
-; NOSVE2BITPERM-NEXT:    bic x12, x11, x10
-; NOSVE2BITPERM-NEXT:    and x10, x10, x15
-; NOSVE2BITPERM-NEXT:    eor x11, x12, x12, lsl #1
-; NOSVE2BITPERM-NEXT:    eor x15, x15, x10
-; NOSVE2BITPERM-NEXT:    orr x15, x15, x10, lsr #4
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #2
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #3
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #4
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #5
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #6
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #7
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #8
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #9
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #10
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #11
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #12
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #13
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #14
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #15
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #16
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #17
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #18
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #19
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #20
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #21
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #22
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #23
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #24
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #25
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #26
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #27
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #28
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #29
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #30
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #31
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #32
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #33
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #34
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #35
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #36
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #37
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #38
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #39
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #40
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #41
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #42
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #43
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #44
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #45
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #46
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #47
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #48
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #49
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #50
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #51
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #52
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #53
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #54
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #55
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #56
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #57
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #58
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #59
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #60
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #61
-; NOSVE2BITPERM-NEXT:    eor x11, x11, x12, lsl #62
-; NOSVE2BITPERM-NEXT:    bic x13, x12, x11
-; NOSVE2BITPERM-NEXT:    and x11, x11, x15
-; NOSVE2BITPERM-NEXT:    eor x12, x13, x13, lsl #1
-; NOSVE2BITPERM-NEXT:    eor x15, x15, x11
-; NOSVE2BITPERM-NEXT:    orr x15, x15, x11, lsr #8
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #2
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #3
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #4
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #5
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #6
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #7
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #8
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #9
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #10
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #11
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #12
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #13
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #14
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #15
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #16
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #17
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #18
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #19
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #20
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #21
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #22
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #23
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #24
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #25
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #26
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #27
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #28
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #29
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #30
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #31
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #32
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #33
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #34
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #35
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #36
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #37
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #38
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #39
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #40
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #41
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #42
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #43
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #44
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #45
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #46
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #47
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #48
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #49
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #50
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #51
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #52
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #53
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #54
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #55
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #56
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #57
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #58
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #59
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #60
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #61
-; NOSVE2BITPERM-NEXT:    eor x12, x12, x13, lsl #62
-; NOSVE2BITPERM-NEXT:    bic x13, x13, x12
-; NOSVE2BITPERM-NEXT:    and x12, x12, x15
-; NOSVE2BITPERM-NEXT:    eor x14, x13, x13, lsl #1
-; NOSVE2BITPERM-NEXT:    eor x15, x15, x12
-; NOSVE2BITPERM-NEXT:    orr x15, x15, x12, lsr #16
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #2
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #3
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #4
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #5
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #6
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #7
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #8
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #9
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #10
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #11
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #12
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #13
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #14
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #15
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #16
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #17
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #18
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #19
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #20
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #21
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #22
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #23
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #24
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #25
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #26
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #27
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #28
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #29
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #30
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #31
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #32
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #33
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #34
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #35
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #36
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #37
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #38
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #39
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #40
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #41
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #42
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #43
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #44
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #45
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #46
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #47
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #48
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #49
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #50
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #51
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #52
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #53
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #54
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #55
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #56
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #57
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #58
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #59
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #60
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #61
-; NOSVE2BITPERM-NEXT:    eor x14, x14, x13, lsl #62
-; NOSVE2BITPERM-NEXT:    eor x13, x14, x13, lsl #63
-; NOSVE2BITPERM-NEXT:    and x13, x13, x15
-; NOSVE2BITPERM-NEXT:    and x14, x13, x0, lsl #32
-; NOSVE2BITPERM-NEXT:    bic x13, x0, x13
-; NOSVE2BITPERM-NEXT:    orr x13, x13, x14
-; NOSVE2BITPERM-NEXT:    and x14, x12, x13, lsl #16
-; NOSVE2BITPERM-NEXT:    bic x12, x13, x12
-; NOSVE2BITPERM-NEXT:    orr x12, x12, x14
-; NOSVE2BITPERM-NEXT:    and x13, x11, x12, lsl #8
-; NOSVE2BITPERM-NEXT:    bic x11, x12, x11
-; NOSVE2BITPERM-NEXT:    orr x11, x11, x13
-; NOSVE2BITPERM-NEXT:    and x12, x10, x11, lsl #4
-; NOSVE2BITPERM-NEXT:    bic x10, x11, x10
-; NOSVE2BITPERM-NEXT:    orr x10, x10, x12
-; NOSVE2BITPERM-NEXT:    and x11, x9, x10, lsl #2
-; NOSVE2BITPERM-NEXT:    bic x9, x10, x9
-; NOSVE2BITPERM-NEXT:    orr x9, x9, x11
-; NOSVE2BITPERM-NEXT:    and x10, x8, x9, lsl #1
-; NOSVE2BITPERM-NEXT:    bic x8, x9, x8
-; NOSVE2BITPERM-NEXT:    orr x8, x8, x10
-; NOSVE2BITPERM-NEXT:    and x0, x8, x1
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call i64 @llvm.bdep.i64(i64 %val, i64 %mask)
-  ret i64 %res
-}
-
-define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
-; BITPERM-LABEL: bext_nxv16i8:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    bext z0.b, z0.b, z1.b
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bext_nxv16i8:
+; NOSVE2BITPERM-LABEL: bext_nxv16i8:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -1647,44 +850,6 @@ define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x
   ret <vscale x 16 x i8> %res
 }
 
-define <vscale x 16 x i8> @bdep_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv16i8:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    bdep z0.b, z0.b, z1.b
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bdep_nxv16i8:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    movprfx z3, z1
-; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
-; NOSVE2BITPERM-NEXT:    mov z2.b, #-1 // =0xffffffffffffffff
-; NOSVE2BITPERM-NEXT:    lsl z3.b, z3.b, #1
-; NOSVE2BITPERM-NEXT:    pmul z4.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    and z5.d, z4.d, z1.d
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
-; NOSVE2BITPERM-NEXT:    eor z4.d, z1.d, z5.d
-; NOSVE2BITPERM-NEXT:    lsr z6.b, z5.b, #1
-; NOSVE2BITPERM-NEXT:    pmul z7.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    orr z4.d, z4.d, z6.d
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
-; NOSVE2BITPERM-NEXT:    and z6.d, z7.d, z4.d
-; NOSVE2BITPERM-NEXT:    pmul z2.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    eor z4.d, z4.d, z6.d
-; NOSVE2BITPERM-NEXT:    lsr z7.b, z6.b, #2
-; NOSVE2BITPERM-NEXT:    orr z3.d, z4.d, z7.d
-; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
-; NOSVE2BITPERM-NEXT:    lsl z3.b, z0.b, #4
-; NOSVE2BITPERM-NEXT:    bsl z3.d, z3.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    lsl z0.b, z3.b, #2
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z3.d, z6.d
-; NOSVE2BITPERM-NEXT:    lsl z2.b, z0.b, #1
-; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 16 x i8> @llvm.bdep.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
-  ret <vscale x 16 x i8> %res
-}
-
 define <vscale x 8 x i16> @bext_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
 ; BITPERM-LABEL: bext_nxv8i16:
 ; BITPERM:       // %bb.0:
@@ -1759,72 +924,6 @@ define <vscale x 8 x i16> @bext_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i
   ret <vscale x 8 x i16> %res
 }
 
-define <vscale x 8 x i16> @bdep_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv8i16:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    bdep z0.h, z0.h, z1.h
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bdep_nxv8i16:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    movprfx z3, z1
-; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
-; NOSVE2BITPERM-NEXT:    mov z2.h, #-1 // =0xffffffffffffffff
-; NOSVE2BITPERM-NEXT:    lsl z3.h, z3.h, #1
-; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
-; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmullb z6.h, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
-; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
-; NOSVE2BITPERM-NEXT:    eortb z6.b, z6.b, z4.b
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
-; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
-; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmullb z7.h, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
-; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
-; NOSVE2BITPERM-NEXT:    eortb z7.b, z7.b, z4.b
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z7.d
-; NOSVE2BITPERM-NEXT:    trn1 z4.b, z2.b, z3.b
-; NOSVE2BITPERM-NEXT:    trn2 z5.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmullb z24.h, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmul z4.b, z5.b, z4.b
-; NOSVE2BITPERM-NEXT:    and z5.d, z6.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor z6.d, z1.d, z5.d
-; NOSVE2BITPERM-NEXT:    lsr z25.h, z5.h, #1
-; NOSVE2BITPERM-NEXT:    eorbt z4.b, z4.b, z4.b
-; NOSVE2BITPERM-NEXT:    orr z6.d, z6.d, z25.d
-; NOSVE2BITPERM-NEXT:    eortb z24.b, z24.b, z4.b
-; NOSVE2BITPERM-NEXT:    and z4.d, z7.d, z6.d
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor z6.d, z6.d, z4.d
-; NOSVE2BITPERM-NEXT:    lsr z7.h, z4.h, #2
-; NOSVE2BITPERM-NEXT:    trn1 z25.b, z2.b, z3.b
-; NOSVE2BITPERM-NEXT:    trn2 z26.b, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    pmullb z2.h, z3.b, z2.b
-; NOSVE2BITPERM-NEXT:    orr z3.d, z6.d, z7.d
-; NOSVE2BITPERM-NEXT:    pmul z6.b, z26.b, z25.b
-; NOSVE2BITPERM-NEXT:    and z7.d, z24.d, z3.d
-; NOSVE2BITPERM-NEXT:    eorbt z6.b, z6.b, z6.b
-; NOSVE2BITPERM-NEXT:    eor z3.d, z3.d, z7.d
-; NOSVE2BITPERM-NEXT:    lsr z24.h, z7.h, #4
-; NOSVE2BITPERM-NEXT:    orr z3.d, z3.d, z24.d
-; NOSVE2BITPERM-NEXT:    eortb z2.b, z2.b, z6.b
-; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z3.d
-; NOSVE2BITPERM-NEXT:    lsl z3.h, z0.h, #8
-; NOSVE2BITPERM-NEXT:    bsl z3.d, z3.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    lsl z0.h, z3.h, #4
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z3.d, z7.d
-; NOSVE2BITPERM-NEXT:    lsl z2.h, z0.h, #2
-; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    lsl z0.h, z2.h, #1
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
-; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 8 x i16> @llvm.bdep.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
-  ret <vscale x 8 x i16> %res
-}
-
 define <vscale x 4 x i32> @bext_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
 ; BITPERM-LABEL: bext_nxv4i32:
 ; BITPERM:       // %bb.0:
@@ -1899,70 +998,6 @@ define <vscale x 4 x i32> @bext_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i
   ret <vscale x 4 x i32> %res
 }
 
-define <vscale x 4 x i32> @bdep_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv4i32:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bdep_nxv4i32:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    movprfx z3, z1
-; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
-; NOSVE2BITPERM-NEXT:    mov z2.s, #-1 // =0xffffffffffffffff
-; NOSVE2BITPERM-NEXT:    lsl z3.s, z3.s, #1
-; NOSVE2BITPERM-NEXT:    pmullt z4.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    pmullb z5.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    trn1 z4.s, z5.s, z4.s
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z4.d
-; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z1.d
-; NOSVE2BITPERM-NEXT:    pmullt z5.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    lsr z24.s, z4.s, #1
-; NOSVE2BITPERM-NEXT:    pmullb z6.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    trn1 z5.s, z6.s, z5.s
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z5.d
-; NOSVE2BITPERM-NEXT:    pmullt z6.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    pmullb z7.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    trn1 z6.s, z7.s, z6.s
-; NOSVE2BITPERM-NEXT:    eor z7.d, z1.d, z4.d
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z6.d
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
-; NOSVE2BITPERM-NEXT:    pmullt z24.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z7.d
-; NOSVE2BITPERM-NEXT:    pmullb z25.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z5.d
-; NOSVE2BITPERM-NEXT:    lsr z26.s, z5.s, #2
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z26.d
-; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z7.d
-; NOSVE2BITPERM-NEXT:    trn1 z24.s, z25.s, z24.s
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z6.d
-; NOSVE2BITPERM-NEXT:    lsr z25.s, z6.s, #4
-; NOSVE2BITPERM-NEXT:    bic z3.d, z3.d, z24.d
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z25.d
-; NOSVE2BITPERM-NEXT:    pmullt z26.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    pmullb z2.d, z3.s, z2.s
-; NOSVE2BITPERM-NEXT:    and z3.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z3.d
-; NOSVE2BITPERM-NEXT:    lsr z24.s, z3.s, #8
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
-; NOSVE2BITPERM-NEXT:    trn1 z2.s, z2.s, z26.s
-; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z7.d
-; NOSVE2BITPERM-NEXT:    lsl z7.s, z0.s, #16
-; NOSVE2BITPERM-NEXT:    bsl z7.d, z7.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    lsl z0.s, z7.s, #8
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z7.d, z3.d
-; NOSVE2BITPERM-NEXT:    lsl z2.s, z0.s, #4
-; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z6.d
-; NOSVE2BITPERM-NEXT:    lsl z0.s, z2.s, #2
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
-; NOSVE2BITPERM-NEXT:    lsl z2.s, z0.s, #1
-; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 4 x i32> @llvm.bdep.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
-  ret <vscale x 4 x i32> %res
-}
-
 define <vscale x 2 x i64> @bext_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
 ; BITPERM-LABEL: bext_nxv2i64:
 ; BITPERM:       // %bb.0:
@@ -3007,1051 +2042,3 @@ define <vscale x 2 x i64> @bext_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i
   ret <vscale x 2 x i64> %res
 }
 
-define <vscale x 2 x i64> @bdep_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv2i64:
-; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
-; BITPERM-NEXT:    ret
-;
-; NOSVE2BITPERM-LABEL: bdep_nxv2i64:
-; NOSVE2BITPERM:       // %bb.0:
-; NOSVE2BITPERM-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-16
-; NOSVE2BITPERM-NEXT:    str z23, [sp] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z22, [sp, #1, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z21, [sp, #2, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z20, [sp, #3, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z19, [sp, #4, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z18, [sp, #5, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z17, [sp, #6, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z16, [sp, #7, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z15, [sp, #8, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z14, [sp, #9, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z13, [sp, #10, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z12, [sp, #11, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    str z8, [sp, #15, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-2
-; NOSVE2BITPERM-NEXT:    str z0, [sp, #1, mul vl] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    movprfx z0, z1
-; NOSVE2BITPERM-NEXT:    subr z0.b, z0.b, #255 // =0xff
-; NOSVE2BITPERM-NEXT:    mov z5.d, #128 // =0x80
-; NOSVE2BITPERM-NEXT:    str z1, [sp] // 16-byte Folded Spill
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000
-; NOSVE2BITPERM-NEXT:    mov z29.d, #0x40000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x200000
-; NOSVE2BITPERM-NEXT:    mov z30.d, #128 // =0x80
-; NOSVE2BITPERM-NEXT:    lsl z0.d, z0.d, #1
-; NOSVE2BITPERM-NEXT:    mov z31.d, #512 // =0x200
-; NOSVE2BITPERM-NEXT:    mov z25.d, #256 // =0x100
-; NOSVE2BITPERM-NEXT:    mov z7.d, #2048 // =0x800
-; NOSVE2BITPERM-NEXT:    mov z24.d, #1024 // =0x400
-; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
-; NOSVE2BITPERM-NEXT:    mov z8.d, #0x100000
-; NOSVE2BITPERM-NEXT:    mov z9.d, #0x800000
-; NOSVE2BITPERM-NEXT:    mov z10.d, #0x400000
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
-; NOSVE2BITPERM-NEXT:    movprfx z3, z0
-; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
-; NOSVE2BITPERM-NEXT:    movprfx z4, z0
-; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
-; NOSVE2BITPERM-NEXT:    mov z11.d, #0x2000000
-; NOSVE2BITPERM-NEXT:    mov z12.d, #0x1000000
-; NOSVE2BITPERM-NEXT:    mov z13.d, #0x8000000
-; NOSVE2BITPERM-NEXT:    mov z14.d, #0x4000000
-; NOSVE2BITPERM-NEXT:    mov z16.d, #0x20000000
-; NOSVE2BITPERM-NEXT:    mov z17.d, #0x10000000
-; NOSVE2BITPERM-NEXT:    mov z18.d, #0x40000000
-; NOSVE2BITPERM-NEXT:    mov z15.d, #0x80000000
-; NOSVE2BITPERM-NEXT:    eor z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
-; NOSVE2BITPERM-NEXT:    mov z19.d, #0x800000000
-; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000
-; NOSVE2BITPERM-NEXT:    mov z21.d, #0x20000000000
-; NOSVE2BITPERM-NEXT:    mov z23.d, #0x200000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    movprfx z4, z0
-; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #64
-; NOSVE2BITPERM-NEXT:    mov z5.d, #32768 // =0x8000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
-; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #2048 // =0x800
-; NOSVE2BITPERM-NEXT:    mov z4.d, #1024 // =0x400
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #8192 // =0x2000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mov z4.d, #16384 // =0x4000
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000
-; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x100000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #0x400000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z29.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000
-; NOSVE2BITPERM-NEXT:    mov z29.d, #0x80000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x2000000
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x1000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #0x4000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x20000000
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x10000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z4.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #0x40000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x20000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z3.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x400000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x200000000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #0x10000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z1.d, z3.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x800000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x40000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x200000000000
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000000000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x400000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x20000000000000
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x10000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x80000000000000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x40000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x200000000000000
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x100000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x800000000000000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x400000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    mov z3.d, #0x2000000000000000
-; NOSVE2BITPERM-NEXT:    mov z4.d, #0x1000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z5.d, #0x8000000000000000
-; NOSVE2BITPERM-NEXT:    mov z26.d, #0x4000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z26.d, #16384 // =0x4000
-; NOSVE2BITPERM-NEXT:    eor3 z6.d, z6.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z6.d
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #2
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
-; NOSVE2BITPERM-NEXT:    movprfx z3, z0
-; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
-; NOSVE2BITPERM-NEXT:    movprfx z4, z0
-; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #4
-; NOSVE2BITPERM-NEXT:    eor z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z4.d, z3.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z30.d
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
-; NOSVE2BITPERM-NEXT:    mov z30.d, #0x40000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
-; NOSVE2BITPERM-NEXT:    mov z25.d, #32768 // =0x8000
-; NOSVE2BITPERM-NEXT:    mov z31.d, #0x200000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z18.d
-; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
-; NOSVE2BITPERM-NEXT:    mov z19.d, #0x2000000000
-; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z21.d, #0x80000000000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    mov z23.d, #0x800000000000
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z5.d, z5.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    movprfx z4, z0
-; NOSVE2BITPERM-NEXT:    mul z4.d, z4.d, #2
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
-; NOSVE2BITPERM-NEXT:    movprfx z3, z0
-; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #8
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
-; NOSVE2BITPERM-NEXT:    eor z4.d, z2.d, z4.d
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z1.d, z3.d
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
-; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
-; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
-; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z25.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z26.d, #16384 // =0x4000
-; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x2000000000000000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #0x1000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
-; NOSVE2BITPERM-NEXT:    mov z29.d, #0x800000000000000
-; NOSVE2BITPERM-NEXT:    mov z30.d, #0x400000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
-; NOSVE2BITPERM-NEXT:    mov z31.d, #0x200000000000000
-; NOSVE2BITPERM-NEXT:    mov z8.d, #0x100000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
-; NOSVE2BITPERM-NEXT:    mov z9.d, #0x80000000000000
-; NOSVE2BITPERM-NEXT:    mov z10.d, #0x40000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
-; NOSVE2BITPERM-NEXT:    mov z11.d, #0x20000000000000
-; NOSVE2BITPERM-NEXT:    mov z12.d, #0x10000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
-; NOSVE2BITPERM-NEXT:    mov z13.d, #0x8000000000000
-; NOSVE2BITPERM-NEXT:    mov z14.d, #0x4000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
-; NOSVE2BITPERM-NEXT:    mov z17.d, #0x400000000000
-; NOSVE2BITPERM-NEXT:    mov z16.d, #0x1000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
-; NOSVE2BITPERM-NEXT:    mov z15.d, #0x2000000000000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
-; NOSVE2BITPERM-NEXT:    mov z19.d, #0x2000000000
-; NOSVE2BITPERM-NEXT:    mov z20.d, #0x1000000000
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
-; NOSVE2BITPERM-NEXT:    mov z18.d, #0x8000000000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
-; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x8000000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z23.d
-; NOSVE2BITPERM-NEXT:    mov z23.d, #4096 // =0x1000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z4.d, z4.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z4.d
-; NOSVE2BITPERM-NEXT:    movprfx z3, z0
-; NOSVE2BITPERM-NEXT:    mul z3.d, z3.d, #2
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
-; NOSVE2BITPERM-NEXT:    movprfx z7, z0
-; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
-; NOSVE2BITPERM-NEXT:    eor z3.d, z2.d, z3.d
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #16
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z1.d, z7.d
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #64
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
-; NOSVE2BITPERM-NEXT:    mov z2.d, #256 // =0x100
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
-; NOSVE2BITPERM-NEXT:    mov z2.d, #1024 // =0x400
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #4096 // =0x1000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
-; NOSVE2BITPERM-NEXT:    mov z22.d, #8192 // =0x2000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mov z26.d, #8192 // =0x2000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x1000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x400000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z19.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z20.d
-; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000000
-; NOSVE2BITPERM-NEXT:    mov z19.d, #0x20000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x4000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z18.d
-; NOSVE2BITPERM-NEXT:    mov z18.d, #0x1000000000000
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x10000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x40000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
-; NOSVE2BITPERM-NEXT:    mov z2.d, #0x100000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z17.d
-; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
-; NOSVE2BITPERM-NEXT:    mov z17.d, #0x2000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z15.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z16.d
-; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
-; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z14.d
-; NOSVE2BITPERM-NEXT:    mov z13.d, #0x20000000000000
-; NOSVE2BITPERM-NEXT:    mov z14.d, #0x10000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z11.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z12.d
-; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000000000
-; NOSVE2BITPERM-NEXT:    mov z11.d, #0x40000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z10.d
-; NOSVE2BITPERM-NEXT:    mov z9.d, #0x200000000000000
-; NOSVE2BITPERM-NEXT:    mov z10.d, #0x100000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z31.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z8.d
-; NOSVE2BITPERM-NEXT:    mov z8.d, #0x800000000000000
-; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z30.d
-; NOSVE2BITPERM-NEXT:    mov z29.d, #0x2000000000000000
-; NOSVE2BITPERM-NEXT:    mov z30.d, #0x1000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x8000000000000000
-; NOSVE2BITPERM-NEXT:    mov z28.d, #16384 // =0x4000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z2.d, z0.d, z25.d
-; NOSVE2BITPERM-NEXT:    mov z25.d, #0x4000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z3.d, z3.d, z2.d, z1.d
-; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    movprfx z24, z0
-; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #2
-; NOSVE2BITPERM-NEXT:    movprfx z2, z0
-; NOSVE2BITPERM-NEXT:    mul z2.d, z2.d, #1
-; NOSVE2BITPERM-NEXT:    movprfx z7, z0
-; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #8
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #4
-; NOSVE2BITPERM-NEXT:    eor z2.d, z2.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z1.d, z7.d
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #32
-; NOSVE2BITPERM-NEXT:    movprfx z7, z0
-; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #16
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #128 // =0x80
-; NOSVE2BITPERM-NEXT:    movprfx z7, z0
-; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #64
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #512 // =0x200
-; NOSVE2BITPERM-NEXT:    mov z7.d, #256 // =0x100
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #2048 // =0x800
-; NOSVE2BITPERM-NEXT:    mov z7.d, #1024 // =0x400
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z22.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z23.d
-; NOSVE2BITPERM-NEXT:    mov z22.d, #4096 // =0x1000
-; NOSVE2BITPERM-NEXT:    mov z23.d, #32768 // =0x8000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #32768 // =0x8000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #16384 // =0x4000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x800000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x400000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x2000000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x1000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x8000000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x4000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x20000000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x10000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x80000000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x40000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mov z1.d, #0x200000000000
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x100000000000
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z21.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z20.d
-; NOSVE2BITPERM-NEXT:    mov z21.d, #0x800000000000
-; NOSVE2BITPERM-NEXT:    mov z20.d, #0x400000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z17.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z18.d
-; NOSVE2BITPERM-NEXT:    mov z17.d, #0x1000000000000
-; NOSVE2BITPERM-NEXT:    mov z18.d, #0x20000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z16.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z15.d
-; NOSVE2BITPERM-NEXT:    mov z15.d, #0x4000000000000
-; NOSVE2BITPERM-NEXT:    mov z16.d, #0x8000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z13.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z14.d
-; NOSVE2BITPERM-NEXT:    mov z13.d, #0x10000000000000
-; NOSVE2BITPERM-NEXT:    mov z14.d, #0x200000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z12.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z11.d
-; NOSVE2BITPERM-NEXT:    mov z12.d, #0x80000000000000
-; NOSVE2BITPERM-NEXT:    mov z11.d, #0x40000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z9.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z10.d
-; NOSVE2BITPERM-NEXT:    mov z9.d, #0x100000000000000
-; NOSVE2BITPERM-NEXT:    mov z10.d, #0x2000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z8.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z31.d
-; NOSVE2BITPERM-NEXT:    mov z8.d, #0x800000000000000
-; NOSVE2BITPERM-NEXT:    mov z31.d, #0x400000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z29.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z30.d
-; NOSVE2BITPERM-NEXT:    mov z29.d, #0x1000000000000000
-; NOSVE2BITPERM-NEXT:    mov z30.d, #0x4000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    mul z1.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z25.d
-; NOSVE2BITPERM-NEXT:    mov z27.d, #0x8000000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z2.d, z2.d, z7.d, z1.d
-; NOSVE2BITPERM-NEXT:    bic z0.d, z0.d, z2.d
-; NOSVE2BITPERM-NEXT:    movprfx z25, z0
-; NOSVE2BITPERM-NEXT:    mul z25.d, z25.d, #2
-; NOSVE2BITPERM-NEXT:    movprfx z1, z0
-; NOSVE2BITPERM-NEXT:    mul z1.d, z1.d, #1
-; NOSVE2BITPERM-NEXT:    movprfx z24, z0
-; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #8
-; NOSVE2BITPERM-NEXT:    movprfx z7, z0
-; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #4
-; NOSVE2BITPERM-NEXT:    eor z1.d, z1.d, z25.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z21.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z7.d, z24.d
-; NOSVE2BITPERM-NEXT:    movprfx z7, z0
-; NOSVE2BITPERM-NEXT:    mul z7.d, z7.d, #32
-; NOSVE2BITPERM-NEXT:    movprfx z24, z0
-; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #16
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #128 // =0x80
-; NOSVE2BITPERM-NEXT:    movprfx z24, z0
-; NOSVE2BITPERM-NEXT:    mul z24.d, z24.d, #64
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #512 // =0x200
-; NOSVE2BITPERM-NEXT:    mov z24.d, #256 // =0x100
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #2048 // =0x800
-; NOSVE2BITPERM-NEXT:    mov z24.d, #1024 // =0x400
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z22.d
-; NOSVE2BITPERM-NEXT:    ldr z26, [sp] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z23.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z28.d
-; NOSVE2BITPERM-NEXT:    and z6.d, z6.d, z26.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z19.d
-; NOSVE2BITPERM-NEXT:    mul z19.d, z0.d, z20.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x800000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x400000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x2000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x1000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x8000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x4000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x20000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x800000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x400000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x2000000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x1000000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x8000000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x4000000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x20000000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x10000000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x80000000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x40000000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    mov z7.d, #0x200000000000
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x100000000000
-; NOSVE2BITPERM-NEXT:    mul z7.d, z0.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z24.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor z7.d, z26.d, z6.d
-; NOSVE2BITPERM-NEXT:    lsr z24.d, z6.d, #1
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z24.d
-; NOSVE2BITPERM-NEXT:    mov z24.d, #0x2000000000000
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z19.d, z25.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z17.d
-; NOSVE2BITPERM-NEXT:    and z5.d, z5.d, z7.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z5.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z15.d
-; NOSVE2BITPERM-NEXT:    lsr z15.d, z5.d, #2
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z16.d
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z15.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z18.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z13.d
-; NOSVE2BITPERM-NEXT:    and z4.d, z4.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z12.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z11.d
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z4.d
-; NOSVE2BITPERM-NEXT:    lsr z11.d, z4.d, #4
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z11.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z14.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z9.d
-; NOSVE2BITPERM-NEXT:    and z3.d, z3.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z8.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z31.d
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z3.d
-; NOSVE2BITPERM-NEXT:    lsr z31.d, z3.d, #8
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    orr z7.d, z7.d, z31.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z10.d
-; NOSVE2BITPERM-NEXT:    mul z25.d, z0.d, z29.d
-; NOSVE2BITPERM-NEXT:    and z2.d, z2.d, z7.d
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z25.d, z24.d
-; NOSVE2BITPERM-NEXT:    mul z24.d, z0.d, z27.d
-; NOSVE2BITPERM-NEXT:    mul z0.d, z0.d, z30.d
-; NOSVE2BITPERM-NEXT:    eor z7.d, z7.d, z2.d
-; NOSVE2BITPERM-NEXT:    lsr z25.d, z2.d, #16
-; NOSVE2BITPERM-NEXT:    eor3 z1.d, z1.d, z0.d, z24.d
-; NOSVE2BITPERM-NEXT:    orr z0.d, z7.d, z25.d
-; NOSVE2BITPERM-NEXT:    ldr z7, [sp, #1, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    and z0.d, z1.d, z0.d
-; NOSVE2BITPERM-NEXT:    lsl z1.d, z7.d, #32
-; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z7.d, z0.d
-; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #16
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z2.d
-; NOSVE2BITPERM-NEXT:    lsl z1.d, z0.d, #8
-; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z0.d, z3.d
-; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #4
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z4.d
-; NOSVE2BITPERM-NEXT:    lsl z1.d, z0.d, #2
-; NOSVE2BITPERM-NEXT:    bsl z1.d, z1.d, z0.d, z5.d
-; NOSVE2BITPERM-NEXT:    lsl z0.d, z1.d, #1
-; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z1.d, z6.d
-; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z26.d
-; NOSVE2BITPERM-NEXT:    addvl sp, sp, #2
-; NOSVE2BITPERM-NEXT:    ldr z23, [sp] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z22, [sp, #1, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z21, [sp, #2, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z20, [sp, #3, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z19, [sp, #4, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z18, [sp, #5, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z17, [sp, #6, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z16, [sp, #7, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z15, [sp, #8, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z14, [sp, #9, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z13, [sp, #10, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z12, [sp, #11, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ldr z8, [sp, #15, mul vl] // 16-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    addvl sp, sp, #16
-; NOSVE2BITPERM-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
-; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 2 x i64> @llvm.bdep.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
-  ret <vscale x 2 x i64> %res
-}
-
-declare i8 @llvm.bext.i8(i8, i8)
-declare i16 @llvm.bext.i16(i16, i16)
-declare i32 @llvm.bext.i32(i32, i32)
-declare i64 @llvm.bext.i64(i64, i64)
-declare i8 @llvm.bdep.i8(i8, i8)
-declare i16 @llvm.bdep.i16(i16, i16)
-declare i32 @llvm.bdep.i32(i32, i32)
-declare i64 @llvm.bdep.i64(i64, i64)
-declare <vscale x 16 x i8> @llvm.bext.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
-declare <vscale x 8 x i16> @llvm.bext.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
-declare <vscale x 4 x i32> @llvm.bext.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
-declare <vscale x 2 x i64> @llvm.bext.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
-declare <vscale x 16 x i8> @llvm.bdep.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
-declare <vscale x 8 x i16> @llvm.bdep.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
-declare <vscale x 4 x i32> @llvm.bdep.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
-declare <vscale x 2 x i64> @llvm.bdep.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
diff --git a/llvm/test/CodeGen/X86/bext-bdep.ll b/llvm/test/CodeGen/X86/bdep.ll
similarity index 50%
rename from llvm/test/CodeGen/X86/bext-bdep.ll
rename to llvm/test/CodeGen/X86/bdep.ll
index d27094d8423b2..47ef9348b2d5a 100644
--- a/llvm/test/CodeGen/X86/bext-bdep.ll
+++ b/llvm/test/CodeGen/X86/bdep.ll
@@ -2,103 +2,12 @@
 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+bmi2 | FileCheck %s --check-prefix=BMI2
 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=NOBMI2
 
-define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
-; BMI2-LABEL: bext_i8:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    movzbl %sil, %eax
-; BMI2-NEXT:    movzbl %dil, %ecx
-; BMI2-NEXT:    pextl %eax, %ecx, %eax
-; BMI2-NEXT:    # kill: def $al killed $al killed $eax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bext_i8:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    movl %esi, %ecx
-; NOBMI2-NEXT:    notb %cl
-; NOBMI2-NEXT:    leal (,%rcx,4), %edx
-; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
-; NOBMI2-NEXT:    xorb %al, %dl
-; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
-; NOBMI2-NEXT:    movl %ecx, %r9d
-; NOBMI2-NEXT:    shlb $4, %r9b
-; NOBMI2-NEXT:    xorb %r8b, %r9b
-; NOBMI2-NEXT:    xorb %dl, %r9b
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shlb $5, %dl
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shlb $6, %r8b
-; NOBMI2-NEXT:    xorb %dl, %r8b
-; NOBMI2-NEXT:    shlb $7, %cl
-; NOBMI2-NEXT:    xorb %r8b, %cl
-; NOBMI2-NEXT:    xorb %r9b, %cl
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    andb %sil, %dl
-; NOBMI2-NEXT:    andl %esi, %edi
-; NOBMI2-NEXT:    movl %edi, %r8d
-; NOBMI2-NEXT:    andb %dl, %r8b
-; NOBMI2-NEXT:    xorb %r8b, %dil
-; NOBMI2-NEXT:    shrb %r8b
-; NOBMI2-NEXT:    orb %dil, %r8b
-; NOBMI2-NEXT:    xorb %dl, %sil
-; NOBMI2-NEXT:    shrb %dl
-; NOBMI2-NEXT:    orb %sil, %dl
-; NOBMI2-NEXT:    notb %cl
-; NOBMI2-NEXT:    andb %al, %cl
-; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
-; NOBMI2-NEXT:    xorb %cl, %al
-; NOBMI2-NEXT:    leal (,%rcx,4), %esi
-; NOBMI2-NEXT:    leal (,%rcx,8), %edi
-; NOBMI2-NEXT:    xorb %sil, %dil
-; NOBMI2-NEXT:    xorb %al, %dil
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shlb $4, %al
-; NOBMI2-NEXT:    movl %ecx, %r9d
-; NOBMI2-NEXT:    shlb $5, %r9b
-; NOBMI2-NEXT:    xorb %al, %r9b
-; NOBMI2-NEXT:    movl %ecx, %esi
-; NOBMI2-NEXT:    shlb $6, %sil
-; NOBMI2-NEXT:    xorb %r9b, %sil
-; NOBMI2-NEXT:    xorb %dil, %sil
-; NOBMI2-NEXT:    movl %esi, %eax
-; NOBMI2-NEXT:    andb %dl, %al
-; NOBMI2-NEXT:    movl %r8d, %edi
-; NOBMI2-NEXT:    andb %al, %dil
-; NOBMI2-NEXT:    xorb %dil, %r8b
-; NOBMI2-NEXT:    shrb $2, %dil
-; NOBMI2-NEXT:    orb %r8b, %dil
-; NOBMI2-NEXT:    xorb %al, %dl
-; NOBMI2-NEXT:    shrb $2, %al
-; NOBMI2-NEXT:    orb %dl, %al
-; NOBMI2-NEXT:    notb %sil
-; NOBMI2-NEXT:    andb %cl, %sil
-; NOBMI2-NEXT:    leal (%rsi,%rsi), %ecx
-; NOBMI2-NEXT:    xorb %sil, %cl
-; NOBMI2-NEXT:    leal (,%rsi,4), %edx
-; NOBMI2-NEXT:    leal (,%rsi,8), %r8d
-; NOBMI2-NEXT:    xorb %dl, %r8b
-; NOBMI2-NEXT:    xorb %cl, %r8b
-; NOBMI2-NEXT:    movl %esi, %ecx
-; NOBMI2-NEXT:    shlb $4, %cl
-; NOBMI2-NEXT:    movl %esi, %edx
-; NOBMI2-NEXT:    shlb $5, %dl
-; NOBMI2-NEXT:    xorb %cl, %dl
-; NOBMI2-NEXT:    shlb $6, %sil
-; NOBMI2-NEXT:    xorb %dl, %sil
-; NOBMI2-NEXT:    xorb %r8b, %sil
-; NOBMI2-NEXT:    andb %dil, %al
-; NOBMI2-NEXT:    andb %sil, %al
-; NOBMI2-NEXT:    xorb %al, %dil
-; NOBMI2-NEXT:    shrb $4, %al
-; NOBMI2-NEXT:    orb %dil, %al
-; NOBMI2-NEXT:    retq
-  %res = call i8 @llvm.bext.i8(i8 %val, i8 %mask)
-  ret i8 %res
-}
-
 define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
 ; BMI2-LABEL: bdep_i8:
 ; BMI2:       # %bb.0:
-; BMI2-NEXT:    pdepl %esi, %edi, %eax
+; BMI2-NEXT:    movzbl %sil, %eax
+; BMI2-NEXT:    movzbl %dil, %ecx
+; BMI2-NEXT:    pdepl %eax, %ecx, %eax
 ; BMI2-NEXT:    # kill: def $al killed $al killed $eax
 ; BMI2-NEXT:    retq
 ;
@@ -189,235 +98,12 @@ define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
   ret i8 %res
 }
 
-define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
-; BMI2-LABEL: bext_i16:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    movzwl %si, %eax
-; BMI2-NEXT:    movzwl %di, %ecx
-; BMI2-NEXT:    pextl %eax, %ecx, %eax
-; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bext_i16:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    pushq %rbx
-; NOBMI2-NEXT:    andl %esi, %edi
-; NOBMI2-NEXT:    movl %esi, %eax
-; NOBMI2-NEXT:    notl %eax
-; NOBMI2-NEXT:    leal (,%rax,4), %edx
-; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
-; NOBMI2-NEXT:    xorl %ecx, %edx
-; NOBMI2-NEXT:    leal (,%rax,8), %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
-; NOBMI2-NEXT:    shll $4, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %edx, %r9d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $5, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    shll $6, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $7, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    xorl %r9d, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    shll $8, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
-; NOBMI2-NEXT:    shll $9, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    shll $10, %r8d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
-; NOBMI2-NEXT:    shll $11, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %edx, %r9d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $12, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    shll $13, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $14, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    shll $15, %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    xorl %r9d, %eax
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    andl %esi, %r8d
-; NOBMI2-NEXT:    movl %edi, %edx
-; NOBMI2-NEXT:    andl %r8d, %edx
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movzwl %dx, %edx
-; NOBMI2-NEXT:    shrl %edx
-; NOBMI2-NEXT:    orl %edi, %edx
-; NOBMI2-NEXT:    xorl %r8d, %esi
-; NOBMI2-NEXT:    movzwl %r8w, %edi
-; NOBMI2-NEXT:    shrl %edi
-; NOBMI2-NEXT:    orl %esi, %edi
-; NOBMI2-NEXT:    notl %eax
-; NOBMI2-NEXT:    andl %ecx, %eax
-; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    leal (,%rax,4), %esi
-; NOBMI2-NEXT:    leal (,%rax,8), %r8d
-; NOBMI2-NEXT:    xorl %esi, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $4, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $5, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $6, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    xorl %r8d, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $7, %esi
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    shll $8, %r8d
-; NOBMI2-NEXT:    xorl %esi, %r8d
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $9, %esi
-; NOBMI2-NEXT:    xorl %r8d, %esi
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    shll $10, %r8d
-; NOBMI2-NEXT:    xorl %esi, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $11, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $12, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %r9d
-; NOBMI2-NEXT:    shll $13, %r9d
-; NOBMI2-NEXT:    xorl %esi, %r9d
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $14, %ecx
-; NOBMI2-NEXT:    xorl %r9d, %ecx
-; NOBMI2-NEXT:    xorl %r8d, %ecx
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    andl %edi, %r8d
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    andl %r8d, %esi
-; NOBMI2-NEXT:    xorl %esi, %edx
-; NOBMI2-NEXT:    movzwl %si, %esi
-; NOBMI2-NEXT:    shrl $2, %esi
-; NOBMI2-NEXT:    orl %edx, %esi
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    movzwl %r8w, %edx
-; NOBMI2-NEXT:    shrl $2, %edx
-; NOBMI2-NEXT:    orl %edi, %edx
-; NOBMI2-NEXT:    notl %ecx
-; NOBMI2-NEXT:    andl %eax, %ecx
-; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
-; NOBMI2-NEXT:    xorl %ecx, %eax
-; NOBMI2-NEXT:    leal (,%rcx,4), %edi
-; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    xorl %eax, %r8d
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $4, %eax
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $5, %edi
-; NOBMI2-NEXT:    xorl %eax, %edi
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $6, %eax
-; NOBMI2-NEXT:    xorl %edi, %eax
-; NOBMI2-NEXT:    xorl %r8d, %eax
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $7, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $8, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $9, %edi
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $10, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    xorl %eax, %r8d
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $11, %eax
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $12, %edi
-; NOBMI2-NEXT:    xorl %eax, %edi
-; NOBMI2-NEXT:    movl %ecx, %r9d
-; NOBMI2-NEXT:    shll $13, %r9d
-; NOBMI2-NEXT:    xorl %edi, %r9d
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $14, %eax
-; NOBMI2-NEXT:    xorl %r9d, %eax
-; NOBMI2-NEXT:    xorl %r8d, %eax
-; NOBMI2-NEXT:    movl %eax, %r8d
-; NOBMI2-NEXT:    andl %edx, %r8d
-; NOBMI2-NEXT:    movl %esi, %edi
-; NOBMI2-NEXT:    andl %r8d, %edi
-; NOBMI2-NEXT:    xorl %edi, %esi
-; NOBMI2-NEXT:    movzwl %di, %edi
-; NOBMI2-NEXT:    shrl $4, %edi
-; NOBMI2-NEXT:    orl %esi, %edi
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    movzwl %r8w, %ebx
-; NOBMI2-NEXT:    shrl $4, %ebx
-; NOBMI2-NEXT:    orl %edx, %ebx
-; NOBMI2-NEXT:    notl %eax
-; NOBMI2-NEXT:    andl %ecx, %eax
-; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    leal (,%rax,4), %edx
-; NOBMI2-NEXT:    leal (,%rax,8), %esi
-; NOBMI2-NEXT:    xorl %edx, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $4, %ecx
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $5, %edx
-; NOBMI2-NEXT:    xorl %ecx, %edx
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $6, %ecx
-; NOBMI2-NEXT:    xorl %edx, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $7, %edx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $8, %esi
-; NOBMI2-NEXT:    xorl %edx, %esi
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $9, %edx
-; NOBMI2-NEXT:    xorl %esi, %edx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $10, %esi
-; NOBMI2-NEXT:    xorl %edx, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $11, %ecx
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $12, %edx
-; NOBMI2-NEXT:    xorl %ecx, %edx
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $13, %ecx
-; NOBMI2-NEXT:    xorl %edx, %ecx
-; NOBMI2-NEXT:    shll $14, %eax
-; NOBMI2-NEXT:    xorl %ecx, %eax
-; NOBMI2-NEXT:    xorl %esi, %eax
-; NOBMI2-NEXT:    andl %edi, %ebx
-; NOBMI2-NEXT:    andl %eax, %ebx
-; NOBMI2-NEXT:    xorl %ebx, %edi
-; NOBMI2-NEXT:    movzbl %bh, %eax
-; NOBMI2-NEXT:    orl %edi, %eax
-; NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax
-; NOBMI2-NEXT:    popq %rbx
-; NOBMI2-NEXT:    retq
-  %res = call i16 @llvm.bext.i16(i16 %val, i16 %mask)
-  ret i16 %res
-}
-
 define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
 ; BMI2-LABEL: bdep_i16:
 ; BMI2:       # %bb.0:
-; BMI2-NEXT:    pdepl %esi, %edi, %eax
+; BMI2-NEXT:    movzwl %si, %eax
+; BMI2-NEXT:    movzwl %di, %ecx
+; BMI2-NEXT:    pdepl %eax, %ecx, %eax
 ; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
 ; BMI2-NEXT:    retq
 ;
@@ -634,607 +320,103 @@ define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
   ret i16 %res
 }
 
-define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
-; BMI2-LABEL: bext_i32:
+define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
+; BMI2-LABEL: bdep_i32:
 ; BMI2:       # %bb.0:
-; BMI2-NEXT:    pextl %esi, %edi, %eax
+; BMI2-NEXT:    pdepl %esi, %edi, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_i32:
+; NOBMI2-LABEL: bdep_i32:
 ; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    andl %esi, %edi
-; NOBMI2-NEXT:    movl %esi, %eax
-; NOBMI2-NEXT:    notl %eax
-; NOBMI2-NEXT:    leal (,%rax,4), %edx
-; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
-; NOBMI2-NEXT:    xorl %ecx, %edx
-; NOBMI2-NEXT:    leal (,%rax,8), %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    pushq %rbp
+; NOBMI2-NEXT:    pushq %r14
+; NOBMI2-NEXT:    pushq %rbx
+; NOBMI2-NEXT:    movl %esi, %edx
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rdx,8), %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $4, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %edx, %r9d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $5, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $5, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $6, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $7, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    xorl %r9d, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $7, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $8, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $9, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $10, %r8d
 ; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $11, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %edx, %r9d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $12, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $12, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $13, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $14, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $15, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %r10d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %r10d
 ; NOBMI2-NEXT:    shll $16, %r10d
 ; NOBMI2-NEXT:    xorl %r8d, %r10d
 ; NOBMI2-NEXT:    xorl %r9d, %r10d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $17, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $17, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $18, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $19, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $19, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $20, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $21, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $22, %edx
-; NOBMI2-NEXT:    xorl %r9d, %edx
-; NOBMI2-NEXT:    xorl %r10d, %edx
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $22, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    xorl %r10d, %ecx
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $23, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $24, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $25, %r8d
 ; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $26, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $27, %r8d
 ; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %r9d
 ; NOBMI2-NEXT:    shll $28, %r9d
 ; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    movl %edx, %r8d
 ; NOBMI2-NEXT:    shll $29, %r8d
 ; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    shll $30, %edx
-; NOBMI2-NEXT:    shll $31, %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    xorl %r8d, %eax
-; NOBMI2-NEXT:    movl %eax, %edx
-; NOBMI2-NEXT:    andl %esi, %edx
-; NOBMI2-NEXT:    movl %edi, %r8d
-; NOBMI2-NEXT:    andl %edx, %r8d
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    shrl %r8d
-; NOBMI2-NEXT:    orl %edi, %r8d
-; NOBMI2-NEXT:    xorl %edx, %esi
-; NOBMI2-NEXT:    shrl %edx
-; NOBMI2-NEXT:    orl %esi, %edx
-; NOBMI2-NEXT:    notl %eax
-; NOBMI2-NEXT:    andl %ecx, %eax
-; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    leal (,%rax,4), %esi
-; NOBMI2-NEXT:    leal (,%rax,8), %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    xorl %ecx, %edi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $4, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $5, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $6, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    xorl %edi, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $7, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $8, %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $9, %esi
-; NOBMI2-NEXT:    xorl %edi, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $10, %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    xorl %ecx, %edi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $11, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $12, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $13, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $14, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %r9d
-; NOBMI2-NEXT:    shll $15, %r9d
-; NOBMI2-NEXT:    xorl %esi, %r9d
-; NOBMI2-NEXT:    xorl %edi, %r9d
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $16, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $17, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $18, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $19, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $20, %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $21, %ecx
-; NOBMI2-NEXT:    xorl %edi, %ecx
-; NOBMI2-NEXT:    xorl %r9d, %ecx
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $22, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $23, %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $24, %esi
-; NOBMI2-NEXT:    xorl %edi, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $25, %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $26, %esi
-; NOBMI2-NEXT:    xorl %edi, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $27, %edi
-; NOBMI2-NEXT:    xorl %esi, %edi
-; NOBMI2-NEXT:    movl %eax, %esi
-; NOBMI2-NEXT:    shll $28, %esi
-; NOBMI2-NEXT:    xorl %edi, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %eax, %edi
-; NOBMI2-NEXT:    shll $29, %edi
-; NOBMI2-NEXT:    movl %eax, %ecx
-; NOBMI2-NEXT:    shll $30, %ecx
-; NOBMI2-NEXT:    xorl %edi, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %ecx, %esi
-; NOBMI2-NEXT:    andl %edx, %esi
-; NOBMI2-NEXT:    movl %r8d, %r9d
-; NOBMI2-NEXT:    andl %esi, %r9d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    shrl $2, %r9d
-; NOBMI2-NEXT:    orl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %esi, %edx
-; NOBMI2-NEXT:    shrl $2, %esi
-; NOBMI2-NEXT:    orl %edx, %esi
-; NOBMI2-NEXT:    notl %ecx
-; NOBMI2-NEXT:    andl %eax, %ecx
-; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
-; NOBMI2-NEXT:    xorl %ecx, %eax
-; NOBMI2-NEXT:    leal (,%rcx,4), %edx
-; NOBMI2-NEXT:    leal (,%rcx,8), %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    xorl %eax, %edi
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $4, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $5, %edx
-; NOBMI2-NEXT:    xorl %eax, %edx
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $6, %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    xorl %edi, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $7, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $8, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $9, %edx
-; NOBMI2-NEXT:    xorl %edi, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $10, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    xorl %eax, %edi
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $11, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $12, %edx
-; NOBMI2-NEXT:    xorl %eax, %edx
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $13, %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $14, %edx
-; NOBMI2-NEXT:    xorl %eax, %edx
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $15, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $16, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $17, %edx
-; NOBMI2-NEXT:    xorl %eax, %edx
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $18, %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $19, %edx
-; NOBMI2-NEXT:    xorl %eax, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $20, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $21, %eax
-; NOBMI2-NEXT:    xorl %edi, %eax
-; NOBMI2-NEXT:    xorl %r8d, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $22, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $23, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $24, %edx
-; NOBMI2-NEXT:    xorl %edi, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $25, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $26, %edx
-; NOBMI2-NEXT:    xorl %edi, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $27, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $28, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    xorl %eax, %r8d
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    shll $29, %eax
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $30, %edx
-; NOBMI2-NEXT:    xorl %eax, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    movl %edx, %edi
-; NOBMI2-NEXT:    andl %esi, %edi
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    andl %edi, %r8d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    shrl $4, %r8d
-; NOBMI2-NEXT:    orl %r9d, %r8d
-; NOBMI2-NEXT:    xorl %edi, %esi
-; NOBMI2-NEXT:    shrl $4, %edi
-; NOBMI2-NEXT:    orl %esi, %edi
-; NOBMI2-NEXT:    notl %edx
-; NOBMI2-NEXT:    andl %ecx, %edx
-; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
-; NOBMI2-NEXT:    leal (,%rdx,8), %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    xorl %eax, %esi
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $4, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $5, %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $6, %eax
-; NOBMI2-NEXT:    xorl %ecx, %eax
-; NOBMI2-NEXT:    xorl %esi, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $7, %ecx
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    shll $8, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $9, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    shll $10, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    xorl %eax, %esi
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $11, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $12, %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $13, %eax
-; NOBMI2-NEXT:    xorl %ecx, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $14, %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $15, %r9d
-; NOBMI2-NEXT:    xorl %ecx, %r9d
-; NOBMI2-NEXT:    xorl %esi, %r9d
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $16, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $17, %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $18, %eax
-; NOBMI2-NEXT:    xorl %ecx, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $19, %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    shll $20, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $21, %eax
-; NOBMI2-NEXT:    xorl %esi, %eax
-; NOBMI2-NEXT:    xorl %r9d, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $22, %ecx
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    shll $23, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $24, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    shll $25, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $26, %ecx
-; NOBMI2-NEXT:    xorl %esi, %ecx
-; NOBMI2-NEXT:    movl %edx, %esi
-; NOBMI2-NEXT:    shll $27, %esi
-; NOBMI2-NEXT:    xorl %ecx, %esi
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $28, %r9d
-; NOBMI2-NEXT:    xorl %esi, %r9d
-; NOBMI2-NEXT:    xorl %eax, %r9d
-; NOBMI2-NEXT:    movl %edx, %eax
-; NOBMI2-NEXT:    shll $29, %eax
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $30, %ecx
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    xorl %r9d, %ecx
-; NOBMI2-NEXT:    movl %ecx, %eax
-; NOBMI2-NEXT:    andl %edi, %eax
-; NOBMI2-NEXT:    movl %r8d, %esi
-; NOBMI2-NEXT:    andl %eax, %esi
-; NOBMI2-NEXT:    xorl %esi, %r8d
-; NOBMI2-NEXT:    shrl $8, %esi
-; NOBMI2-NEXT:    orl %r8d, %esi
-; NOBMI2-NEXT:    xorl %eax, %edi
-; NOBMI2-NEXT:    shrl $8, %eax
-; NOBMI2-NEXT:    orl %edi, %eax
-; NOBMI2-NEXT:    notl %ecx
-; NOBMI2-NEXT:    andl %edx, %ecx
-; NOBMI2-NEXT:    leal (%rcx,%rcx), %edx
-; NOBMI2-NEXT:    xorl %ecx, %edx
-; NOBMI2-NEXT:    leal (,%rcx,4), %edi
-; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $4, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $5, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $6, %edx
-; NOBMI2-NEXT:    xorl %edi, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $7, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $8, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $9, %edi
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $10, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    xorl %edx, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $11, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $12, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $13, %edx
-; NOBMI2-NEXT:    xorl %edi, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $14, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %r9d
-; NOBMI2-NEXT:    shll $15, %r9d
-; NOBMI2-NEXT:    xorl %edi, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $16, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $17, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $18, %edx
-; NOBMI2-NEXT:    xorl %edi, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $19, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $20, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $21, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    xorl %r9d, %edx
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $22, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $23, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $24, %edi
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $25, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $26, %edi
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    movl %ecx, %r8d
-; NOBMI2-NEXT:    shll $27, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    movl %ecx, %edi
-; NOBMI2-NEXT:    shll $28, %edi
-; NOBMI2-NEXT:    xorl %r8d, %edi
-; NOBMI2-NEXT:    xorl %edx, %edi
-; NOBMI2-NEXT:    movl %ecx, %edx
-; NOBMI2-NEXT:    shll $29, %edx
-; NOBMI2-NEXT:    shll $30, %ecx
-; NOBMI2-NEXT:    xorl %edx, %ecx
-; NOBMI2-NEXT:    xorl %edi, %ecx
-; NOBMI2-NEXT:    andl %esi, %eax
-; NOBMI2-NEXT:    andl %ecx, %eax
-; NOBMI2-NEXT:    xorl %eax, %esi
-; NOBMI2-NEXT:    shrl $16, %eax
-; NOBMI2-NEXT:    orl %esi, %eax
-; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 %mask)
-  ret i32 %res
-}
-
-define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
-; BMI2-LABEL: bdep_i32:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    pdepl %esi, %edi, %eax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bdep_i32:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    pushq %rbp
-; NOBMI2-NEXT:    pushq %r14
-; NOBMI2-NEXT:    pushq %rbx
-; NOBMI2-NEXT:    movl %esi, %edx
-; NOBMI2-NEXT:    notl %edx
-; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
-; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
-; NOBMI2-NEXT:    xorl %eax, %ecx
-; NOBMI2-NEXT:    leal (,%rdx,8), %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $4, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %ecx, %r9d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $5, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $6, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $7, %ecx
-; NOBMI2-NEXT:    xorl %r8d, %ecx
-; NOBMI2-NEXT:    xorl %r9d, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $8, %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $9, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $10, %r8d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $11, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    xorl %ecx, %r9d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $12, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $13, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $14, %ecx
-; NOBMI2-NEXT:    xorl %r8d, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $15, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %edx, %r10d
-; NOBMI2-NEXT:    shll $16, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    xorl %r9d, %r10d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $17, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $18, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $19, %ecx
-; NOBMI2-NEXT:    xorl %r8d, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $20, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $21, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %edx, %ecx
-; NOBMI2-NEXT:    shll $22, %ecx
-; NOBMI2-NEXT:    xorl %r9d, %ecx
-; NOBMI2-NEXT:    xorl %r10d, %ecx
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $23, %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $24, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $25, %r8d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $26, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $27, %r8d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    movl %edx, %r9d
-; NOBMI2-NEXT:    shll $28, %r9d
-; NOBMI2-NEXT:    xorl %r8d, %r9d
-; NOBMI2-NEXT:    movl %edx, %r8d
-; NOBMI2-NEXT:    shll $29, %r8d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    xorl %ecx, %r8d
-; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %edx, %ecx
 ; NOBMI2-NEXT:    shll $30, %ecx
 ; NOBMI2-NEXT:    shll $31, %edx
 ; NOBMI2-NEXT:    xorl %ecx, %edx
@@ -1422,1416 +604,234 @@ define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
 ; NOBMI2-NEXT:    xorl %r9d, %r11d
 ; NOBMI2-NEXT:    movl %r8d, %ebx
 ; NOBMI2-NEXT:    shll $28, %ebx
-; NOBMI2-NEXT:    xorl %r11d, %ebx
-; NOBMI2-NEXT:    xorl %edx, %ebx
-; NOBMI2-NEXT:    movl %r8d, %edx
-; NOBMI2-NEXT:    shll $29, %edx
-; NOBMI2-NEXT:    movl %r8d, %r9d
-; NOBMI2-NEXT:    shll $30, %r9d
-; NOBMI2-NEXT:    xorl %edx, %r9d
-; NOBMI2-NEXT:    xorl %ebx, %r9d
-; NOBMI2-NEXT:    movl %r9d, %edx
-; NOBMI2-NEXT:    andl %r10d, %edx
-; NOBMI2-NEXT:    xorl %edx, %r10d
-; NOBMI2-NEXT:    movl %edx, %r11d
-; NOBMI2-NEXT:    shrl $4, %r11d
-; NOBMI2-NEXT:    orl %r10d, %r11d
-; NOBMI2-NEXT:    notl %r9d
-; NOBMI2-NEXT:    andl %r8d, %r9d
-; NOBMI2-NEXT:    leal (%r9,%r9), %r8d
-; NOBMI2-NEXT:    xorl %r9d, %r8d
-; NOBMI2-NEXT:    leal (,%r9,4), %r10d
-; NOBMI2-NEXT:    leal (,%r9,8), %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    xorl %r8d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $4, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $5, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $6, %r8d
-; NOBMI2-NEXT:    xorl %r10d, %r8d
-; NOBMI2-NEXT:    xorl %ebx, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $7, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebx
-; NOBMI2-NEXT:    shll $8, %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $9, %r10d
-; NOBMI2-NEXT:    xorl %ebx, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebx
-; NOBMI2-NEXT:    shll $10, %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    xorl %r8d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $11, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $12, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $13, %r8d
-; NOBMI2-NEXT:    xorl %r10d, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $14, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebp
-; NOBMI2-NEXT:    shll $15, %ebp
-; NOBMI2-NEXT:    xorl %r10d, %ebp
-; NOBMI2-NEXT:    xorl %ebx, %ebp
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $16, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $17, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $18, %r8d
-; NOBMI2-NEXT:    xorl %r10d, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $19, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebx
-; NOBMI2-NEXT:    shll $20, %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $21, %r8d
-; NOBMI2-NEXT:    xorl %ebx, %r8d
-; NOBMI2-NEXT:    xorl %ebp, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $22, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebx
-; NOBMI2-NEXT:    shll $23, %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $24, %r10d
-; NOBMI2-NEXT:    xorl %ebx, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebx
-; NOBMI2-NEXT:    shll $25, %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $26, %r10d
-; NOBMI2-NEXT:    xorl %ebx, %r10d
-; NOBMI2-NEXT:    movl %r9d, %ebx
-; NOBMI2-NEXT:    shll $27, %ebx
-; NOBMI2-NEXT:    xorl %r10d, %ebx
-; NOBMI2-NEXT:    movl %r9d, %ebp
-; NOBMI2-NEXT:    shll $28, %ebp
-; NOBMI2-NEXT:    xorl %ebx, %ebp
-; NOBMI2-NEXT:    xorl %r8d, %ebp
-; NOBMI2-NEXT:    movl %r9d, %r8d
-; NOBMI2-NEXT:    shll $29, %r8d
-; NOBMI2-NEXT:    movl %r9d, %r10d
-; NOBMI2-NEXT:    shll $30, %r10d
-; NOBMI2-NEXT:    xorl %r8d, %r10d
-; NOBMI2-NEXT:    xorl %ebp, %r10d
-; NOBMI2-NEXT:    movl %r10d, %r8d
-; NOBMI2-NEXT:    andl %r11d, %r8d
-; NOBMI2-NEXT:    xorl %r8d, %r11d
-; NOBMI2-NEXT:    movl %r8d, %ebx
-; NOBMI2-NEXT:    shrl $8, %ebx
-; NOBMI2-NEXT:    orl %r11d, %ebx
-; NOBMI2-NEXT:    notl %r10d
-; NOBMI2-NEXT:    andl %r9d, %r10d
-; NOBMI2-NEXT:    leal (%r10,%r10), %r9d
-; NOBMI2-NEXT:    xorl %r10d, %r9d
-; NOBMI2-NEXT:    leal (,%r10,4), %r11d
-; NOBMI2-NEXT:    leal (,%r10,8), %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    xorl %r9d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $4, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $5, %r11d
-; NOBMI2-NEXT:    xorl %r9d, %r11d
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $6, %r9d
-; NOBMI2-NEXT:    xorl %r11d, %r9d
-; NOBMI2-NEXT:    xorl %ebp, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $7, %r11d
-; NOBMI2-NEXT:    movl %r10d, %ebp
-; NOBMI2-NEXT:    shll $8, %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $9, %r11d
-; NOBMI2-NEXT:    xorl %ebp, %r11d
-; NOBMI2-NEXT:    movl %r10d, %ebp
-; NOBMI2-NEXT:    shll $10, %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    xorl %r9d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $11, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $12, %r11d
-; NOBMI2-NEXT:    xorl %r9d, %r11d
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $13, %r9d
-; NOBMI2-NEXT:    xorl %r11d, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $14, %r11d
-; NOBMI2-NEXT:    xorl %r9d, %r11d
-; NOBMI2-NEXT:    movl %r10d, %r14d
-; NOBMI2-NEXT:    shll $15, %r14d
-; NOBMI2-NEXT:    xorl %r11d, %r14d
-; NOBMI2-NEXT:    xorl %ebp, %r14d
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $16, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $17, %r11d
-; NOBMI2-NEXT:    xorl %r9d, %r11d
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $18, %r9d
-; NOBMI2-NEXT:    xorl %r11d, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $19, %r11d
-; NOBMI2-NEXT:    xorl %r9d, %r11d
-; NOBMI2-NEXT:    movl %r10d, %ebp
-; NOBMI2-NEXT:    shll $20, %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $21, %r9d
-; NOBMI2-NEXT:    xorl %ebp, %r9d
-; NOBMI2-NEXT:    xorl %r14d, %r9d
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $22, %r11d
-; NOBMI2-NEXT:    movl %r10d, %ebp
-; NOBMI2-NEXT:    shll $23, %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $24, %r11d
-; NOBMI2-NEXT:    xorl %ebp, %r11d
-; NOBMI2-NEXT:    movl %r10d, %ebp
-; NOBMI2-NEXT:    shll $25, %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $26, %r11d
-; NOBMI2-NEXT:    xorl %ebp, %r11d
-; NOBMI2-NEXT:    movl %r10d, %ebp
-; NOBMI2-NEXT:    shll $27, %ebp
-; NOBMI2-NEXT:    xorl %r11d, %ebp
-; NOBMI2-NEXT:    movl %r10d, %r11d
-; NOBMI2-NEXT:    shll $28, %r11d
-; NOBMI2-NEXT:    xorl %ebp, %r11d
-; NOBMI2-NEXT:    xorl %r9d, %r11d
-; NOBMI2-NEXT:    movl %r10d, %r9d
-; NOBMI2-NEXT:    shll $29, %r9d
-; NOBMI2-NEXT:    shll $30, %r10d
-; NOBMI2-NEXT:    xorl %r9d, %r10d
-; NOBMI2-NEXT:    xorl %r11d, %r10d
-; NOBMI2-NEXT:    movl %edi, %r9d
-; NOBMI2-NEXT:    shll $16, %r9d
-; NOBMI2-NEXT:    xorl %edi, %r9d
-; NOBMI2-NEXT:    andl %ebx, %r9d
-; NOBMI2-NEXT:    andl %r10d, %r9d
-; NOBMI2-NEXT:    xorl %edi, %r9d
-; NOBMI2-NEXT:    movl %r9d, %edi
-; NOBMI2-NEXT:    shll $8, %edi
-; NOBMI2-NEXT:    xorl %r9d, %edi
-; NOBMI2-NEXT:    andl %r8d, %edi
-; NOBMI2-NEXT:    xorl %r9d, %edi
-; NOBMI2-NEXT:    movl %edi, %r8d
-; NOBMI2-NEXT:    shll $4, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    andl %edx, %r8d
-; NOBMI2-NEXT:    xorl %edi, %r8d
-; NOBMI2-NEXT:    leal (,%r8,4), %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    andl %eax, %edx
-; NOBMI2-NEXT:    xorl %r8d, %edx
-; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    andl %ecx, %eax
-; NOBMI2-NEXT:    xorl %edx, %eax
-; NOBMI2-NEXT:    andl %esi, %eax
-; NOBMI2-NEXT:    popq %rbx
-; NOBMI2-NEXT:    popq %r14
-; NOBMI2-NEXT:    popq %rbp
-; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
-  ret i32 %res
-}
-
-define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
-; BMI2-LABEL: bext_i64:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    pextq %rsi, %rdi, %rax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bext_i64:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    andq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rsi, %rax
-; NOBMI2-NEXT:    notq %rax
-; NOBMI2-NEXT:    leaq (,%rax,4), %rdx
-; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
-; NOBMI2-NEXT:    xorq %rcx, %rdx
-; NOBMI2-NEXT:    leaq (,%rax,8), %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $4, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $5, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $6, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $7, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $8, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $9, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $10, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $11, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $12, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $13, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $14, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $15, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $16, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $17, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $18, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $19, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $20, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r10
-; NOBMI2-NEXT:    shlq $21, %r10
-; NOBMI2-NEXT:    xorq %r9, %r10
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $22, %r8
-; NOBMI2-NEXT:    xorq %r10, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $23, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $24, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $25, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $26, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $27, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $28, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $29, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $30, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $31, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $32, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $33, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $34, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $35, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r10
-; NOBMI2-NEXT:    shlq $36, %r10
-; NOBMI2-NEXT:    xorq %r9, %r10
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $37, %r8
-; NOBMI2-NEXT:    xorq %r10, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $38, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $39, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $40, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $41, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $42, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $43, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $44, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $45, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $46, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $47, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $48, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $49, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $50, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $51, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $52, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $53, %r8
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $54, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rax, %r10
-; NOBMI2-NEXT:    shlq $55, %r10
-; NOBMI2-NEXT:    xorq %r9, %r10
-; NOBMI2-NEXT:    movq %rax, %r8
-; NOBMI2-NEXT:    shlq $56, %r8
-; NOBMI2-NEXT:    xorq %r10, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $57, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $58, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $59, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $60, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    shlq $61, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $62, %r9
-; NOBMI2-NEXT:    xorq %rdx, %r9
-; NOBMI2-NEXT:    shlq $63, %rax
-; NOBMI2-NEXT:    xorq %r9, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    andq %rsi, %rdx
-; NOBMI2-NEXT:    movq %rdi, %r8
-; NOBMI2-NEXT:    andq %rdx, %r8
-; NOBMI2-NEXT:    xorq %r8, %rdi
-; NOBMI2-NEXT:    shrq %r8
-; NOBMI2-NEXT:    orq %rdi, %r8
-; NOBMI2-NEXT:    xorq %rdx, %rsi
-; NOBMI2-NEXT:    shrq %rdx
-; NOBMI2-NEXT:    orq %rsi, %rdx
-; NOBMI2-NEXT:    notq %rax
-; NOBMI2-NEXT:    andq %rcx, %rax
-; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
-; NOBMI2-NEXT:    xorq %rax, %rcx
-; NOBMI2-NEXT:    leaq (,%rax,4), %rsi
-; NOBMI2-NEXT:    leaq (,%rax,8), %rdi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $4, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $5, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $6, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $7, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $8, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $9, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $10, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $11, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $12, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $13, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $14, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $15, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $16, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $17, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $18, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $19, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $20, %r9
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $21, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $22, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $23, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $24, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $25, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $26, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $27, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $28, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $29, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $30, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $31, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $32, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $33, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $34, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $35, %r9
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $36, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $37, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $38, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $39, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $40, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $41, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $42, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $43, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $44, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $45, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $46, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $47, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $48, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $49, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $50, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $51, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $52, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $53, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $54, %r9
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $55, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $56, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $57, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $58, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $59, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $60, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $61, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $62, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rcx, %rsi
-; NOBMI2-NEXT:    andq %rdx, %rsi
-; NOBMI2-NEXT:    movq %r8, %rdi
-; NOBMI2-NEXT:    andq %rsi, %rdi
-; NOBMI2-NEXT:    xorq %rdi, %r8
-; NOBMI2-NEXT:    shrq $2, %rdi
-; NOBMI2-NEXT:    orq %r8, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdx
-; NOBMI2-NEXT:    shrq $2, %rsi
-; NOBMI2-NEXT:    orq %rdx, %rsi
-; NOBMI2-NEXT:    notq %rcx
-; NOBMI2-NEXT:    andq %rax, %rcx
-; NOBMI2-NEXT:    leaq (%rcx,%rcx), %rax
-; NOBMI2-NEXT:    xorq %rcx, %rax
-; NOBMI2-NEXT:    leaq (,%rcx,4), %rdx
-; NOBMI2-NEXT:    leaq (,%rcx,8), %r8
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $4, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $5, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $6, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $7, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $8, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $9, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $10, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $11, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $12, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $13, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $14, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $15, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $16, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $17, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $18, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $19, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %r9
-; NOBMI2-NEXT:    shlq $20, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $21, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $22, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $23, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $24, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $25, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $26, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $27, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $28, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $29, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $30, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $31, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $32, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $33, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $34, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %r9
-; NOBMI2-NEXT:    shlq $35, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $36, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $37, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $38, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $39, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $40, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $41, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $42, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $43, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $44, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $45, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $46, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $47, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $48, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $49, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $50, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $51, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $52, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $53, %r8
-; NOBMI2-NEXT:    xorq %rdx, %r8
-; NOBMI2-NEXT:    movq %rcx, %r9
-; NOBMI2-NEXT:    shlq $54, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $55, %rdx
-; NOBMI2-NEXT:    xorq %r9, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $56, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $57, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $58, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $59, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $60, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $61, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $62, %rax
-; NOBMI2-NEXT:    xorq %r8, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rax, %rdx
-; NOBMI2-NEXT:    andq %rsi, %rdx
-; NOBMI2-NEXT:    movq %rdi, %r8
-; NOBMI2-NEXT:    andq %rdx, %r8
-; NOBMI2-NEXT:    xorq %r8, %rdi
-; NOBMI2-NEXT:    shrq $4, %r8
-; NOBMI2-NEXT:    orq %rdi, %r8
-; NOBMI2-NEXT:    xorq %rdx, %rsi
-; NOBMI2-NEXT:    shrq $4, %rdx
-; NOBMI2-NEXT:    orq %rsi, %rdx
-; NOBMI2-NEXT:    notq %rax
-; NOBMI2-NEXT:    andq %rcx, %rax
-; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
-; NOBMI2-NEXT:    xorq %rax, %rcx
-; NOBMI2-NEXT:    leaq (,%rax,4), %rsi
-; NOBMI2-NEXT:    leaq (,%rax,8), %rdi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $4, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $5, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $6, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $7, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $8, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $9, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $10, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $11, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $12, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $13, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $14, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $15, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $16, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $17, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $18, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $19, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $20, %r9
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $21, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $22, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $23, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $24, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $25, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $26, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $27, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $28, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $29, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $30, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $31, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $32, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $33, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $34, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $35, %r9
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $36, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $37, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $38, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $39, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $40, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $41, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $42, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $43, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $44, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $45, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $46, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $47, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $48, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $49, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $50, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $51, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $52, %rsi
-; NOBMI2-NEXT:    xorq %rdi, %rsi
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $53, %rdi
-; NOBMI2-NEXT:    xorq %rsi, %rdi
-; NOBMI2-NEXT:    movq %rax, %r9
-; NOBMI2-NEXT:    shlq $54, %r9
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    movq %rax, %rsi
-; NOBMI2-NEXT:    shlq $55, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $56, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $57, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $58, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $59, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $60, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    movq %rax, %rdi
-; NOBMI2-NEXT:    shlq $61, %rdi
-; NOBMI2-NEXT:    xorq %rcx, %rdi
-; NOBMI2-NEXT:    movq %rax, %rcx
-; NOBMI2-NEXT:    shlq $62, %rcx
-; NOBMI2-NEXT:    xorq %rdi, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rcx, %rsi
-; NOBMI2-NEXT:    andq %rdx, %rsi
-; NOBMI2-NEXT:    movq %r8, %r9
-; NOBMI2-NEXT:    andq %rsi, %r9
-; NOBMI2-NEXT:    xorq %r9, %r8
-; NOBMI2-NEXT:    shrq $8, %r9
-; NOBMI2-NEXT:    orq %r8, %r9
-; NOBMI2-NEXT:    xorq %rsi, %rdx
-; NOBMI2-NEXT:    shrq $8, %rsi
-; NOBMI2-NEXT:    orq %rdx, %rsi
-; NOBMI2-NEXT:    notq %rcx
-; NOBMI2-NEXT:    andq %rax, %rcx
-; NOBMI2-NEXT:    leaq (%rcx,%rcx), %rax
-; NOBMI2-NEXT:    xorq %rcx, %rax
-; NOBMI2-NEXT:    leaq (,%rcx,4), %rdx
-; NOBMI2-NEXT:    leaq (,%rcx,8), %rdi
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $4, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $5, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $6, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $7, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $8, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $9, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $10, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $11, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $12, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $13, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $14, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $15, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $16, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $17, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $18, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $19, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $20, %r8
-; NOBMI2-NEXT:    xorq %rdi, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $21, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $22, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $23, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $24, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $25, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $26, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $27, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $28, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $29, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $30, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $31, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $32, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $33, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $34, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $35, %r8
-; NOBMI2-NEXT:    xorq %rdi, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $36, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $37, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $38, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $39, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $40, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $41, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $42, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $43, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $44, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $45, %rax
-; NOBMI2-NEXT:    xorq %rdi, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $46, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $47, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $48, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $49, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $50, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $51, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $52, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $53, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $54, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rdi
-; NOBMI2-NEXT:    shlq $55, %rdi
-; NOBMI2-NEXT:    xorq %rdx, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $56, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $57, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $58, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $59, %rdx
-; NOBMI2-NEXT:    xorq %rax, %rdx
-; NOBMI2-NEXT:    movq %rcx, %rax
-; NOBMI2-NEXT:    shlq $60, %rax
-; NOBMI2-NEXT:    xorq %rdx, %rax
-; NOBMI2-NEXT:    movq %rcx, %r8
-; NOBMI2-NEXT:    shlq $61, %r8
-; NOBMI2-NEXT:    xorq %rax, %r8
-; NOBMI2-NEXT:    movq %rcx, %rdx
-; NOBMI2-NEXT:    shlq $62, %rdx
-; NOBMI2-NEXT:    xorq %r8, %rdx
-; NOBMI2-NEXT:    xorq %rdi, %rdx
-; NOBMI2-NEXT:    movq %rdx, %rax
-; NOBMI2-NEXT:    andq %rsi, %rax
-; NOBMI2-NEXT:    movq %r9, %rdi
-; NOBMI2-NEXT:    andq %rax, %rdi
-; NOBMI2-NEXT:    xorq %rdi, %r9
-; NOBMI2-NEXT:    shrq $16, %rdi
-; NOBMI2-NEXT:    orq %r9, %rdi
-; NOBMI2-NEXT:    xorq %rax, %rsi
-; NOBMI2-NEXT:    shrq $16, %rax
-; NOBMI2-NEXT:    orq %rsi, %rax
-; NOBMI2-NEXT:    notq %rdx
-; NOBMI2-NEXT:    andq %rcx, %rdx
-; NOBMI2-NEXT:    leaq (%rdx,%rdx), %rcx
-; NOBMI2-NEXT:    xorq %rdx, %rcx
-; NOBMI2-NEXT:    leaq (,%rdx,4), %rsi
-; NOBMI2-NEXT:    leaq (,%rdx,8), %r8
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $4, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $5, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $6, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $7, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $8, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $9, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $10, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $11, %rcx
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $12, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $13, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $14, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $15, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $16, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $17, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $18, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $19, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %r9
-; NOBMI2-NEXT:    shlq $20, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $21, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $22, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $23, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $24, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $25, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $26, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $27, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $28, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $29, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $30, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $31, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $32, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $33, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $34, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %r9
-; NOBMI2-NEXT:    shlq $35, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $36, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $37, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $38, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $39, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $40, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $41, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $42, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $43, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $44, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $45, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    xorq %rsi, %rcx
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $46, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $47, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $48, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $49, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $50, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $51, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $52, %rsi
-; NOBMI2-NEXT:    xorq %r8, %rsi
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $53, %r8
-; NOBMI2-NEXT:    xorq %rsi, %r8
-; NOBMI2-NEXT:    movq %rdx, %r9
-; NOBMI2-NEXT:    shlq $54, %r9
-; NOBMI2-NEXT:    xorq %r8, %r9
-; NOBMI2-NEXT:    movq %rdx, %rsi
-; NOBMI2-NEXT:    shlq $55, %rsi
-; NOBMI2-NEXT:    xorq %r9, %rsi
-; NOBMI2-NEXT:    xorq %rcx, %rsi
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $56, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $57, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $58, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $59, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $60, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    movq %rdx, %r8
-; NOBMI2-NEXT:    shlq $61, %r8
-; NOBMI2-NEXT:    xorq %rcx, %r8
-; NOBMI2-NEXT:    movq %rdx, %rcx
-; NOBMI2-NEXT:    shlq $62, %rcx
-; NOBMI2-NEXT:    xorq %r8, %rcx
-; NOBMI2-NEXT:    shlq $63, %rdx
-; NOBMI2-NEXT:    xorq %rcx, %rdx
-; NOBMI2-NEXT:    xorq %rsi, %rdx
-; NOBMI2-NEXT:    andq %rdi, %rax
-; NOBMI2-NEXT:    andq %rdx, %rax
-; NOBMI2-NEXT:    xorq %rax, %rdi
-; NOBMI2-NEXT:    shrq $32, %rax
-; NOBMI2-NEXT:    orq %rdi, %rax
+; NOBMI2-NEXT:    xorl %r11d, %ebx
+; NOBMI2-NEXT:    xorl %edx, %ebx
+; NOBMI2-NEXT:    movl %r8d, %edx
+; NOBMI2-NEXT:    shll $29, %edx
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    shll $30, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    xorl %ebx, %r9d
+; NOBMI2-NEXT:    movl %r9d, %edx
+; NOBMI2-NEXT:    andl %r10d, %edx
+; NOBMI2-NEXT:    xorl %edx, %r10d
+; NOBMI2-NEXT:    movl %edx, %r11d
+; NOBMI2-NEXT:    shrl $4, %r11d
+; NOBMI2-NEXT:    orl %r10d, %r11d
+; NOBMI2-NEXT:    notl %r9d
+; NOBMI2-NEXT:    andl %r8d, %r9d
+; NOBMI2-NEXT:    leal (%r9,%r9), %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    leal (,%r9,4), %r10d
+; NOBMI2-NEXT:    leal (,%r9,8), %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    xorl %r8d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $4, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $5, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    xorl %ebx, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $7, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $8, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $9, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $10, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    xorl %r8d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $11, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $12, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $14, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebp
+; NOBMI2-NEXT:    shll $15, %ebp
+; NOBMI2-NEXT:    xorl %r10d, %ebp
+; NOBMI2-NEXT:    xorl %ebx, %ebp
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $16, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $17, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $18, %r8d
+; NOBMI2-NEXT:    xorl %r10d, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $19, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $20, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $21, %r8d
+; NOBMI2-NEXT:    xorl %ebx, %r8d
+; NOBMI2-NEXT:    xorl %ebp, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $22, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $23, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $24, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $25, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $26, %r10d
+; NOBMI2-NEXT:    xorl %ebx, %r10d
+; NOBMI2-NEXT:    movl %r9d, %ebx
+; NOBMI2-NEXT:    shll $27, %ebx
+; NOBMI2-NEXT:    xorl %r10d, %ebx
+; NOBMI2-NEXT:    movl %r9d, %ebp
+; NOBMI2-NEXT:    shll $28, %ebp
+; NOBMI2-NEXT:    xorl %ebx, %ebp
+; NOBMI2-NEXT:    xorl %r8d, %ebp
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    shll $29, %r8d
+; NOBMI2-NEXT:    movl %r9d, %r10d
+; NOBMI2-NEXT:    shll $30, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %ebp, %r10d
+; NOBMI2-NEXT:    movl %r10d, %r8d
+; NOBMI2-NEXT:    andl %r11d, %r8d
+; NOBMI2-NEXT:    xorl %r8d, %r11d
+; NOBMI2-NEXT:    movl %r8d, %ebx
+; NOBMI2-NEXT:    shrl $8, %ebx
+; NOBMI2-NEXT:    orl %r11d, %ebx
+; NOBMI2-NEXT:    notl %r10d
+; NOBMI2-NEXT:    andl %r9d, %r10d
+; NOBMI2-NEXT:    leal (%r10,%r10), %r9d
+; NOBMI2-NEXT:    xorl %r10d, %r9d
+; NOBMI2-NEXT:    leal (,%r10,4), %r11d
+; NOBMI2-NEXT:    leal (,%r10,8), %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    xorl %r9d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $5, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $6, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    xorl %ebp, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $7, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $8, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $9, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $10, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    xorl %r9d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $12, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $13, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $14, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r14d
+; NOBMI2-NEXT:    shll $15, %r14d
+; NOBMI2-NEXT:    xorl %r11d, %r14d
+; NOBMI2-NEXT:    xorl %ebp, %r14d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $16, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $17, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $18, %r9d
+; NOBMI2-NEXT:    xorl %r11d, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $19, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $20, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $21, %r9d
+; NOBMI2-NEXT:    xorl %ebp, %r9d
+; NOBMI2-NEXT:    xorl %r14d, %r9d
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $22, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $23, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $24, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $25, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $26, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    movl %r10d, %ebp
+; NOBMI2-NEXT:    shll $27, %ebp
+; NOBMI2-NEXT:    xorl %r11d, %ebp
+; NOBMI2-NEXT:    movl %r10d, %r11d
+; NOBMI2-NEXT:    shll $28, %r11d
+; NOBMI2-NEXT:    xorl %ebp, %r11d
+; NOBMI2-NEXT:    xorl %r9d, %r11d
+; NOBMI2-NEXT:    movl %r10d, %r9d
+; NOBMI2-NEXT:    shll $29, %r9d
+; NOBMI2-NEXT:    shll $30, %r10d
+; NOBMI2-NEXT:    xorl %r9d, %r10d
+; NOBMI2-NEXT:    xorl %r11d, %r10d
+; NOBMI2-NEXT:    movl %edi, %r9d
+; NOBMI2-NEXT:    shll $16, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    andl %ebx, %r9d
+; NOBMI2-NEXT:    andl %r10d, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    movl %r9d, %edi
+; NOBMI2-NEXT:    shll $8, %edi
+; NOBMI2-NEXT:    xorl %r9d, %edi
+; NOBMI2-NEXT:    andl %r8d, %edi
+; NOBMI2-NEXT:    xorl %r9d, %edi
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    shll $4, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    leal (,%r8,4), %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    andl %eax, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    andl %esi, %eax
+; NOBMI2-NEXT:    popq %rbx
+; NOBMI2-NEXT:    popq %r14
+; NOBMI2-NEXT:    popq %rbp
 ; NOBMI2-NEXT:    retq
-  %res = call i64 @llvm.bext.i64(i64 %val, i64 %mask)
-  ret i64 %res
+  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+  ret i32 %res
 }
 
 define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
@@ -4029,34 +2029,6 @@ define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
   ret i64 %res
 }
 
-define i32 @bext_mask_zero(i32 %val) nounwind {
-; BMI2-LABEL: bext_mask_zero:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    xorl %eax, %eax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bext_mask_zero:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    xorl %eax, %eax
-; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 0)
-  ret i32 %res
-}
-
-define i32 @bext_mask_allones(i32 %val) nounwind {
-; BMI2-LABEL: bext_mask_allones:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    movl %edi, %eax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bext_mask_allones:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    movl %edi, %eax
-; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 -1)
-  ret i32 %res
-}
-
 define i32 @bdep_mask_zero(i32 %val) nounwind {
 ; BMI2-LABEL: bdep_mask_zero:
 ; BMI2:       # %bb.0:
@@ -4085,20 +2057,6 @@ define i32 @bdep_mask_allones(i32 %val) nounwind {
   ret i32 %res
 }
 
-define i32 @bext_const_fold() nounwind {
-; BMI2-LABEL: bext_const_fold:
-; BMI2:       # %bb.0:
-; BMI2-NEXT:    movl $10, %eax
-; BMI2-NEXT:    retq
-;
-; NOBMI2-LABEL: bext_const_fold:
-; NOBMI2:       # %bb.0:
-; NOBMI2-NEXT:    movl $10, %eax
-; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 170, i32 204)
-  ret i32 %res
-}
-
 define i32 @bdep_const_fold() nounwind {
 ; BMI2-LABEL: bdep_const_fold:
 ; BMI2:       # %bb.0:
@@ -4113,11 +2071,3 @@ define i32 @bdep_const_fold() nounwind {
   ret i32 %res
 }
 
-declare i8 @llvm.bext.i8(i8, i8)
-declare i16 @llvm.bext.i16(i16, i16)
-declare i32 @llvm.bext.i32(i32, i32)
-declare i64 @llvm.bext.i64(i64, i64)
-declare i8 @llvm.bdep.i8(i8, i8)
-declare i16 @llvm.bdep.i16(i16, i16)
-declare i32 @llvm.bdep.i32(i32, i32)
-declare i64 @llvm.bdep.i64(i64, i64)
diff --git a/llvm/test/CodeGen/X86/bext.ll b/llvm/test/CodeGen/X86/bext.ll
new file mode 100644
index 0000000000000..39e70485396e3
--- /dev/null
+++ b/llvm/test/CodeGen/X86/bext.ll
@@ -0,0 +1,2050 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc < %s -mtriple=x86_64-- -mattr=+bmi2 | FileCheck %s --check-prefix=BMI2
+; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=NOBMI2
+
+define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
+; BMI2-LABEL: bext_i8:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movzbl %sil, %eax
+; BMI2-NEXT:    movzbl %dil, %ecx
+; BMI2-NEXT:    pextl %eax, %ecx, %eax
+; BMI2-NEXT:    # kill: def $al killed $al killed $eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i8:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl %esi, %ecx
+; NOBMI2-NEXT:    notb %cl
+; NOBMI2-NEXT:    leal (,%rcx,4), %edx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorb %al, %dl
+; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shlb $4, %r9b
+; NOBMI2-NEXT:    xorb %r8b, %r9b
+; NOBMI2-NEXT:    xorb %dl, %r9b
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shlb $5, %dl
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shlb $6, %r8b
+; NOBMI2-NEXT:    xorb %dl, %r8b
+; NOBMI2-NEXT:    shlb $7, %cl
+; NOBMI2-NEXT:    xorb %r8b, %cl
+; NOBMI2-NEXT:    xorb %r9b, %cl
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    andb %sil, %dl
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    andb %dl, %r8b
+; NOBMI2-NEXT:    xorb %r8b, %dil
+; NOBMI2-NEXT:    shrb %r8b
+; NOBMI2-NEXT:    orb %dil, %r8b
+; NOBMI2-NEXT:    xorb %dl, %sil
+; NOBMI2-NEXT:    shrb %dl
+; NOBMI2-NEXT:    orb %sil, %dl
+; NOBMI2-NEXT:    notb %cl
+; NOBMI2-NEXT:    andb %al, %cl
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorb %cl, %al
+; NOBMI2-NEXT:    leal (,%rcx,4), %esi
+; NOBMI2-NEXT:    leal (,%rcx,8), %edi
+; NOBMI2-NEXT:    xorb %sil, %dil
+; NOBMI2-NEXT:    xorb %al, %dil
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shlb $4, %al
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shlb $5, %r9b
+; NOBMI2-NEXT:    xorb %al, %r9b
+; NOBMI2-NEXT:    movl %ecx, %esi
+; NOBMI2-NEXT:    shlb $6, %sil
+; NOBMI2-NEXT:    xorb %r9b, %sil
+; NOBMI2-NEXT:    xorb %dil, %sil
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    andb %dl, %al
+; NOBMI2-NEXT:    movl %r8d, %edi
+; NOBMI2-NEXT:    andb %al, %dil
+; NOBMI2-NEXT:    xorb %dil, %r8b
+; NOBMI2-NEXT:    shrb $2, %dil
+; NOBMI2-NEXT:    orb %r8b, %dil
+; NOBMI2-NEXT:    xorb %al, %dl
+; NOBMI2-NEXT:    shrb $2, %al
+; NOBMI2-NEXT:    orb %dl, %al
+; NOBMI2-NEXT:    notb %sil
+; NOBMI2-NEXT:    andb %cl, %sil
+; NOBMI2-NEXT:    leal (%rsi,%rsi), %ecx
+; NOBMI2-NEXT:    xorb %sil, %cl
+; NOBMI2-NEXT:    leal (,%rsi,4), %edx
+; NOBMI2-NEXT:    leal (,%rsi,8), %r8d
+; NOBMI2-NEXT:    xorb %dl, %r8b
+; NOBMI2-NEXT:    xorb %cl, %r8b
+; NOBMI2-NEXT:    movl %esi, %ecx
+; NOBMI2-NEXT:    shlb $4, %cl
+; NOBMI2-NEXT:    movl %esi, %edx
+; NOBMI2-NEXT:    shlb $5, %dl
+; NOBMI2-NEXT:    xorb %cl, %dl
+; NOBMI2-NEXT:    shlb $6, %sil
+; NOBMI2-NEXT:    xorb %dl, %sil
+; NOBMI2-NEXT:    xorb %r8b, %sil
+; NOBMI2-NEXT:    andb %dil, %al
+; NOBMI2-NEXT:    andb %sil, %al
+; NOBMI2-NEXT:    xorb %al, %dil
+; NOBMI2-NEXT:    shrb $4, %al
+; NOBMI2-NEXT:    orb %dil, %al
+; NOBMI2-NEXT:    retq
+  %res = call i8 @llvm.bext.i8(i8 %val, i8 %mask)
+  ret i8 %res
+}
+
+define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
+; BMI2-LABEL: bext_i16:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movzwl %si, %eax
+; BMI2-NEXT:    movzwl %di, %ecx
+; BMI2-NEXT:    pextl %eax, %ecx, %eax
+; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i16:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    pushq %rbx
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    leal (,%rax,4), %edx
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $14, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    shll $15, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    xorl %r9d, %eax
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    andl %esi, %r8d
+; NOBMI2-NEXT:    movl %edi, %edx
+; NOBMI2-NEXT:    andl %r8d, %edx
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movzwl %dx, %edx
+; NOBMI2-NEXT:    shrl %edx
+; NOBMI2-NEXT:    orl %edi, %edx
+; NOBMI2-NEXT:    xorl %r8d, %esi
+; NOBMI2-NEXT:    movzwl %r8w, %edi
+; NOBMI2-NEXT:    shrl %edi
+; NOBMI2-NEXT:    orl %esi, %edi
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rax,4), %esi
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $4, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $5, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $6, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $7, %esi
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $9, %esi
+; NOBMI2-NEXT:    xorl %r8d, %esi
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    xorl %ecx, %r8d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $11, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $12, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $13, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    xorl %r8d, %ecx
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    andl %edi, %r8d
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    andl %r8d, %esi
+; NOBMI2-NEXT:    xorl %esi, %edx
+; NOBMI2-NEXT:    movzwl %si, %esi
+; NOBMI2-NEXT:    shrl $2, %esi
+; NOBMI2-NEXT:    orl %edx, %esi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movzwl %r8w, %edx
+; NOBMI2-NEXT:    shrl $2, %edx
+; NOBMI2-NEXT:    orl %edi, %edx
+; NOBMI2-NEXT:    notl %ecx
+; NOBMI2-NEXT:    andl %eax, %ecx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    leal (,%rcx,4), %edi
+; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $5, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %edi, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $7, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $9, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $12, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shll $13, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $14, %eax
+; NOBMI2-NEXT:    xorl %r9d, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    movl %esi, %edi
+; NOBMI2-NEXT:    andl %r8d, %edi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movzwl %di, %edi
+; NOBMI2-NEXT:    shrl $4, %edi
+; NOBMI2-NEXT:    orl %esi, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movzwl %r8w, %ebx
+; NOBMI2-NEXT:    shrl $4, %ebx
+; NOBMI2-NEXT:    orl %edx, %ebx
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rax,4), %edx
+; NOBMI2-NEXT:    leal (,%rax,8), %esi
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $4, %ecx
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $6, %ecx
+; NOBMI2-NEXT:    xorl %edx, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $8, %esi
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $9, %edx
+; NOBMI2-NEXT:    xorl %esi, %edx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $10, %esi
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $11, %ecx
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $13, %ecx
+; NOBMI2-NEXT:    xorl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    xorl %esi, %eax
+; NOBMI2-NEXT:    andl %edi, %ebx
+; NOBMI2-NEXT:    andl %eax, %ebx
+; NOBMI2-NEXT:    xorl %ebx, %edi
+; NOBMI2-NEXT:    movzbl %bh, %eax
+; NOBMI2-NEXT:    orl %edi, %eax
+; NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax
+; NOBMI2-NEXT:    popq %rbx
+; NOBMI2-NEXT:    retq
+  %res = call i16 @llvm.bext.i16(i16 %val, i16 %mask)
+  ret i16 %res
+}
+
+define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
+; BMI2-LABEL: bext_i32:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pextl %esi, %edi, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i32:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %esi, %eax
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    leal (,%rax,4), %edx
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    leal (,%rax,8), %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $4, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $6, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $9, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $11, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %edx, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $13, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $14, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $15, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %r10d
+; NOBMI2-NEXT:    shll $16, %r10d
+; NOBMI2-NEXT:    xorl %r8d, %r10d
+; NOBMI2-NEXT:    xorl %r9d, %r10d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $17, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $18, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $19, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $20, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $21, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $22, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    xorl %r10d, %edx
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $23, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $24, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $25, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $26, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $27, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $28, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %eax, %r8d
+; NOBMI2-NEXT:    shll $29, %r8d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    shll $30, %edx
+; NOBMI2-NEXT:    shll $31, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %eax, %edx
+; NOBMI2-NEXT:    andl %esi, %edx
+; NOBMI2-NEXT:    movl %edi, %r8d
+; NOBMI2-NEXT:    andl %edx, %r8d
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    shrl %r8d
+; NOBMI2-NEXT:    orl %edi, %r8d
+; NOBMI2-NEXT:    xorl %edx, %esi
+; NOBMI2-NEXT:    shrl %edx
+; NOBMI2-NEXT:    orl %esi, %edx
+; NOBMI2-NEXT:    notl %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    leal (%rax,%rax), %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    leal (,%rax,4), %esi
+; NOBMI2-NEXT:    leal (,%rax,8), %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    xorl %ecx, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $4, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $5, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $6, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $7, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $8, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $9, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $10, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    xorl %ecx, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $11, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $12, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $13, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $14, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %r9d
+; NOBMI2-NEXT:    shll $15, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $16, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $17, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $18, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $19, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $20, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $21, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $22, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $23, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $24, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $25, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $26, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $27, %edi
+; NOBMI2-NEXT:    xorl %esi, %edi
+; NOBMI2-NEXT:    movl %eax, %esi
+; NOBMI2-NEXT:    shll $28, %esi
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %eax, %edi
+; NOBMI2-NEXT:    shll $29, %edi
+; NOBMI2-NEXT:    movl %eax, %ecx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %ecx, %esi
+; NOBMI2-NEXT:    andl %edx, %esi
+; NOBMI2-NEXT:    movl %r8d, %r9d
+; NOBMI2-NEXT:    andl %esi, %r9d
+; NOBMI2-NEXT:    xorl %r9d, %r8d
+; NOBMI2-NEXT:    shrl $2, %r9d
+; NOBMI2-NEXT:    orl %r8d, %r9d
+; NOBMI2-NEXT:    xorl %esi, %edx
+; NOBMI2-NEXT:    shrl $2, %esi
+; NOBMI2-NEXT:    orl %edx, %esi
+; NOBMI2-NEXT:    notl %ecx
+; NOBMI2-NEXT:    andl %eax, %ecx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    leal (,%rcx,4), %edx
+; NOBMI2-NEXT:    leal (,%rcx,8), %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $5, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    xorl %edi, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $7, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $8, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $9, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $10, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $12, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $13, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $14, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $15, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $16, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $17, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $18, %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $19, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $20, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $21, %eax
+; NOBMI2-NEXT:    xorl %edi, %eax
+; NOBMI2-NEXT:    xorl %r8d, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $22, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $23, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $24, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $25, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $26, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $27, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $28, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %eax, %r8d
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    shll $29, %eax
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $30, %edx
+; NOBMI2-NEXT:    xorl %eax, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %edx, %edi
+; NOBMI2-NEXT:    andl %esi, %edi
+; NOBMI2-NEXT:    movl %r9d, %r8d
+; NOBMI2-NEXT:    andl %edi, %r8d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    shrl $4, %r8d
+; NOBMI2-NEXT:    orl %r9d, %r8d
+; NOBMI2-NEXT:    xorl %edi, %esi
+; NOBMI2-NEXT:    shrl $4, %edi
+; NOBMI2-NEXT:    orl %esi, %edi
+; NOBMI2-NEXT:    notl %edx
+; NOBMI2-NEXT:    andl %ecx, %edx
+; NOBMI2-NEXT:    leal (%rdx,%rdx), %eax
+; NOBMI2-NEXT:    xorl %edx, %eax
+; NOBMI2-NEXT:    leal (,%rdx,4), %ecx
+; NOBMI2-NEXT:    leal (,%rdx,8), %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    xorl %eax, %esi
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $4, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $5, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $6, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    xorl %esi, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $7, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $8, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $9, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $10, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    xorl %eax, %esi
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $11, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $12, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $13, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $14, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $15, %r9d
+; NOBMI2-NEXT:    xorl %ecx, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $16, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $17, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $18, %eax
+; NOBMI2-NEXT:    xorl %ecx, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $19, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $20, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $21, %eax
+; NOBMI2-NEXT:    xorl %esi, %eax
+; NOBMI2-NEXT:    xorl %r9d, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $22, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $23, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $24, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $25, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $26, %ecx
+; NOBMI2-NEXT:    xorl %esi, %ecx
+; NOBMI2-NEXT:    movl %edx, %esi
+; NOBMI2-NEXT:    shll $27, %esi
+; NOBMI2-NEXT:    xorl %ecx, %esi
+; NOBMI2-NEXT:    movl %edx, %r9d
+; NOBMI2-NEXT:    shll $28, %r9d
+; NOBMI2-NEXT:    xorl %esi, %r9d
+; NOBMI2-NEXT:    xorl %eax, %r9d
+; NOBMI2-NEXT:    movl %edx, %eax
+; NOBMI2-NEXT:    shll $29, %eax
+; NOBMI2-NEXT:    movl %edx, %ecx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    xorl %eax, %ecx
+; NOBMI2-NEXT:    xorl %r9d, %ecx
+; NOBMI2-NEXT:    movl %ecx, %eax
+; NOBMI2-NEXT:    andl %edi, %eax
+; NOBMI2-NEXT:    movl %r8d, %esi
+; NOBMI2-NEXT:    andl %eax, %esi
+; NOBMI2-NEXT:    xorl %esi, %r8d
+; NOBMI2-NEXT:    shrl $8, %esi
+; NOBMI2-NEXT:    orl %r8d, %esi
+; NOBMI2-NEXT:    xorl %eax, %edi
+; NOBMI2-NEXT:    shrl $8, %eax
+; NOBMI2-NEXT:    orl %edi, %eax
+; NOBMI2-NEXT:    notl %ecx
+; NOBMI2-NEXT:    andl %edx, %ecx
+; NOBMI2-NEXT:    leal (%rcx,%rcx), %edx
+; NOBMI2-NEXT:    xorl %ecx, %edx
+; NOBMI2-NEXT:    leal (,%rcx,4), %edi
+; NOBMI2-NEXT:    leal (,%rcx,8), %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $4, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $5, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $6, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $7, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $8, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $9, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $10, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    xorl %edx, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $11, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $12, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $13, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $14, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %r9d
+; NOBMI2-NEXT:    shll $15, %r9d
+; NOBMI2-NEXT:    xorl %edi, %r9d
+; NOBMI2-NEXT:    xorl %r8d, %r9d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $16, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $17, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $18, %edx
+; NOBMI2-NEXT:    xorl %edi, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $19, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $20, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $21, %edx
+; NOBMI2-NEXT:    xorl %r8d, %edx
+; NOBMI2-NEXT:    xorl %r9d, %edx
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $22, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $23, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $24, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $25, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $26, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    movl %ecx, %r8d
+; NOBMI2-NEXT:    shll $27, %r8d
+; NOBMI2-NEXT:    xorl %edi, %r8d
+; NOBMI2-NEXT:    movl %ecx, %edi
+; NOBMI2-NEXT:    shll $28, %edi
+; NOBMI2-NEXT:    xorl %r8d, %edi
+; NOBMI2-NEXT:    xorl %edx, %edi
+; NOBMI2-NEXT:    movl %ecx, %edx
+; NOBMI2-NEXT:    shll $29, %edx
+; NOBMI2-NEXT:    shll $30, %ecx
+; NOBMI2-NEXT:    xorl %edx, %ecx
+; NOBMI2-NEXT:    xorl %edi, %ecx
+; NOBMI2-NEXT:    andl %esi, %eax
+; NOBMI2-NEXT:    andl %ecx, %eax
+; NOBMI2-NEXT:    xorl %eax, %esi
+; NOBMI2-NEXT:    shrl $16, %eax
+; NOBMI2-NEXT:    orl %esi, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 %mask)
+  ret i32 %res
+}
+
+define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
+; BMI2-LABEL: bext_i64:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    pextq %rsi, %rdi, %rax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_i64:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    andq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rsi, %rax
+; NOBMI2-NEXT:    notq %rax
+; NOBMI2-NEXT:    leaq (,%rax,4), %rdx
+; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
+; NOBMI2-NEXT:    xorq %rcx, %rdx
+; NOBMI2-NEXT:    leaq (,%rax,8), %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $4, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $5, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $6, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $7, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $9, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $11, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $12, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $13, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $14, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $15, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $16, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $18, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shlq $21, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $22, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $23, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $24, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $25, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $26, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $27, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $28, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $29, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $31, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $33, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shlq $36, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $37, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $38, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $39, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $40, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $41, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $42, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $43, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $44, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $45, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $46, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $48, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $50, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $52, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rax, %r10
+; NOBMI2-NEXT:    shlq $55, %r10
+; NOBMI2-NEXT:    xorq %r9, %r10
+; NOBMI2-NEXT:    movq %rax, %r8
+; NOBMI2-NEXT:    shlq $56, %r8
+; NOBMI2-NEXT:    xorq %r10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $57, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $58, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $59, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $60, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    shlq $61, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $62, %r9
+; NOBMI2-NEXT:    xorq %rdx, %r9
+; NOBMI2-NEXT:    shlq $63, %rax
+; NOBMI2-NEXT:    xorq %r9, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    andq %rsi, %rdx
+; NOBMI2-NEXT:    movq %rdi, %r8
+; NOBMI2-NEXT:    andq %rdx, %r8
+; NOBMI2-NEXT:    xorq %r8, %rdi
+; NOBMI2-NEXT:    shrq %r8
+; NOBMI2-NEXT:    orq %rdi, %r8
+; NOBMI2-NEXT:    xorq %rdx, %rsi
+; NOBMI2-NEXT:    shrq %rdx
+; NOBMI2-NEXT:    orq %rsi, %rdx
+; NOBMI2-NEXT:    notq %rax
+; NOBMI2-NEXT:    andq %rcx, %rax
+; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
+; NOBMI2-NEXT:    xorq %rax, %rcx
+; NOBMI2-NEXT:    leaq (,%rax,4), %rsi
+; NOBMI2-NEXT:    leaq (,%rax,8), %rdi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $4, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $5, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $6, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $7, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $8, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $9, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $10, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $11, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $12, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $13, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $14, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $15, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $16, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $17, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $18, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $19, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $21, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $22, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $23, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $24, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $25, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $26, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $27, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $28, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $29, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $30, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $31, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $32, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $33, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $34, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $36, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $37, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $38, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $39, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $40, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $41, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $42, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $43, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $44, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $45, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $46, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $47, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $48, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $49, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $50, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $51, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $52, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $53, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $55, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $56, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $57, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $58, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $59, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $60, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $61, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $62, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rcx, %rsi
+; NOBMI2-NEXT:    andq %rdx, %rsi
+; NOBMI2-NEXT:    movq %r8, %rdi
+; NOBMI2-NEXT:    andq %rsi, %rdi
+; NOBMI2-NEXT:    xorq %rdi, %r8
+; NOBMI2-NEXT:    shrq $2, %rdi
+; NOBMI2-NEXT:    orq %r8, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdx
+; NOBMI2-NEXT:    shrq $2, %rsi
+; NOBMI2-NEXT:    orq %rdx, %rsi
+; NOBMI2-NEXT:    notq %rcx
+; NOBMI2-NEXT:    andq %rax, %rcx
+; NOBMI2-NEXT:    leaq (%rcx,%rcx), %rax
+; NOBMI2-NEXT:    xorq %rcx, %rax
+; NOBMI2-NEXT:    leaq (,%rcx,4), %rdx
+; NOBMI2-NEXT:    leaq (,%rcx,8), %r8
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $4, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $5, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $6, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $7, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $9, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $11, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $12, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $13, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $14, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $15, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $16, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $18, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $21, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $22, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $23, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $24, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $25, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $26, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $27, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $28, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $29, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $31, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $33, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $36, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $37, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $38, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $39, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $40, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $41, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $42, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $43, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $44, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $45, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $46, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $48, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $50, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $52, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %rdx, %r8
+; NOBMI2-NEXT:    movq %rcx, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $55, %rdx
+; NOBMI2-NEXT:    xorq %r9, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $56, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $57, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $58, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $59, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $60, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $61, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $62, %rax
+; NOBMI2-NEXT:    xorq %r8, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rax, %rdx
+; NOBMI2-NEXT:    andq %rsi, %rdx
+; NOBMI2-NEXT:    movq %rdi, %r8
+; NOBMI2-NEXT:    andq %rdx, %r8
+; NOBMI2-NEXT:    xorq %r8, %rdi
+; NOBMI2-NEXT:    shrq $4, %r8
+; NOBMI2-NEXT:    orq %rdi, %r8
+; NOBMI2-NEXT:    xorq %rdx, %rsi
+; NOBMI2-NEXT:    shrq $4, %rdx
+; NOBMI2-NEXT:    orq %rsi, %rdx
+; NOBMI2-NEXT:    notq %rax
+; NOBMI2-NEXT:    andq %rcx, %rax
+; NOBMI2-NEXT:    leaq (%rax,%rax), %rcx
+; NOBMI2-NEXT:    xorq %rax, %rcx
+; NOBMI2-NEXT:    leaq (,%rax,4), %rsi
+; NOBMI2-NEXT:    leaq (,%rax,8), %rdi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $4, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $5, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $6, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $7, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $8, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $9, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $10, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $11, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $12, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $13, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $14, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $15, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $16, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $17, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $18, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $19, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $21, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $22, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $23, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $24, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $25, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $26, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $27, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $28, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $29, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $30, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $31, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $32, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $33, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $34, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $36, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $37, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $38, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $39, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $40, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $41, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $42, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $43, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $44, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $45, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $46, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $47, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $48, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $49, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $50, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $51, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $52, %rsi
+; NOBMI2-NEXT:    xorq %rdi, %rsi
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $53, %rdi
+; NOBMI2-NEXT:    xorq %rsi, %rdi
+; NOBMI2-NEXT:    movq %rax, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    movq %rax, %rsi
+; NOBMI2-NEXT:    shlq $55, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $56, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $57, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $58, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $59, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $60, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    movq %rax, %rdi
+; NOBMI2-NEXT:    shlq $61, %rdi
+; NOBMI2-NEXT:    xorq %rcx, %rdi
+; NOBMI2-NEXT:    movq %rax, %rcx
+; NOBMI2-NEXT:    shlq $62, %rcx
+; NOBMI2-NEXT:    xorq %rdi, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rcx, %rsi
+; NOBMI2-NEXT:    andq %rdx, %rsi
+; NOBMI2-NEXT:    movq %r8, %r9
+; NOBMI2-NEXT:    andq %rsi, %r9
+; NOBMI2-NEXT:    xorq %r9, %r8
+; NOBMI2-NEXT:    shrq $8, %r9
+; NOBMI2-NEXT:    orq %r8, %r9
+; NOBMI2-NEXT:    xorq %rsi, %rdx
+; NOBMI2-NEXT:    shrq $8, %rsi
+; NOBMI2-NEXT:    orq %rdx, %rsi
+; NOBMI2-NEXT:    notq %rcx
+; NOBMI2-NEXT:    andq %rax, %rcx
+; NOBMI2-NEXT:    leaq (%rcx,%rcx), %rax
+; NOBMI2-NEXT:    xorq %rcx, %rax
+; NOBMI2-NEXT:    leaq (,%rcx,4), %rdx
+; NOBMI2-NEXT:    leaq (,%rcx,8), %rdi
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $4, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $5, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $6, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $7, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $8, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $9, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $10, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $11, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $12, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $13, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $14, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $15, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $16, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $17, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $18, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $19, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $20, %r8
+; NOBMI2-NEXT:    xorq %rdi, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $21, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $22, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $23, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $24, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $25, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $26, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $27, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $28, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $29, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $30, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $31, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $32, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $33, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $34, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $35, %r8
+; NOBMI2-NEXT:    xorq %rdi, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $36, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $37, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $38, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $39, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $40, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $41, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $42, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $43, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $44, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $45, %rax
+; NOBMI2-NEXT:    xorq %rdi, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $46, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $47, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $48, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $49, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $50, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $51, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $52, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $53, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $54, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rdi
+; NOBMI2-NEXT:    shlq $55, %rdi
+; NOBMI2-NEXT:    xorq %rdx, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $56, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $57, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $58, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $59, %rdx
+; NOBMI2-NEXT:    xorq %rax, %rdx
+; NOBMI2-NEXT:    movq %rcx, %rax
+; NOBMI2-NEXT:    shlq $60, %rax
+; NOBMI2-NEXT:    xorq %rdx, %rax
+; NOBMI2-NEXT:    movq %rcx, %r8
+; NOBMI2-NEXT:    shlq $61, %r8
+; NOBMI2-NEXT:    xorq %rax, %r8
+; NOBMI2-NEXT:    movq %rcx, %rdx
+; NOBMI2-NEXT:    shlq $62, %rdx
+; NOBMI2-NEXT:    xorq %r8, %rdx
+; NOBMI2-NEXT:    xorq %rdi, %rdx
+; NOBMI2-NEXT:    movq %rdx, %rax
+; NOBMI2-NEXT:    andq %rsi, %rax
+; NOBMI2-NEXT:    movq %r9, %rdi
+; NOBMI2-NEXT:    andq %rax, %rdi
+; NOBMI2-NEXT:    xorq %rdi, %r9
+; NOBMI2-NEXT:    shrq $16, %rdi
+; NOBMI2-NEXT:    orq %r9, %rdi
+; NOBMI2-NEXT:    xorq %rax, %rsi
+; NOBMI2-NEXT:    shrq $16, %rax
+; NOBMI2-NEXT:    orq %rsi, %rax
+; NOBMI2-NEXT:    notq %rdx
+; NOBMI2-NEXT:    andq %rcx, %rdx
+; NOBMI2-NEXT:    leaq (%rdx,%rdx), %rcx
+; NOBMI2-NEXT:    xorq %rdx, %rcx
+; NOBMI2-NEXT:    leaq (,%rdx,4), %rsi
+; NOBMI2-NEXT:    leaq (,%rdx,8), %r8
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $4, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $5, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $6, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $7, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $8, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $9, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $10, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $11, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $12, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $13, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $14, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $15, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $16, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $17, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $18, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $19, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $20, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $21, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $22, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $23, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $24, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $25, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $26, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $27, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $28, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $29, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $30, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $31, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $32, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $33, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $34, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $35, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $36, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $37, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $38, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $39, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $40, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $41, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $42, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $43, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $44, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $45, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    xorq %rsi, %rcx
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $46, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $47, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $48, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $49, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $50, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $51, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $52, %rsi
+; NOBMI2-NEXT:    xorq %r8, %rsi
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $53, %r8
+; NOBMI2-NEXT:    xorq %rsi, %r8
+; NOBMI2-NEXT:    movq %rdx, %r9
+; NOBMI2-NEXT:    shlq $54, %r9
+; NOBMI2-NEXT:    xorq %r8, %r9
+; NOBMI2-NEXT:    movq %rdx, %rsi
+; NOBMI2-NEXT:    shlq $55, %rsi
+; NOBMI2-NEXT:    xorq %r9, %rsi
+; NOBMI2-NEXT:    xorq %rcx, %rsi
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $56, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $57, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $58, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $59, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $60, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    movq %rdx, %r8
+; NOBMI2-NEXT:    shlq $61, %r8
+; NOBMI2-NEXT:    xorq %rcx, %r8
+; NOBMI2-NEXT:    movq %rdx, %rcx
+; NOBMI2-NEXT:    shlq $62, %rcx
+; NOBMI2-NEXT:    xorq %r8, %rcx
+; NOBMI2-NEXT:    shlq $63, %rdx
+; NOBMI2-NEXT:    xorq %rcx, %rdx
+; NOBMI2-NEXT:    xorq %rsi, %rdx
+; NOBMI2-NEXT:    andq %rdi, %rax
+; NOBMI2-NEXT:    andq %rdx, %rax
+; NOBMI2-NEXT:    xorq %rax, %rdi
+; NOBMI2-NEXT:    shrq $32, %rax
+; NOBMI2-NEXT:    orq %rdi, %rax
+; NOBMI2-NEXT:    retq
+  %res = call i64 @llvm.bext.i64(i64 %val, i64 %mask)
+  ret i64 %res
+}
+
+define i32 @bext_mask_zero(i32 %val) nounwind {
+; BMI2-LABEL: bext_mask_zero:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    xorl %eax, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_mask_zero:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    xorl %eax, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 0)
+  ret i32 %res
+}
+
+define i32 @bext_mask_allones(i32 %val) nounwind {
+; BMI2-LABEL: bext_mask_allones:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movl %edi, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_mask_allones:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl %edi, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 %val, i32 -1)
+  ret i32 %res
+}
+
+define i32 @bext_const_fold() nounwind {
+; BMI2-LABEL: bext_const_fold:
+; BMI2:       # %bb.0:
+; BMI2-NEXT:    movl $10, %eax
+; BMI2-NEXT:    retq
+;
+; NOBMI2-LABEL: bext_const_fold:
+; NOBMI2:       # %bb.0:
+; NOBMI2-NEXT:    movl $10, %eax
+; NOBMI2-NEXT:    retq
+  %res = call i32 @llvm.bext.i32(i32 170, i32 204)
+  ret i32 %res
+}
+
diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp
index a314a8b40fbe8..0303b2f121c3b 100644
--- a/llvm/unittests/Support/KnownBitsTest.cpp
+++ b/llvm/unittests/Support/KnownBitsTest.cpp
@@ -635,8 +635,6 @@ TEST(KnownBitsTest, BinaryExhaustive) {
   testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS);
 
   testBinaryOpExhaustive("clmul", KnownBits::clmul, APIntOps::clmul);
-  testBinaryOpExhaustive("bext", KnownBits::bext, APIntOps::compressBits);
-  testBinaryOpExhaustive("bdep", KnownBits::bdep, APIntOps::expandBits);
 }
 
 TEST(KnownBitsTest, UnaryExhaustive) {

>From f21515022554609125db9ccadee503e78a16b976 Mon Sep 17 00:00:00 2001
From: Eisenwave <me at eisenwave.net>
Date: Sun, 31 May 2026 06:45:33 +0200
Subject: [PATCH 3/6] Rename BEXT/BDEP to PEXT/PDEP

---
 llvm/docs/LangRef.rst                         | 42 ++++++------
 llvm/include/llvm/CodeGen/ISDOpcodes.h        |  4 +-
 llvm/include/llvm/CodeGen/TargetLowering.h    |  4 +-
 llvm/include/llvm/IR/Intrinsics.td            |  4 +-
 .../include/llvm/Target/TargetSelectionDAG.td |  4 +-
 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 28 ++++----
 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 12 ++--
 .../SelectionDAG/LegalizeIntegerTypes.cpp     | 40 ++++++------
 llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h |  8 +--
 .../SelectionDAG/LegalizeVectorOps.cpp        |  8 +--
 .../SelectionDAG/LegalizeVectorTypes.cpp      | 12 ++--
 .../lib/CodeGen/SelectionDAG/SelectionDAG.cpp |  4 +-
 .../SelectionDAG/SelectionDAGBuilder.cpp      |  8 +--
 .../SelectionDAG/SelectionDAGDumper.cpp       |  4 +-
 .../CodeGen/SelectionDAG/TargetLowering.cpp   |  4 +-
 llvm/lib/CodeGen/TargetLoweringBase.cpp       |  2 +-
 .../Target/AArch64/AArch64ISelLowering.cpp    | 18 +++---
 llvm/lib/Target/X86/X86ISelLowering.cpp       |  8 +--
 llvm/lib/Target/X86/X86InstrMisc.td           | 33 +++++-----
 .../test/CodeGen/AArch64/{bdep.ll => pdep.ll} | 64 +++++++++----------
 .../test/CodeGen/AArch64/{bext.ll => pext.ll} | 64 +++++++++----------
 llvm/test/CodeGen/X86/{bdep.ll => pdep.ll}    | 56 ++++++++--------
 llvm/test/CodeGen/X86/{bext.ll => pext.ll}    | 56 ++++++++--------
 23 files changed, 243 insertions(+), 244 deletions(-)
 rename llvm/test/CodeGen/AArch64/{bdep.ll => pdep.ll} (98%)
 rename llvm/test/CodeGen/AArch64/{bext.ll => pext.ll} (98%)
 rename llvm/test/CodeGen/X86/{bdep.ll => pdep.ll} (98%)
 rename llvm/test/CodeGen/X86/{bext.ll => pext.ll} (98%)

diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 7329f02b582c9..b77cab2f404ca 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -19242,27 +19242,27 @@ Example:
       %r = call i4 @llvm.clmul.i4(i4 -4, i4 2)   ; %r = -8
       %r = call i4 @llvm.clmul.i4(i4 -4, i4 -5)  ; %r = 4
 
-.. _int_bext:
+.. _int_pext:
 
-'``llvm.bext.*``' Intrinsic
+'``llvm.pext.*``' Intrinsic
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Syntax:
 """""""
 
-This is an overloaded intrinsic. You can use ``llvm.bext`` on any integer
+This is an overloaded intrinsic. You can use ``llvm.pext`` on any integer
 or integer vector type.
 
 ::
 
-      declare i32 @llvm.bext.i32(i32 %val, i32 %mask)
-      declare i64 @llvm.bext.i64(i64 %val, i64 %mask)
-      declare <4 x i32> @llvm.bext.v4i32(<4 x i32> %val, <4 x i32> %mask)
+      declare i32 @llvm.pext.i32(i32 %val, i32 %mask)
+      declare i64 @llvm.pext.i64(i64 %val, i64 %mask)
+      declare <4 x i32> @llvm.pext.v4i32(<4 x i32> %val, <4 x i32> %mask)
 
 Overview:
 """""""""
 
-The '``llvm.bext``' family of intrinsic functions extracts the bits from ``val``
+The '``llvm.pext``' family of intrinsic functions extracts the bits from ``val``
 where the ``mask`` has bits set and packs them contiguously in the low bits
 of the result, same as the x86 ``PEXT`` instruction.
 
@@ -19275,7 +19275,7 @@ arguments and result must have the same type.
 Semantics:
 """"""""""
 
-The '``llvm.bext``' intrinsic extracts bits from the first argument
+The '``llvm.pext``' intrinsic extracts bits from the first argument
 ``val`` at the positions indicated by set bits in ``mask``, and packs
 them contiguously into the low bits of the result. The remaining high
 bits of the result are zero.
@@ -19286,30 +19286,30 @@ of ``val``.
 
 .. code-block:: text
 
-      %r = call i8 @llvm.bext.i8(i8 0b10101010, i8 0b11001100) ; %r = 0b00001010
-      %r = call i8 @llvm.bext.i8(i8 0b11111111, i8 0b10101010) ; %r = 0b00001111
+      %r = call i8 @llvm.pext.i8(i8 0b10101010, i8 0b11001100) ; %r = 0b00001010
+      %r = call i8 @llvm.pext.i8(i8 0b11111111, i8 0b10101010) ; %r = 0b00001111
 
-.. _int_bdep:
+.. _int_pdep:
 
-'``llvm.bdep.*``' Intrinsic
+'``llvm.pdep.*``' Intrinsic
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 Syntax:
 """""""
 
-This is an overloaded intrinsic. You can use ``llvm.bdep`` on any integer or
+This is an overloaded intrinsic. You can use ``llvm.pdep`` on any integer or
 integer vector type.
 
 ::
 
-      declare i32 @llvm.bdep.i32(i32 %val, i32 %mask)
-      declare i64 @llvm.bdep.i64(i64 %val, i64 %mask)
-      declare <4 x i32> @llvm.bdep.v4i32(<4 x i32> %val, <4 x i32> %mask)
+      declare i32 @llvm.pdep.i32(i32 %val, i32 %mask)
+      declare i64 @llvm.pdep.i64(i64 %val, i64 %mask)
+      declare <4 x i32> @llvm.pdep.v4i32(<4 x i32> %val, <4 x i32> %mask)
 
 Overview:
 """""""""
 
-The '``llvm.bdep``' family of intrinsic functions deposits the low bits of
+The '``llvm.pdep``' family of intrinsic functions deposits the low bits of
 ``val`` into the result at the positions where ``mask`` has bits set, same as
 the x86 ``PDEP`` instruction.
 
@@ -19322,7 +19322,7 @@ arguments and result must have the same type.
 Semantics:
 """"""""""
 
-The '``llvm.bdep``' intrinsic takes the low bits of the first argument
+The '``llvm.pdep``' intrinsic takes the low bits of the first argument
 ``val`` and scatters them to the bit positions in the result indicated by
 set bits in ``mask``. Bits in the result at positions where ``mask`` is
 zero are zero.
@@ -19331,12 +19331,12 @@ Equivalently, if the set bit positions in ``mask`` (from LSB to MSB) are
 ``p0, p1, ..., pk``, then result bit ``pi`` equals bit ``i`` of ``val``.
 
 The operations satisfy the round-trip identity:
-``bdep(bext(val, mask), mask) == val & mask``.
+``pdep(pext(val, mask), mask) == val & mask``.
 
 .. code-block:: text
 
-      %r = call i8 @llvm.bdep.i8(i8 0b00001010, i8 0b11001100) ; %r = 0b10001000
-      %r = call i8 @llvm.bdep.i8(i8 0b00001111, i8 0b10101010) ; %r = 0b10101010
+      %r = call i8 @llvm.pdep.i8(i8 0b00001010, i8 0b11001100) ; %r = 0b10001000
+      %r = call i8 @llvm.pdep.i8(i8 0b00001111, i8 0b10101010) ; %r = 0b10101010
 
 .. _int_overflow:
 
diff --git a/llvm/include/llvm/CodeGen/ISDOpcodes.h b/llvm/include/llvm/CodeGen/ISDOpcodes.h
index ce6423a2e2726..740f851593e87 100644
--- a/llvm/include/llvm/CodeGen/ISDOpcodes.h
+++ b/llvm/include/llvm/CodeGen/ISDOpcodes.h
@@ -780,8 +780,8 @@ enum NodeType {
   CLMULH,
 
   /// Bit extract (compress) and bit deposit (expand).
-  BEXT,
-  BDEP,
+  PEXT,
+  PDEP,
 
   /// Byte Swap and Counting operators.
   BSWAP,
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index d40ed5eb35e75..3906a934f1f24 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -5575,12 +5575,12 @@ class LLVM_ABI TargetLowering : public TargetLoweringBase {
   /// Expand bit extract (compress).
   /// \param N Node to expand
   /// \returns The expansion if successful, SDValue() otherwise
-  SDValue expandBEXT(SDNode *N, SelectionDAG &DAG) const;
+  SDValue expandPEXT(SDNode *N, SelectionDAG &DAG) const;
 
   /// Expand bit deposit (expand).
   /// \param N Node to expand
   /// \returns The expansion if successful, SDValue() otherwise
-  SDValue expandBDEP(SDNode *N, SelectionDAG &DAG) const;
+  SDValue expandPDEP(SDNode *N, SelectionDAG &DAG) const;
 
   /// Expand rotations.
   /// \param N Node to expand
diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td
index 5aa34361a0987..7b2d798a14ada 100644
--- a/llvm/include/llvm/IR/Intrinsics.td
+++ b/llvm/include/llvm/IR/Intrinsics.td
@@ -1523,9 +1523,9 @@ let IntrProperties = [IntrNoMem, IntrSpeculatable, IntrNoCreateUndefOrPoison] in
       [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
   def int_clmul : DefaultAttrsIntrinsic<[llvm_anyint_ty],
       [LLVMMatchType<0>, LLVMMatchType<0>]>;
-  def int_bext : DefaultAttrsIntrinsic<[llvm_anyint_ty],
+  def int_pext : DefaultAttrsIntrinsic<[llvm_anyint_ty],
       [LLVMMatchType<0>, LLVMMatchType<0>]>;
-  def int_bdep : DefaultAttrsIntrinsic<[llvm_anyint_ty],
+  def int_pdep : DefaultAttrsIntrinsic<[llvm_anyint_ty],
       [LLVMMatchType<0>, LLVMMatchType<0>]>;
 }
 
diff --git a/llvm/include/llvm/Target/TargetSelectionDAG.td b/llvm/include/llvm/Target/TargetSelectionDAG.td
index 70cbf13fcb237..fd22d4fb6352a 100644
--- a/llvm/include/llvm/Target/TargetSelectionDAG.td
+++ b/llvm/include/llvm/Target/TargetSelectionDAG.td
@@ -480,8 +480,8 @@ def clmul      : SDNode<"ISD::CLMUL"     , SDTIntBinOp,
                         [SDNPCommutative, SDNPAssociative]>;
 def clmulr     : SDNode<"ISD::CLMULR"    , SDTIntBinOp, [SDNPCommutative]>;
 def clmulh     : SDNode<"ISD::CLMULH"    , SDTIntBinOp, [SDNPCommutative]>;
-def bext       : SDNode<"ISD::BEXT"      , SDTIntBinOp>;
-def bdep       : SDNode<"ISD::BDEP"      , SDTIntBinOp>;
+def pext       : SDNode<"ISD::PEXT"      , SDTIntBinOp>;
+def pdep       : SDNode<"ISD::PDEP"      , SDTIntBinOp>;
 def and        : SDNode<"ISD::AND"       , SDTIntBinOp,
                         [SDNPCommutative, SDNPAssociative]>;
 def or         : SDNode<"ISD::OR"        , SDTIntBinOp,
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index b1367a8be17da..21282d7aafe3d 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -474,8 +474,8 @@ namespace {
     SDValue visitABS(SDNode *N);
     SDValue visitABS_MIN_POISON(SDNode *N);
     SDValue visitCLMUL(SDNode *N);
-    SDValue visitBEXT(SDNode *N);
-    SDValue visitBDEP(SDNode *N);
+    SDValue visitPEXT(SDNode *N);
+    SDValue visitPDEP(SDNode *N);
     SDValue visitBSWAP(SDNode *N);
     SDValue visitBITREVERSE(SDNode *N);
     SDValue visitCTLZ(SDNode *N);
@@ -1998,8 +1998,8 @@ SDValue DAGCombiner::visit(SDNode *N) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:             return visitCLMUL(N);
-  case ISD::BEXT:               return visitBEXT(N);
-  case ISD::BDEP:               return visitBDEP(N);
+  case ISD::PEXT:               return visitPEXT(N);
+  case ISD::PDEP:               return visitPDEP(N);
   case ISD::BSWAP:              return visitBSWAP(N);
   case ISD::BITREVERSE:         return visitBITREVERSE(N);
   case ISD::CTLZ:               return visitCTLZ(N);
@@ -12231,38 +12231,38 @@ SDValue DAGCombiner::visitCLMUL(SDNode *N) {
   return SDValue();
 }
 
-SDValue DAGCombiner::visitBEXT(SDNode *N) {
+SDValue DAGCombiner::visitPEXT(SDNode *N) {
   EVT VT = N->getValueType(0);
   SDValue N0 = N->getOperand(0);
   SDValue N1 = N->getOperand(1);
   SDLoc DL(N);
 
-  // bext(x, 0) -> 0
+  // pext(x, 0) -> 0
   if (isNullOrNullSplat(N1))
     return DAG.getConstant(0, DL, VT);
-  // bext(x, -1) -> x  (all bits selected, packed into low positions = x)
+  // pext(x, -1) -> x  (all bits selected, packed into low positions = x)
   if (isAllOnesOrAllOnesSplat(N1))
     return N0;
-  // fold bext(c1, c2) -> compressBits(c1, c2)
-  if (SDValue C = DAG.FoldConstantArithmetic(ISD::BEXT, DL, VT, {N0, N1}))
+  // fold pext(c1, c2) -> compressBits(c1, c2)
+  if (SDValue C = DAG.FoldConstantArithmetic(ISD::PEXT, DL, VT, {N0, N1}))
     return C;
   return SDValue();
 }
 
-SDValue DAGCombiner::visitBDEP(SDNode *N) {
+SDValue DAGCombiner::visitPDEP(SDNode *N) {
   EVT VT = N->getValueType(0);
   SDValue N0 = N->getOperand(0);
   SDValue N1 = N->getOperand(1);
   SDLoc DL(N);
 
-  // bdep(x, 0) -> 0
+  // pdep(x, 0) -> 0
   if (isNullOrNullSplat(N1))
     return DAG.getConstant(0, DL, VT);
-  // bdep(x, -1) -> x  (all positions selected, bits deposited at identity)
+  // pdep(x, -1) -> x  (all positions selected, bits deposited at identity)
   if (isAllOnesOrAllOnesSplat(N1))
     return N0;
-  // fold bdep(c1, c2) -> expandBits(c1, c2)
-  if (SDValue C = DAG.FoldConstantArithmetic(ISD::BDEP, DL, VT, {N0, N1}))
+  // fold pdep(c1, c2) -> expandBits(c1, c2)
+  if (SDValue C = DAG.FoldConstantArithmetic(ISD::PDEP, DL, VT, {N0, N1}))
     return C;
   return SDValue();
 }
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index beaea49b0f5d8..90a59d2be7468 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -4196,11 +4196,11 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
     if (SDValue Expanded = TLI.expandCLMUL(Node, DAG))
       Results.push_back(Expanded);
     break;
-  case ISD::BEXT:
-    Results.push_back(TLI.expandBEXT(Node, DAG));
+  case ISD::PEXT:
+    Results.push_back(TLI.expandPEXT(Node, DAG));
     break;
-  case ISD::BDEP:
-    Results.push_back(TLI.expandBDEP(Node, DAG));
+  case ISD::PDEP:
+    Results.push_back(TLI.expandPDEP(Node, DAG));
     break;
   case ISD::SADDSAT:
   case ISD::UADDSAT:
@@ -5572,8 +5572,8 @@ void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
     Results.push_back(DAG.getNode(ISD::TRUNCATE, dl, OVT, CTLZResult));
     break;
   }
-  case ISD::BEXT:
-  case ISD::BDEP: {
+  case ISD::PEXT:
+  case ISD::PDEP: {
     Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(0));
     Tmp2 = DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, Node->getOperand(1));
     Tmp1 = DAG.getNode(Node->getOpcode(), dl, NVT, Tmp1, Tmp2);
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
index dd166e2d3e5d2..e1ec867312a67 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
@@ -370,12 +370,12 @@ void DAGTypeLegalizer::PromoteIntegerResult(SDNode *N, unsigned ResNo) {
     Res = PromoteIntRes_CLMUL(N);
     break;
 
-  case ISD::BEXT:
-    Res = PromoteIntRes_BEXT(N);
+  case ISD::PEXT:
+    Res = PromoteIntRes_PEXT(N);
     break;
 
-  case ISD::BDEP:
-    Res = PromoteIntRes_BDEP(N);
+  case ISD::PDEP:
+    Res = PromoteIntRes_PDEP(N);
     break;
 
   case ISD::IS_FPCLASS:
@@ -1771,28 +1771,28 @@ SDValue DAGTypeLegalizer::PromoteIntRes_CLMUL(SDNode *N) {
                      DAG.getShiftAmountConstant(ShAmt, VT, DL));
 }
 
-SDValue DAGTypeLegalizer::PromoteIntRes_BEXT(SDNode *N) {
+SDValue DAGTypeLegalizer::PromoteIntRes_PEXT(SDNode *N) {
   SDLoc DL(N);
   EVT VT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
-  if (!TLI.isOperationLegalOrCustomOrPromote(ISD::BEXT, VT)) {
-    if (SDValue Res = TLI.expandBEXT(N, DAG))
+  if (!TLI.isOperationLegalOrCustomOrPromote(ISD::PEXT, VT)) {
+    if (SDValue Res = TLI.expandPEXT(N, DAG))
       return DAG.getNode(ISD::ANY_EXTEND, DL, VT, Res);
   }
   SDValue X = ZExtPromotedInteger(N->getOperand(0));
   SDValue Y = ZExtPromotedInteger(N->getOperand(1));
-  return DAG.getNode(ISD::BEXT, DL, VT, X, Y);
+  return DAG.getNode(ISD::PEXT, DL, VT, X, Y);
 }
 
-SDValue DAGTypeLegalizer::PromoteIntRes_BDEP(SDNode *N) {
+SDValue DAGTypeLegalizer::PromoteIntRes_PDEP(SDNode *N) {
   SDLoc DL(N);
   EVT VT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
-  if (!TLI.isOperationLegalOrCustomOrPromote(ISD::BDEP, VT)) {
-    if (SDValue Res = TLI.expandBDEP(N, DAG))
+  if (!TLI.isOperationLegalOrCustomOrPromote(ISD::PDEP, VT)) {
+    if (SDValue Res = TLI.expandPDEP(N, DAG))
       return DAG.getNode(ISD::ANY_EXTEND, DL, VT, Res);
   }
   SDValue X = ZExtPromotedInteger(N->getOperand(0));
   SDValue Y = ZExtPromotedInteger(N->getOperand(1));
-  return DAG.getNode(ISD::BDEP, DL, VT, X, Y);
+  return DAG.getNode(ISD::PDEP, DL, VT, X, Y);
 }
 
 SDValue DAGTypeLegalizer::PromoteIntRes_TRUNCATE(SDNode *N) {
@@ -3344,12 +3344,12 @@ void DAGTypeLegalizer::ExpandIntegerResult(SDNode *N, unsigned ResNo) {
     ExpandIntRes_CLMUL(N, Lo, Hi);
     break;
 
-  case ISD::BEXT:
-    ExpandIntRes_BEXT(N, Lo, Hi);
+  case ISD::PEXT:
+    ExpandIntRes_PEXT(N, Lo, Hi);
     break;
 
-  case ISD::BDEP:
-    ExpandIntRes_BDEP(N, Lo, Hi);
+  case ISD::PDEP:
+    ExpandIntRes_PDEP(N, Lo, Hi);
     break;
 
   case ISD::VSCALE:
@@ -5661,13 +5661,13 @@ void DAGTypeLegalizer::ExpandIntRes_CLMUL(SDNode *N, SDValue &Lo, SDValue &Hi) {
   Hi = DAG.getNode(ISD::XOR, DL, HalfVT, LoH, HiLoCross);
 }
 
-void DAGTypeLegalizer::ExpandIntRes_BEXT(SDNode *N, SDValue &Lo, SDValue &Hi) {
-  SDValue Res = TLI.expandBEXT(N, DAG);
+void DAGTypeLegalizer::ExpandIntRes_PEXT(SDNode *N, SDValue &Lo, SDValue &Hi) {
+  SDValue Res = TLI.expandPEXT(N, DAG);
   SplitInteger(Res, Lo, Hi);
 }
 
-void DAGTypeLegalizer::ExpandIntRes_BDEP(SDNode *N, SDValue &Lo, SDValue &Hi) {
-  SDValue Res = TLI.expandBDEP(N, DAG);
+void DAGTypeLegalizer::ExpandIntRes_PDEP(SDNode *N, SDValue &Lo, SDValue &Hi) {
+  SDValue Res = TLI.expandPDEP(N, DAG);
   SplitInteger(Res, Lo, Hi);
 }
 
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
index 3933f05c306c8..de0203f16e94e 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
@@ -359,8 +359,8 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
   SDValue PromoteIntRes_FunnelShift(SDNode *N);
   SDValue PromoteIntRes_VPFunnelShift(SDNode *N);
   SDValue PromoteIntRes_CLMUL(SDNode *N);
-  SDValue PromoteIntRes_BEXT(SDNode *N);
-  SDValue PromoteIntRes_BDEP(SDNode *N);
+  SDValue PromoteIntRes_PEXT(SDNode *N);
+  SDValue PromoteIntRes_PDEP(SDNode *N);
   SDValue PromoteIntRes_IS_FPCLASS(SDNode *N);
   SDValue PromoteIntRes_PATCHPOINT(SDNode *N);
   SDValue PromoteIntRes_READ_REGISTER(SDNode *N);
@@ -504,8 +504,8 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
   void ExpandIntRes_Rotate            (SDNode *N, SDValue &Lo, SDValue &Hi);
   void ExpandIntRes_FunnelShift       (SDNode *N, SDValue &Lo, SDValue &Hi);
   void ExpandIntRes_CLMUL(SDNode *N, SDValue &Lo, SDValue &Hi);
-  void ExpandIntRes_BEXT(SDNode *N, SDValue &Lo, SDValue &Hi);
-  void ExpandIntRes_BDEP(SDNode *N, SDValue &Lo, SDValue &Hi);
+  void ExpandIntRes_PEXT(SDNode *N, SDValue &Lo, SDValue &Hi);
+  void ExpandIntRes_PDEP(SDNode *N, SDValue &Lo, SDValue &Hi);
 
   void ExpandIntRes_VSCALE            (SDNode *N, SDValue &Lo, SDValue &Hi);
   void ExpandIntRes_READ_REGISTER(SDNode *N, SDValue &Lo, SDValue &Hi);
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
index 0fe9309898459..3a0c3a3cab86b 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
@@ -1200,11 +1200,11 @@ void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
       return;
     }
     break;
-  case ISD::BEXT:
-    Results.push_back(TLI.expandBEXT(Node, DAG));
+  case ISD::PEXT:
+    Results.push_back(TLI.expandPEXT(Node, DAG));
     return;
-  case ISD::BDEP:
-    Results.push_back(TLI.expandBDEP(Node, DAG));
+  case ISD::PDEP:
+    Results.push_back(TLI.expandPDEP(Node, DAG));
     return;
   case ISD::ROTL:
   case ISD::ROTR:
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
index d55e921e21774..a5a35c948ee29 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
@@ -207,8 +207,8 @@ void DAGTypeLegalizer::ScalarizeVectorResult(SDNode *N, unsigned ResNo) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:
-  case ISD::BEXT:
-  case ISD::BDEP:
+  case ISD::PEXT:
+  case ISD::PDEP:
     R = ScalarizeVecRes_BinOp(N);
     break;
 
@@ -1520,8 +1520,8 @@ void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:
-  case ISD::BEXT:
-  case ISD::BDEP:
+  case ISD::PEXT:
+  case ISD::PDEP:
   case ISD::MULHS:
   case ISD::MULHU:
   case ISD::ABDS:
@@ -5209,8 +5209,8 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
   case ISD::CLMUL:
   case ISD::CLMULR:
   case ISD::CLMULH:
-  case ISD::BEXT:
-  case ISD::BDEP:
+  case ISD::PEXT:
+  case ISD::PDEP:
   case ISD::FMINNUM:
   case ISD::FMINNUM_IEEE:
   case ISD::VP_FMINNUM:
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 17f78dc0e0664..b108c671c7a8d 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -7449,9 +7449,9 @@ static std::optional<APInt> FoldValue(unsigned Opcode, const APInt &C1,
     return APIntOps::clmulr(C1, C2);
   case ISD::CLMULH:
     return APIntOps::clmulh(C1, C2);
-  case ISD::BEXT:
+  case ISD::PEXT:
     return APIntOps::compressBits(C1, C2);
-  case ISD::BDEP:
+  case ISD::PDEP:
     return APIntOps::expandBits(C1, C2);
   }
   return std::nullopt;
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index f31c1da3dcb8f..7a0bc9bec12af 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -7410,16 +7410,16 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
     setValue(&I, DAG.getNode(ISD::CLMUL, sdl, X.getValueType(), X, Y));
     return;
   }
-  case Intrinsic::bext: {
+  case Intrinsic::pext: {
     SDValue X = getValue(I.getArgOperand(0));
     SDValue Y = getValue(I.getArgOperand(1));
-    setValue(&I, DAG.getNode(ISD::BEXT, sdl, X.getValueType(), X, Y));
+    setValue(&I, DAG.getNode(ISD::PEXT, sdl, X.getValueType(), X, Y));
     return;
   }
-  case Intrinsic::bdep: {
+  case Intrinsic::pdep: {
     SDValue X = getValue(I.getArgOperand(0));
     SDValue Y = getValue(I.getArgOperand(1));
-    setValue(&I, DAG.getNode(ISD::BDEP, sdl, X.getValueType(), X, Y));
+    setValue(&I, DAG.getNode(ISD::PDEP, sdl, X.getValueType(), X, Y));
     return;
   }
   case Intrinsic::sadd_sat: {
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
index 82696812b4bfc..2564ba3e6bdfe 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
@@ -307,8 +307,8 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
   case ISD::CLMUL:                      return "clmul";
   case ISD::CLMULR:                     return "clmulr";
   case ISD::CLMULH:                     return "clmulh";
-  case ISD::BEXT:                       return "bext";
-  case ISD::BDEP:                       return "bdep";
+  case ISD::PEXT:                       return "pext";
+  case ISD::PDEP:                       return "pdep";
   case ISD::FADD:                       return "fadd";
   case ISD::STRICT_FADD:                return "strict_fadd";
   case ISD::FSUB:                       return "fsub";
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index 7af937dfac001..07798c25f54be 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -8962,7 +8962,7 @@ SDValue TargetLowering::expandCLMUL(SDNode *Node, SelectionDAG &DAG) const {
   llvm_unreachable("Expected CLMUL, CLMULR, or CLMULH");
 }
 
-SDValue TargetLowering::expandBEXT(SDNode *Node, SelectionDAG &DAG) const {
+SDValue TargetLowering::expandPEXT(SDNode *Node, SelectionDAG &DAG) const {
   SDLoc DL(Node);
   EVT VT = Node->getValueType(0);
   SDValue Val = Node->getOperand(0);
@@ -8994,7 +8994,7 @@ SDValue TargetLowering::expandBEXT(SDNode *Node, SelectionDAG &DAG) const {
   return X;
 }
 
-SDValue TargetLowering::expandBDEP(SDNode *Node, SelectionDAG &DAG) const {
+SDValue TargetLowering::expandPDEP(SDNode *Node, SelectionDAG &DAG) const {
   SDLoc DL(Node);
   EVT VT = Node->getValueType(0);
   SDValue Val = Node->getOperand(0);
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 9a25af680b6ee..6f01bafa0f771 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -1189,7 +1189,7 @@ void TargetLoweringBase::initActions() {
     setOperationAction({ISD::CLMUL, ISD::CLMULR, ISD::CLMULH}, VT, Expand);
 
     // Bit extract/deposit (compress/expand)
-    setOperationAction({ISD::BEXT, ISD::BDEP}, VT, Expand);
+    setOperationAction({ISD::PEXT, ISD::PDEP}, VT, Expand);
 
     // Saturated trunc
     setOperationAction(ISD::TRUNCATE_SSAT_S, VT, Expand);
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 2974b8aa774e8..9fb8d23d11a1d 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -2108,17 +2108,17 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
       }
     }
 
-    // Map generic BEXT/BDEP to SVE2 bitperm BEXT/BDEP instructions.
+    // Map generic PEXT/PDEP to SVE2 bitperm BEXT/BDEP instructions.
     if (Subtarget->hasSVEBitPerm() &&
         (Subtarget->isSVEAvailable() ||
          (Subtarget->isSVEorStreamingSVEAvailable() &&
           Subtarget->hasSSVE_BitPerm()))) {
       for (auto VT : {MVT::nxv16i8, MVT::nxv8i16, MVT::nxv4i32, MVT::nxv2i64}) {
-        setOperationAction(ISD::BEXT, VT, Custom);
-        setOperationAction(ISD::BDEP, VT, Custom);
+        setOperationAction(ISD::PEXT, VT, Custom);
+        setOperationAction(ISD::PDEP, VT, Custom);
       }
-      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i32, Custom);
-      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i64, Custom);
+      setOperationAction({ISD::PEXT, ISD::PDEP}, MVT::i32, Custom);
+      setOperationAction({ISD::PEXT, ISD::PDEP}, MVT::i64, Custom);
     }
 
     if (Subtarget->hasBF16())
@@ -8642,12 +8642,12 @@ SDValue AArch64TargetLowering::LowerOperation(SDValue Op,
     return LowerPARTIAL_REDUCE_MLA(Op, DAG);
   case ISD::CLMUL:
     return LowerCLMUL(Op, DAG);
-  case ISD::BEXT:
-  case ISD::BDEP: {
-    // Lower generic BEXT/BDEP to SVE2 intrinsics.
+  case ISD::PEXT:
+  case ISD::PDEP: {
+    // Lower generic PEXT/PDEP to SVE2 intrinsics.
     SDLoc DL(Op);
     EVT VT = Op.getValueType();
-    unsigned IntrID = Op.getOpcode() == ISD::BEXT
+    unsigned IntrID = Op.getOpcode() == ISD::PEXT
                           ? Intrinsic::aarch64_sve_bext_x
                           : Intrinsic::aarch64_sve_bdep_x;
 
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 94296801c8a8e..f7a56d0e2f980 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -481,11 +481,11 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
   }
 
   if (Subtarget.hasBMI2()) {
-    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i8, Promote);
-    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i16, Promote);
-    setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i32, Legal);
+    setOperationAction({ISD::PEXT, ISD::PDEP}, MVT::i8, Promote);
+    setOperationAction({ISD::PEXT, ISD::PDEP}, MVT::i16, Promote);
+    setOperationAction({ISD::PEXT, ISD::PDEP}, MVT::i32, Legal);
     if (Subtarget.is64Bit())
-      setOperationAction({ISD::BEXT, ISD::BDEP}, MVT::i64, Legal);
+      setOperationAction({ISD::PEXT, ISD::PDEP}, MVT::i64, Legal);
   }
 
   setOperationAction(ISD::READCYCLECOUNTER , MVT::i64  , Custom);
diff --git a/llvm/lib/Target/X86/X86InstrMisc.td b/llvm/lib/Target/X86/X86InstrMisc.td
index 96c3dbb74b839..613a431fe365a 100644
--- a/llvm/lib/Target/X86/X86InstrMisc.td
+++ b/llvm/lib/Target/X86/X86InstrMisc.td
@@ -1404,42 +1404,41 @@ let Predicates = [HasBMI2, HasEGPR] in {
   defm PEXT64 : PdepPext<"pext", Xi64, X86pext, "_EVEX">, XS, REX_W, EVEX;
 }
 
-// ISD::BEXT / ISD::BDEP are legal on BMI2 and select directly to PEXT / PDEP.
 let Predicates = [HasBMI2, NoEGPR] in {
-  def : Pat<(i32 (bext GR32:$src, GR32:$mask)),
+  def : Pat<(i32 (pext GR32:$src, GR32:$mask)),
             (PEXT32rr GR32:$src, GR32:$mask)>;
-  def : Pat<(i32 (bext GR32:$src, (loadi32 addr:$mask))),
+  def : Pat<(i32 (pext GR32:$src, (loadi32 addr:$mask))),
             (PEXT32rm GR32:$src, i32mem:$mask)>;
-  def : Pat<(i64 (bext GR64:$src, GR64:$mask)),
+  def : Pat<(i64 (pext GR64:$src, GR64:$mask)),
             (PEXT64rr GR64:$src, GR64:$mask)>;
-  def : Pat<(i64 (bext GR64:$src, (loadi64 addr:$mask))),
+  def : Pat<(i64 (pext GR64:$src, (loadi64 addr:$mask))),
             (PEXT64rm GR64:$src, i64mem:$mask)>;
-  def : Pat<(i32 (bdep GR32:$src, GR32:$mask)),
+  def : Pat<(i32 (pdep GR32:$src, GR32:$mask)),
             (PDEP32rr GR32:$src, GR32:$mask)>;
-  def : Pat<(i32 (bdep GR32:$src, (loadi32 addr:$mask))),
+  def : Pat<(i32 (pdep GR32:$src, (loadi32 addr:$mask))),
             (PDEP32rm GR32:$src, i32mem:$mask)>;
-  def : Pat<(i64 (bdep GR64:$src, GR64:$mask)),
+  def : Pat<(i64 (pdep GR64:$src, GR64:$mask)),
             (PDEP64rr GR64:$src, GR64:$mask)>;
-  def : Pat<(i64 (bdep GR64:$src, (loadi64 addr:$mask))),
+  def : Pat<(i64 (pdep GR64:$src, (loadi64 addr:$mask))),
             (PDEP64rm GR64:$src, i64mem:$mask)>;
 }
 
 let Predicates = [HasBMI2, HasEGPR] in {
-  def : Pat<(i32 (bext GR32:$src, GR32:$mask)),
+  def : Pat<(i32 (pext GR32:$src, GR32:$mask)),
             (PEXT32rr_EVEX GR32:$src, GR32:$mask)>;
-  def : Pat<(i32 (bext GR32:$src, (loadi32 addr:$mask))),
+  def : Pat<(i32 (pext GR32:$src, (loadi32 addr:$mask))),
             (PEXT32rm_EVEX GR32:$src, i32mem:$mask)>;
-  def : Pat<(i64 (bext GR64:$src, GR64:$mask)),
+  def : Pat<(i64 (pext GR64:$src, GR64:$mask)),
             (PEXT64rr_EVEX GR64:$src, GR64:$mask)>;
-  def : Pat<(i64 (bext GR64:$src, (loadi64 addr:$mask))),
+  def : Pat<(i64 (pext GR64:$src, (loadi64 addr:$mask))),
             (PEXT64rm_EVEX GR64:$src, i64mem:$mask)>;
-  def : Pat<(i32 (bdep GR32:$src, GR32:$mask)),
+  def : Pat<(i32 (pdep GR32:$src, GR32:$mask)),
             (PDEP32rr_EVEX GR32:$src, GR32:$mask)>;
-  def : Pat<(i32 (bdep GR32:$src, (loadi32 addr:$mask))),
+  def : Pat<(i32 (pdep GR32:$src, (loadi32 addr:$mask))),
             (PDEP32rm_EVEX GR32:$src, i32mem:$mask)>;
-  def : Pat<(i64 (bdep GR64:$src, GR64:$mask)),
+  def : Pat<(i64 (pdep GR64:$src, GR64:$mask)),
             (PDEP64rr_EVEX GR64:$src, GR64:$mask)>;
-  def : Pat<(i64 (bdep GR64:$src, (loadi64 addr:$mask))),
+  def : Pat<(i64 (pdep GR64:$src, (loadi64 addr:$mask))),
             (PDEP64rm_EVEX GR64:$src, i64mem:$mask)>;
 }
 
diff --git a/llvm/test/CodeGen/AArch64/bdep.ll b/llvm/test/CodeGen/AArch64/pdep.ll
similarity index 98%
rename from llvm/test/CodeGen/AArch64/bdep.ll
rename to llvm/test/CodeGen/AArch64/pdep.ll
index 2facdbd8c919a..a6be3da398c60 100644
--- a/llvm/test/CodeGen/AArch64/bdep.ll
+++ b/llvm/test/CodeGen/AArch64/pdep.ll
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2-bitperm | FileCheck %s --check-prefix=BITPERM
 ; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2 | FileCheck %s --check-prefix=NOSVE2BITPERM
 
-define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
-; BITPERM-LABEL: bdep_i8:
+define i8 @pdep_i8(i8 %val, i8 %mask) nounwind {
+; BITPERM-LABEL: pdep_i8:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    and w8, w0, #0xff
 ; BITPERM-NEXT:    and w9, w1, #0xff
@@ -13,7 +13,7 @@ define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_i8:
+; NOSVE2BITPERM-LABEL: pdep_i8:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn w9, w1
 ; NOSVE2BITPERM-NEXT:    mov w8, #-1 // =0xffffffff
@@ -50,12 +50,12 @@ define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
 ; NOSVE2BITPERM-NEXT:    and w0, w8, w1
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i8 @llvm.bdep.i8(i8 %val, i8 %mask)
+  %res = call i8 @llvm.pdep.i8(i8 %val, i8 %mask)
   ret i8 %res
 }
 
-define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
-; BITPERM-LABEL: bdep_i16:
+define i16 @pdep_i16(i16 %val, i16 %mask) nounwind {
+; BITPERM-LABEL: pdep_i16:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    and w8, w0, #0xffff
 ; BITPERM-NEXT:    and w9, w1, #0xffff
@@ -65,7 +65,7 @@ define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_i16:
+; NOSVE2BITPERM-LABEL: pdep_i16:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn w8, w1
 ; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
@@ -163,12 +163,12 @@ define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
 ; NOSVE2BITPERM-NEXT:    and w0, w8, w1
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i16 @llvm.bdep.i16(i16 %val, i16 %mask)
+  %res = call i16 @llvm.pdep.i16(i16 %val, i16 %mask)
   ret i16 %res
 }
 
-define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
-; BITPERM-LABEL: bdep_i32:
+define i32 @pdep_i32(i32 %val, i32 %mask) nounwind {
+; BITPERM-LABEL: pdep_i32:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    fmov s0, w0
 ; BITPERM-NEXT:    fmov s1, w1
@@ -176,7 +176,7 @@ define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_i32:
+; NOSVE2BITPERM-LABEL: pdep_i32:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn w8, w1
 ; NOSVE2BITPERM-NEXT:    lsl w9, w8, #1
@@ -364,12 +364,12 @@ define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    orr w8, w8, w10
 ; NOSVE2BITPERM-NEXT:    and w0, w8, w1
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+  %res = call i32 @llvm.pdep.i32(i32 %val, i32 %mask)
   ret i32 %res
 }
 
-define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
-; BITPERM-LABEL: bdep_i64:
+define i64 @pdep_i64(i64 %val, i64 %mask) nounwind {
+; BITPERM-LABEL: pdep_i64:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    fmov d0, x0
 ; BITPERM-NEXT:    fmov d1, x1
@@ -377,7 +377,7 @@ define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
 ; BITPERM-NEXT:    fmov x0, d0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_i64:
+; NOSVE2BITPERM-LABEL: pdep_i64:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn x8, x1
 ; NOSVE2BITPERM-NEXT:    lsl x9, x8, #1
@@ -795,17 +795,17 @@ define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    orr x8, x8, x10
 ; NOSVE2BITPERM-NEXT:    and x0, x8, x1
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i64 @llvm.bdep.i64(i64 %val, i64 %mask)
+  %res = call i64 @llvm.pdep.i64(i64 %val, i64 %mask)
   ret i64 %res
 }
 
-define <vscale x 16 x i8> @bdep_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv16i8:
+define <vscale x 16 x i8> @pdep_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
+; BITPERM-LABEL: pdep_nxv16i8:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bdep z0.b, z0.b, z1.b
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_nxv16i8:
+; NOSVE2BITPERM-LABEL: pdep_nxv16i8:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -833,17 +833,17 @@ define <vscale x 16 x i8> @bdep_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x
 ; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z5.d
 ; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 16 x i8> @llvm.bdep.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
+  %res = call <vscale x 16 x i8> @llvm.pdep.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
   ret <vscale x 16 x i8> %res
 }
 
-define <vscale x 8 x i16> @bdep_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv8i16:
+define <vscale x 8 x i16> @pdep_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
+; BITPERM-LABEL: pdep_nxv8i16:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bdep z0.h, z0.h, z1.h
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_nxv8i16:
+; NOSVE2BITPERM-LABEL: pdep_nxv8i16:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -899,17 +899,17 @@ define <vscale x 8 x i16> @bdep_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i
 ; NOSVE2BITPERM-NEXT:    bsl z0.d, z0.d, z2.d, z5.d
 ; NOSVE2BITPERM-NEXT:    and z0.d, z0.d, z1.d
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 8 x i16> @llvm.bdep.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
+  %res = call <vscale x 8 x i16> @llvm.pdep.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
   ret <vscale x 8 x i16> %res
 }
 
-define <vscale x 4 x i32> @bdep_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv4i32:
+define <vscale x 4 x i32> @pdep_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
+; BITPERM-LABEL: pdep_nxv4i32:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_nxv4i32:
+; NOSVE2BITPERM-LABEL: pdep_nxv4i32:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -963,17 +963,17 @@ define <vscale x 4 x i32> @bdep_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i
 ; NOSVE2BITPERM-NEXT:    bsl z2.d, z2.d, z0.d, z4.d
 ; NOSVE2BITPERM-NEXT:    and z0.d, z2.d, z1.d
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 4 x i32> @llvm.bdep.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
+  %res = call <vscale x 4 x i32> @llvm.pdep.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
   ret <vscale x 4 x i32> %res
 }
 
-define <vscale x 2 x i64> @bdep_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
-; BITPERM-LABEL: bdep_nxv2i64:
+define <vscale x 2 x i64> @pdep_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
+; BITPERM-LABEL: pdep_nxv2i64:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bdep z0.d, z0.d, z1.d
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bdep_nxv2i64:
+; NOSVE2BITPERM-LABEL: pdep_nxv2i64:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
 ; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-16
@@ -1995,7 +1995,7 @@ define <vscale x 2 x i64> @bdep_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i
 ; NOSVE2BITPERM-NEXT:    addvl sp, sp, #16
 ; NOSVE2BITPERM-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 2 x i64> @llvm.bdep.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
+  %res = call <vscale x 2 x i64> @llvm.pdep.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
   ret <vscale x 2 x i64> %res
 }
 
diff --git a/llvm/test/CodeGen/AArch64/bext.ll b/llvm/test/CodeGen/AArch64/pext.ll
similarity index 98%
rename from llvm/test/CodeGen/AArch64/bext.ll
rename to llvm/test/CodeGen/AArch64/pext.ll
index 9d844d6c291a5..8da2e232486ec 100644
--- a/llvm/test/CodeGen/AArch64/bext.ll
+++ b/llvm/test/CodeGen/AArch64/pext.ll
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2-bitperm | FileCheck %s --check-prefix=BITPERM
 ; RUN: llc < %s -mtriple=aarch64 -mattr=+sve2 | FileCheck %s --check-prefix=NOSVE2BITPERM
 
-define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
-; BITPERM-LABEL: bext_i8:
+define i8 @pext_i8(i8 %val, i8 %mask) nounwind {
+; BITPERM-LABEL: pext_i8:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    and w8, w0, #0xff
 ; BITPERM-NEXT:    and w9, w1, #0xff
@@ -13,7 +13,7 @@ define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_i8:
+; NOSVE2BITPERM-LABEL: pext_i8:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn w9, w1
 ; NOSVE2BITPERM-NEXT:    mov w8, #-1 // =0xffffffff
@@ -53,12 +53,12 @@ define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    and w8, w8, #0xf0
 ; NOSVE2BITPERM-NEXT:    orr w0, w9, w8, lsr #4
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i8 @llvm.bext.i8(i8 %val, i8 %mask)
+  %res = call i8 @llvm.pext.i8(i8 %val, i8 %mask)
   ret i8 %res
 }
 
-define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
-; BITPERM-LABEL: bext_i16:
+define i16 @pext_i16(i16 %val, i16 %mask) nounwind {
+; BITPERM-LABEL: pext_i16:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    and w8, w0, #0xffff
 ; BITPERM-NEXT:    and w9, w1, #0xffff
@@ -68,7 +68,7 @@ define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_i16:
+; NOSVE2BITPERM-LABEL: pext_i16:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn w8, w1
 ; NOSVE2BITPERM-NEXT:    and w14, w0, w1
@@ -170,12 +170,12 @@ define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    and w9, w9, #0xff00
 ; NOSVE2BITPERM-NEXT:    orr w0, w8, w9, lsr #8
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i16 @llvm.bext.i16(i16 %val, i16 %mask)
+  %res = call i16 @llvm.pext.i16(i16 %val, i16 %mask)
   ret i16 %res
 }
 
-define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
-; BITPERM-LABEL: bext_i32:
+define i32 @pext_i32(i32 %val, i32 %mask) nounwind {
+; BITPERM-LABEL: pext_i32:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    fmov s0, w0
 ; BITPERM-NEXT:    fmov s1, w1
@@ -183,7 +183,7 @@ define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_i32:
+; NOSVE2BITPERM-LABEL: pext_i32:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn w8, w1
 ; NOSVE2BITPERM-NEXT:    and w14, w0, w1
@@ -371,12 +371,12 @@ define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    eor w9, w9, w8
 ; NOSVE2BITPERM-NEXT:    orr w0, w9, w8, lsr #16
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 %mask)
+  %res = call i32 @llvm.pext.i32(i32 %val, i32 %mask)
   ret i32 %res
 }
 
-define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
-; BITPERM-LABEL: bext_i64:
+define i64 @pext_i64(i64 %val, i64 %mask) nounwind {
+; BITPERM-LABEL: pext_i64:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    fmov d0, x0
 ; BITPERM-NEXT:    fmov d1, x1
@@ -384,7 +384,7 @@ define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
 ; BITPERM-NEXT:    fmov x0, d0
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_i64:
+; NOSVE2BITPERM-LABEL: pext_i64:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    mvn x8, x1
 ; NOSVE2BITPERM-NEXT:    and x15, x0, x1
@@ -802,17 +802,17 @@ define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
 ; NOSVE2BITPERM-NEXT:    eor x9, x9, x8
 ; NOSVE2BITPERM-NEXT:    orr x0, x9, x8, lsr #32
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call i64 @llvm.bext.i64(i64 %val, i64 %mask)
+  %res = call i64 @llvm.pext.i64(i64 %val, i64 %mask)
   ret i64 %res
 }
 
-define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
-; BITPERM-LABEL: bext_nxv16i8:
+define <vscale x 16 x i8> @pext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask) nounwind {
+; BITPERM-LABEL: pext_nxv16i8:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bext z0.b, z0.b, z1.b
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_nxv16i8:
+; NOSVE2BITPERM-LABEL: pext_nxv16i8:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -846,17 +846,17 @@ define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x
 ; NOSVE2BITPERM-NEXT:    lsr z1.b, z1.b, #4
 ; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z1.d
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 16 x i8> @llvm.bext.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
+  %res = call <vscale x 16 x i8> @llvm.pext.nxv16i8(<vscale x 16 x i8> %val, <vscale x 16 x i8> %mask)
   ret <vscale x 16 x i8> %res
 }
 
-define <vscale x 8 x i16> @bext_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
-; BITPERM-LABEL: bext_nxv8i16:
+define <vscale x 8 x i16> @pext_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask) nounwind {
+; BITPERM-LABEL: pext_nxv8i16:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bext z0.h, z0.h, z1.h
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_nxv8i16:
+; NOSVE2BITPERM-LABEL: pext_nxv8i16:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -920,17 +920,17 @@ define <vscale x 8 x i16> @bext_nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i
 ; NOSVE2BITPERM-NEXT:    lsr z1.h, z1.h, #8
 ; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z1.d
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 8 x i16> @llvm.bext.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
+  %res = call <vscale x 8 x i16> @llvm.pext.nxv8i16(<vscale x 8 x i16> %val, <vscale x 8 x i16> %mask)
   ret <vscale x 8 x i16> %res
 }
 
-define <vscale x 4 x i32> @bext_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
-; BITPERM-LABEL: bext_nxv4i32:
+define <vscale x 4 x i32> @pext_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask) nounwind {
+; BITPERM-LABEL: pext_nxv4i32:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_nxv4i32:
+; NOSVE2BITPERM-LABEL: pext_nxv4i32:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    movprfx z3, z1
 ; NOSVE2BITPERM-NEXT:    subr z3.b, z3.b, #255 // =0xff
@@ -994,17 +994,17 @@ define <vscale x 4 x i32> @bext_nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i
 ; NOSVE2BITPERM-NEXT:    lsr z1.s, z1.s, #16
 ; NOSVE2BITPERM-NEXT:    orr z0.d, z0.d, z1.d
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 4 x i32> @llvm.bext.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
+  %res = call <vscale x 4 x i32> @llvm.pext.nxv4i32(<vscale x 4 x i32> %val, <vscale x 4 x i32> %mask)
   ret <vscale x 4 x i32> %res
 }
 
-define <vscale x 2 x i64> @bext_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
-; BITPERM-LABEL: bext_nxv2i64:
+define <vscale x 2 x i64> @pext_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask) nounwind {
+; BITPERM-LABEL: pext_nxv2i64:
 ; BITPERM:       // %bb.0:
 ; BITPERM-NEXT:    bext z0.d, z0.d, z1.d
 ; BITPERM-NEXT:    ret
 ;
-; NOSVE2BITPERM-LABEL: bext_nxv2i64:
+; NOSVE2BITPERM-LABEL: pext_nxv2i64:
 ; NOSVE2BITPERM:       // %bb.0:
 ; NOSVE2BITPERM-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
 ; NOSVE2BITPERM-NEXT:    addvl sp, sp, #-16
@@ -2038,7 +2038,7 @@ define <vscale x 2 x i64> @bext_nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i
 ; NOSVE2BITPERM-NEXT:    addvl sp, sp, #16
 ; NOSVE2BITPERM-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
 ; NOSVE2BITPERM-NEXT:    ret
-  %res = call <vscale x 2 x i64> @llvm.bext.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
+  %res = call <vscale x 2 x i64> @llvm.pext.nxv2i64(<vscale x 2 x i64> %val, <vscale x 2 x i64> %mask)
   ret <vscale x 2 x i64> %res
 }
 
diff --git a/llvm/test/CodeGen/X86/bdep.ll b/llvm/test/CodeGen/X86/pdep.ll
similarity index 98%
rename from llvm/test/CodeGen/X86/bdep.ll
rename to llvm/test/CodeGen/X86/pdep.ll
index 47ef9348b2d5a..71bd4c6693e82 100644
--- a/llvm/test/CodeGen/X86/bdep.ll
+++ b/llvm/test/CodeGen/X86/pdep.ll
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+bmi2 | FileCheck %s --check-prefix=BMI2
 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=NOBMI2
 
-define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
-; BMI2-LABEL: bdep_i8:
+define i8 @pdep_i8(i8 %val, i8 %mask) nounwind {
+; BMI2-LABEL: pdep_i8:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movzbl %sil, %eax
 ; BMI2-NEXT:    movzbl %dil, %ecx
@@ -11,7 +11,7 @@ define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
 ; BMI2-NEXT:    # kill: def $al killed $al killed $eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_i8:
+; NOBMI2-LABEL: pdep_i8:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    movl %esi, %eax
 ; NOBMI2-NEXT:    notb %al
@@ -94,12 +94,12 @@ define i8 @bdep_i8(i8 %val, i8 %mask) nounwind {
 ; NOBMI2-NEXT:    andb %sil, %al
 ; NOBMI2-NEXT:    # kill: def $al killed $al killed $eax
 ; NOBMI2-NEXT:    retq
-  %res = call i8 @llvm.bdep.i8(i8 %val, i8 %mask)
+  %res = call i8 @llvm.pdep.i8(i8 %val, i8 %mask)
   ret i8 %res
 }
 
-define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
-; BMI2-LABEL: bdep_i16:
+define i16 @pdep_i16(i16 %val, i16 %mask) nounwind {
+; BMI2-LABEL: pdep_i16:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movzwl %si, %eax
 ; BMI2-NEXT:    movzwl %di, %ecx
@@ -107,7 +107,7 @@ define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
 ; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_i16:
+; NOBMI2-LABEL: pdep_i16:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    pushq %rbx
 ; NOBMI2-NEXT:    movl %esi, %edx
@@ -316,17 +316,17 @@ define i16 @bdep_i16(i16 %val, i16 %mask) nounwind {
 ; NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NOBMI2-NEXT:    popq %rbx
 ; NOBMI2-NEXT:    retq
-  %res = call i16 @llvm.bdep.i16(i16 %val, i16 %mask)
+  %res = call i16 @llvm.pdep.i16(i16 %val, i16 %mask)
   ret i16 %res
 }
 
-define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
-; BMI2-LABEL: bdep_i32:
+define i32 @pdep_i32(i32 %val, i32 %mask) nounwind {
+; BMI2-LABEL: pdep_i32:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    pdepl %esi, %edi, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_i32:
+; NOBMI2-LABEL: pdep_i32:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    pushq %rbp
 ; NOBMI2-NEXT:    pushq %r14
@@ -830,17 +830,17 @@ define i32 @bdep_i32(i32 %val, i32 %mask) nounwind {
 ; NOBMI2-NEXT:    popq %r14
 ; NOBMI2-NEXT:    popq %rbp
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bdep.i32(i32 %val, i32 %mask)
+  %res = call i32 @llvm.pdep.i32(i32 %val, i32 %mask)
   ret i32 %res
 }
 
-define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
-; BMI2-LABEL: bdep_i64:
+define i64 @pdep_i64(i64 %val, i64 %mask) nounwind {
+; BMI2-LABEL: pdep_i64:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    pdepq %rsi, %rdi, %rax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_i64:
+; NOBMI2-LABEL: pdep_i64:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    pushq %r15
 ; NOBMI2-NEXT:    pushq %r14
@@ -2025,49 +2025,49 @@ define i64 @bdep_i64(i64 %val, i64 %mask) nounwind {
 ; NOBMI2-NEXT:    popq %r14
 ; NOBMI2-NEXT:    popq %r15
 ; NOBMI2-NEXT:    retq
-  %res = call i64 @llvm.bdep.i64(i64 %val, i64 %mask)
+  %res = call i64 @llvm.pdep.i64(i64 %val, i64 %mask)
   ret i64 %res
 }
 
-define i32 @bdep_mask_zero(i32 %val) nounwind {
-; BMI2-LABEL: bdep_mask_zero:
+define i32 @pdep_mask_zero(i32 %val) nounwind {
+; BMI2-LABEL: pdep_mask_zero:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    xorl %eax, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_mask_zero:
+; NOBMI2-LABEL: pdep_mask_zero:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    xorl %eax, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bdep.i32(i32 %val, i32 0)
+  %res = call i32 @llvm.pdep.i32(i32 %val, i32 0)
   ret i32 %res
 }
 
-define i32 @bdep_mask_allones(i32 %val) nounwind {
-; BMI2-LABEL: bdep_mask_allones:
+define i32 @pdep_mask_allones(i32 %val) nounwind {
+; BMI2-LABEL: pdep_mask_allones:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movl %edi, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_mask_allones:
+; NOBMI2-LABEL: pdep_mask_allones:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    movl %edi, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bdep.i32(i32 %val, i32 -1)
+  %res = call i32 @llvm.pdep.i32(i32 %val, i32 -1)
   ret i32 %res
 }
 
-define i32 @bdep_const_fold() nounwind {
-; BMI2-LABEL: bdep_const_fold:
+define i32 @pdep_const_fold() nounwind {
+; BMI2-LABEL: pdep_const_fold:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movl $136, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bdep_const_fold:
+; NOBMI2-LABEL: pdep_const_fold:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    movl $136, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bdep.i32(i32 10, i32 204)
+  %res = call i32 @llvm.pdep.i32(i32 10, i32 204)
   ret i32 %res
 }
 
diff --git a/llvm/test/CodeGen/X86/bext.ll b/llvm/test/CodeGen/X86/pext.ll
similarity index 98%
rename from llvm/test/CodeGen/X86/bext.ll
rename to llvm/test/CodeGen/X86/pext.ll
index 39e70485396e3..2839721045e7e 100644
--- a/llvm/test/CodeGen/X86/bext.ll
+++ b/llvm/test/CodeGen/X86/pext.ll
@@ -2,8 +2,8 @@
 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+bmi2 | FileCheck %s --check-prefix=BMI2
 ; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefix=NOBMI2
 
-define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
-; BMI2-LABEL: bext_i8:
+define i8 @pext_i8(i8 %val, i8 %mask) nounwind {
+; BMI2-LABEL: pext_i8:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movzbl %sil, %eax
 ; BMI2-NEXT:    movzbl %dil, %ecx
@@ -11,7 +11,7 @@ define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
 ; BMI2-NEXT:    # kill: def $al killed $al killed $eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_i8:
+; NOBMI2-LABEL: pext_i8:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    movl %esi, %ecx
 ; NOBMI2-NEXT:    notb %cl
@@ -91,12 +91,12 @@ define i8 @bext_i8(i8 %val, i8 %mask) nounwind {
 ; NOBMI2-NEXT:    shrb $4, %al
 ; NOBMI2-NEXT:    orb %dil, %al
 ; NOBMI2-NEXT:    retq
-  %res = call i8 @llvm.bext.i8(i8 %val, i8 %mask)
+  %res = call i8 @llvm.pext.i8(i8 %val, i8 %mask)
   ret i8 %res
 }
 
-define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
-; BMI2-LABEL: bext_i16:
+define i16 @pext_i16(i16 %val, i16 %mask) nounwind {
+; BMI2-LABEL: pext_i16:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movzwl %si, %eax
 ; BMI2-NEXT:    movzwl %di, %ecx
@@ -104,7 +104,7 @@ define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
 ; BMI2-NEXT:    # kill: def $ax killed $ax killed $eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_i16:
+; NOBMI2-LABEL: pext_i16:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    pushq %rbx
 ; NOBMI2-NEXT:    andl %esi, %edi
@@ -316,17 +316,17 @@ define i16 @bext_i16(i16 %val, i16 %mask) nounwind {
 ; NOBMI2-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NOBMI2-NEXT:    popq %rbx
 ; NOBMI2-NEXT:    retq
-  %res = call i16 @llvm.bext.i16(i16 %val, i16 %mask)
+  %res = call i16 @llvm.pext.i16(i16 %val, i16 %mask)
   ret i16 %res
 }
 
-define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
-; BMI2-LABEL: bext_i32:
+define i32 @pext_i32(i32 %val, i32 %mask) nounwind {
+; BMI2-LABEL: pext_i32:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    pextl %esi, %edi, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_i32:
+; NOBMI2-LABEL: pext_i32:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    andl %esi, %edi
 ; NOBMI2-NEXT:    movl %esi, %eax
@@ -820,17 +820,17 @@ define i32 @bext_i32(i32 %val, i32 %mask) nounwind {
 ; NOBMI2-NEXT:    shrl $16, %eax
 ; NOBMI2-NEXT:    orl %esi, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 %mask)
+  %res = call i32 @llvm.pext.i32(i32 %val, i32 %mask)
   ret i32 %res
 }
 
-define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
-; BMI2-LABEL: bext_i64:
+define i64 @pext_i64(i64 %val, i64 %mask) nounwind {
+; BMI2-LABEL: pext_i64:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    pextq %rsi, %rdi, %rax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_i64:
+; NOBMI2-LABEL: pext_i64:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    andq %rsi, %rdi
 ; NOBMI2-NEXT:    movq %rsi, %rax
@@ -2002,49 +2002,49 @@ define i64 @bext_i64(i64 %val, i64 %mask) nounwind {
 ; NOBMI2-NEXT:    shrq $32, %rax
 ; NOBMI2-NEXT:    orq %rdi, %rax
 ; NOBMI2-NEXT:    retq
-  %res = call i64 @llvm.bext.i64(i64 %val, i64 %mask)
+  %res = call i64 @llvm.pext.i64(i64 %val, i64 %mask)
   ret i64 %res
 }
 
-define i32 @bext_mask_zero(i32 %val) nounwind {
-; BMI2-LABEL: bext_mask_zero:
+define i32 @pext_mask_zero(i32 %val) nounwind {
+; BMI2-LABEL: pext_mask_zero:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    xorl %eax, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_mask_zero:
+; NOBMI2-LABEL: pext_mask_zero:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    xorl %eax, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 0)
+  %res = call i32 @llvm.pext.i32(i32 %val, i32 0)
   ret i32 %res
 }
 
-define i32 @bext_mask_allones(i32 %val) nounwind {
-; BMI2-LABEL: bext_mask_allones:
+define i32 @pext_mask_allones(i32 %val) nounwind {
+; BMI2-LABEL: pext_mask_allones:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movl %edi, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_mask_allones:
+; NOBMI2-LABEL: pext_mask_allones:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    movl %edi, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 %val, i32 -1)
+  %res = call i32 @llvm.pext.i32(i32 %val, i32 -1)
   ret i32 %res
 }
 
-define i32 @bext_const_fold() nounwind {
-; BMI2-LABEL: bext_const_fold:
+define i32 @pext_const_fold() nounwind {
+; BMI2-LABEL: pext_const_fold:
 ; BMI2:       # %bb.0:
 ; BMI2-NEXT:    movl $10, %eax
 ; BMI2-NEXT:    retq
 ;
-; NOBMI2-LABEL: bext_const_fold:
+; NOBMI2-LABEL: pext_const_fold:
 ; NOBMI2:       # %bb.0:
 ; NOBMI2-NEXT:    movl $10, %eax
 ; NOBMI2-NEXT:    retq
-  %res = call i32 @llvm.bext.i32(i32 170, i32 204)
+  %res = call i32 @llvm.pext.i32(i32 170, i32 204)
   ret i32 %res
 }
 

>From 1d089069a271d2d42a13fcd6334aab8fd1243ae4 Mon Sep 17 00:00:00 2001
From: Eisenwave <me at eisenwave.net>
Date: Mon, 1 Jun 2026 06:26:45 +0200
Subject: [PATCH 4/6] Remove unnecessary zero extension

---
 llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
index e1ec867312a67..23c2b149c79d9 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
@@ -1778,7 +1778,9 @@ SDValue DAGTypeLegalizer::PromoteIntRes_PEXT(SDNode *N) {
     if (SDValue Res = TLI.expandPEXT(N, DAG))
       return DAG.getNode(ISD::ANY_EXTEND, DL, VT, Res);
   }
-  SDValue X = ZExtPromotedInteger(N->getOperand(0));
+  // Only the mask operand needs zero-extension because the implicit AND from
+  // masking clears the corresponding bits in X anyway.
+  SDValue X = GetPromotedInteger(N->getOperand(0));
   SDValue Y = ZExtPromotedInteger(N->getOperand(1));
   return DAG.getNode(ISD::PEXT, DL, VT, X, Y);
 }
@@ -1790,7 +1792,9 @@ SDValue DAGTypeLegalizer::PromoteIntRes_PDEP(SDNode *N) {
     if (SDValue Res = TLI.expandPDEP(N, DAG))
       return DAG.getNode(ISD::ANY_EXTEND, DL, VT, Res);
   }
-  SDValue X = ZExtPromotedInteger(N->getOperand(0));
+  // Only the mask operand needs zero-extension because the implicit AND from
+  // masking clears the corresponding bits in X anyway.
+  SDValue X = GetPromotedInteger(N->getOperand(0));
   SDValue Y = ZExtPromotedInteger(N->getOperand(1));
   return DAG.getNode(ISD::PDEP, DL, VT, X, Y);
 }

>From 11ff25d08789bd22151b3f46eeffd4e30d2da458 Mon Sep 17 00:00:00 2001
From: Eisenwave <me at eisenwave.net>
Date: Mon, 1 Jun 2026 06:28:42 +0200
Subject: [PATCH 5/6] Add "parallel" to comments

---
 llvm/include/llvm/CodeGen/ISDOpcodes.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/include/llvm/CodeGen/ISDOpcodes.h b/llvm/include/llvm/CodeGen/ISDOpcodes.h
index 740f851593e87..b5c517a07fe91 100644
--- a/llvm/include/llvm/CodeGen/ISDOpcodes.h
+++ b/llvm/include/llvm/CodeGen/ISDOpcodes.h
@@ -779,7 +779,7 @@ enum NodeType {
   CLMULR,
   CLMULH,
 
-  /// Bit extract (compress) and bit deposit (expand).
+  /// Parallel bit extract (compress) and parallel bit deposit (expand).
   PEXT,
   PDEP,
 

>From 18217eb8ccc6a5a98bd1c5bcfae544906d5bb65c Mon Sep 17 00:00:00 2001
From: Eisenwave <me at eisenwave.net>
Date: Mon, 1 Jun 2026 06:56:49 +0200
Subject: [PATCH 6/6] Oops, forgot to regenerate AArch64 expectations

---
 llvm/test/CodeGen/AArch64/pdep.ll | 14 ++++++--------
 llvm/test/CodeGen/AArch64/pext.ll | 14 ++++++--------
 2 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/llvm/test/CodeGen/AArch64/pdep.ll b/llvm/test/CodeGen/AArch64/pdep.ll
index a6be3da398c60..32f5f68943aea 100644
--- a/llvm/test/CodeGen/AArch64/pdep.ll
+++ b/llvm/test/CodeGen/AArch64/pdep.ll
@@ -5,11 +5,10 @@
 define i8 @pdep_i8(i8 %val, i8 %mask) nounwind {
 ; BITPERM-LABEL: pdep_i8:
 ; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    and w8, w0, #0xff
-; BITPERM-NEXT:    and w9, w1, #0xff
+; BITPERM-NEXT:    and w8, w1, #0xff
+; BITPERM-NEXT:    fmov s1, w0
 ; BITPERM-NEXT:    fmov s0, w8
-; BITPERM-NEXT:    fmov s1, w9
-; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    bdep z0.s, z1.s, z0.s
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
@@ -57,11 +56,10 @@ define i8 @pdep_i8(i8 %val, i8 %mask) nounwind {
 define i16 @pdep_i16(i16 %val, i16 %mask) nounwind {
 ; BITPERM-LABEL: pdep_i16:
 ; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    and w8, w0, #0xffff
-; BITPERM-NEXT:    and w9, w1, #0xffff
+; BITPERM-NEXT:    and w8, w1, #0xffff
+; BITPERM-NEXT:    fmov s1, w0
 ; BITPERM-NEXT:    fmov s0, w8
-; BITPERM-NEXT:    fmov s1, w9
-; BITPERM-NEXT:    bdep z0.s, z0.s, z1.s
+; BITPERM-NEXT:    bdep z0.s, z1.s, z0.s
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
diff --git a/llvm/test/CodeGen/AArch64/pext.ll b/llvm/test/CodeGen/AArch64/pext.ll
index 8da2e232486ec..aa18ce699ca6c 100644
--- a/llvm/test/CodeGen/AArch64/pext.ll
+++ b/llvm/test/CodeGen/AArch64/pext.ll
@@ -5,11 +5,10 @@
 define i8 @pext_i8(i8 %val, i8 %mask) nounwind {
 ; BITPERM-LABEL: pext_i8:
 ; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    and w8, w0, #0xff
-; BITPERM-NEXT:    and w9, w1, #0xff
+; BITPERM-NEXT:    and w8, w1, #0xff
+; BITPERM-NEXT:    fmov s1, w0
 ; BITPERM-NEXT:    fmov s0, w8
-; BITPERM-NEXT:    fmov s1, w9
-; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
+; BITPERM-NEXT:    bext z0.s, z1.s, z0.s
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;
@@ -60,11 +59,10 @@ define i8 @pext_i8(i8 %val, i8 %mask) nounwind {
 define i16 @pext_i16(i16 %val, i16 %mask) nounwind {
 ; BITPERM-LABEL: pext_i16:
 ; BITPERM:       // %bb.0:
-; BITPERM-NEXT:    and w8, w0, #0xffff
-; BITPERM-NEXT:    and w9, w1, #0xffff
+; BITPERM-NEXT:    and w8, w1, #0xffff
+; BITPERM-NEXT:    fmov s1, w0
 ; BITPERM-NEXT:    fmov s0, w8
-; BITPERM-NEXT:    fmov s1, w9
-; BITPERM-NEXT:    bext z0.s, z0.s, z1.s
+; BITPERM-NEXT:    bext z0.s, z1.s, z0.s
 ; BITPERM-NEXT:    fmov w0, s0
 ; BITPERM-NEXT:    ret
 ;



More information about the llvm-commits mailing list