[llvm] [X86] Improve llvm.get.active.lane.mask codegen (PR #225832)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 30 08:56:48 PDT 2026
https://github.com/houngkoungting updated https://github.com/llvm/llvm-project/pull/225832
>From ee9343085718f3be84634632716b7306d3988c03 Mon Sep 17 00:00:00 2001
From: william <we3223 at gmail.com>
Date: Thu, 24 Sep 2026 00:07:36 +0800
Subject: [PATCH 1/2] [CodeGen] Clean up scalar bitmask type calculation in
TargetLowering
---
llvm/include/llvm/CodeGen/TargetLowering.h | 18 +
.../SelectionDAG/SelectionDAGBuilder.cpp | 8 +
.../CodeGen/SelectionDAG/TargetLowering.cpp | 45 +
llvm/lib/Target/X86/X86ISelLowering.cpp | 19 +
llvm/lib/Target/X86/X86ISelLowering.h | 3 +
llvm/test/CodeGen/X86/active_lane_mask.ll | 3241 +++--------------
llvm/test/CodeGen/X86/pr47299.ll | 70 +-
7 files changed, 635 insertions(+), 2769 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 46521fa8c544a..1dfd2b63ca2fb 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -5759,6 +5759,24 @@ class LLVM_ABI TargetLowering : public TargetLoweringBase {
/// \returns The expansion if successful, SDValue() otherwise
SDValue expandROT(SDNode *N, bool AllowVectorOps, SelectionDAG &DAG) const;
+ /// Expand get_active_lane_mask into a scalar bitmask sequence.
+ /// \param DAG The SelectionDAG.
+ /// \param VT The target vector boolean type.
+ /// \param Index The loop iteration index.
+ /// \param TripCount The loop trip count.
+ /// \param DL The source location.
+ /// \returns The expanded SDValue, or an empty SDValue if expansion is not
+ /// supported.
+ SDValue expandGetActiveLaneMask(SelectionDAG &DAG, EVT VT, SDValue Index,
+ SDValue TripCount, const SDLoc &DL) const;
+
+ /// Return true if the target prefers to expand get_active_lane_mask
+ /// into a scalar bitmask sequence.
+ /// \param VT The vector mask type.
+ virtual bool shouldExpandGetActiveLaneMaskUsingScalar(EVT VT) const {
+ return false;
+ }
+
/// Expand shift-by-parts.
/// \param N Node to expand
/// \param Lo lower-output-part after conversion
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index f7eec8c5088d4..b19dff3a87f42 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -8541,6 +8541,14 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
SDValue Index = getValue(I.getOperand(0));
SDValue TripCount = getValue(I.getOperand(1));
EVT ElementVT = Index.getValueType();
+ // Attempt to expand into a scalar bitmask if preferred by target.
+ if (TLI.shouldExpandGetActiveLaneMaskUsingScalar(CCVT)) {
+ if (SDValue Res =
+ TLI.expandGetActiveLaneMask(DAG, CCVT, Index, TripCount, sdl)) {
+ setValue(&I, Res);
+ return;
+ }
+ }
if (!TLI.shouldExpandGetActiveLaneMask(CCVT, ElementVT)) {
setValue(&I, DAG.getNode(ISD::GET_ACTIVE_LANE_MASK, sdl, CCVT, Index,
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index 1eeab43bd480e..f00c371af1009 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -8768,6 +8768,51 @@ static bool isNonZeroModBitWidthOrUndef(SDValue Z, unsigned BW) {
/*AllowUndefs=*/true, /*AllowTruncation=*/true);
}
+SDValue TargetLowering::expandGetActiveLaneMask(SelectionDAG &DAG, EVT VT,
+ SDValue Index,
+ SDValue TripCount,
+ const SDLoc &DL) const {
+ if (!VT.isFixedLengthVector())
+ return SDValue();
+
+ unsigned NumElts = VT.getVectorNumElements();
+
+ if (NumElts > 64)
+ return SDValue();
+
+ EVT IndexVT = Index.getValueType();
+ // Scalar integer type wide enough to hold all lane bits (at least i8).
+ unsigned MaskBits = llvm::PowerOf2Ceil(std::max(8u, NumElts));
+ EVT MaskVT = EVT::getIntegerVT(*DAG.getContext(), MaskBits);
+
+ // Clamp remaining lanes: Diff = (TripCount <= Index) ? 0 : (TripCount -
+ // Index).
+ SDValue Sub = DAG.getNode(ISD::SUB, DL, IndexVT, TripCount, Index);
+ SDValue IsLe = DAG.getSetCC(
+ DL, getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), IndexVT),
+ TripCount, Index, ISD::SETULE);
+ SDValue Zero = DAG.getConstant(0, DL, IndexVT);
+ SDValue Diff = DAG.getSelect(DL, IndexVT, IsLe, Zero, Sub);
+ // Clamp to vector length: k = umin(Diff, NumElts).
+ SDValue MaxLanes = DAG.getConstant(NumElts, DL, IndexVT);
+ SDValue Clamped = DAG.getNode(ISD::UMIN, DL, IndexVT, Diff, MaxLanes);
+ // Build the scalar bitmask: (1 << k) - 1.
+ SDValue ShiftAmt = DAG.getZExtOrTrunc(Clamped, DL, MaskVT);
+ SDValue One = DAG.getConstant(1, DL, MaskVT);
+ SDValue Shl = DAG.getNode(ISD::SHL, DL, MaskVT, One, ShiftAmt);
+ SDValue ScalarMask = DAG.getNode(ISD::SUB, DL, MaskVT, Shl, One);
+ // Bitcast to a boolean vector matching the integer bit width.
+ EVT BoolVecVT =
+ EVT::getVectorVT(*DAG.getContext(), MVT::i1, MaskVT.getSizeInBits());
+ SDValue Bitcast = DAG.getNode(ISD::BITCAST, DL, BoolVecVT, ScalarMask);
+
+ if (BoolVecVT == VT)
+ return Bitcast;
+ // Extract the original subvector if padded (e.g. v4i1 from i8 -> v8i1).
+ return DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, Bitcast,
+ DAG.getVectorIdxConstant(0, DL));
+}
+
SDValue TargetLowering::expandFunnelShift(SDNode *Node,
SelectionDAG &DAG) const {
EVT VT = Node->getValueType(0);
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 7817c86155e5b..30ff5844739bc 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -32768,6 +32768,25 @@ X86TargetLowering::shouldExpandAtomicLoadInIR(LoadInst *LI) const {
: AtomicExpansionKind::None;
}
+bool X86TargetLowering::shouldExpandGetActiveLaneMaskUsingScalar(EVT VT) const {
+ if (!VT.isFixedLengthVector())
+ return false;
+
+ unsigned NumElts = VT.getVectorNumElements();
+
+ // Only consider power-of-2 vector lengths up to 64.
+ if (NumElts > 64 || !isPowerOf2_32(NumElts))
+ return false;
+
+ // AVX-512 natively supports mask registers (kmov/bzhi) for >=16.
+ if (Subtarget.hasAVX512())
+ return NumElts >= 16;
+
+ // Without AVX-512, bitcasting to vXi1 requires costly unpacking (e.g. pinsrb)
+ // on smaller vectors. Only expand v64i1 to avoid its 80+ vector instructions.
+ return NumElts == 64;
+}
+
enum BitTestKind : unsigned {
UndefBit,
ConstantBit,
diff --git a/llvm/lib/Target/X86/X86ISelLowering.h b/llvm/lib/Target/X86/X86ISelLowering.h
index ba04080573c42..caedf954ff068 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.h
+++ b/llvm/lib/Target/X86/X86ISelLowering.h
@@ -110,6 +110,9 @@ namespace llvm {
unsigned getJumpTableEncoding() const override;
bool useSoftFloat() const override;
+ /// Return true if X86 prefers to expand get_active_lane_mask into a scalar
+ /// bitmask sequence.
+ bool shouldExpandGetActiveLaneMaskUsingScalar(EVT VT) const override;
void markLibCallAttributes(MachineFunction *MF, unsigned CC,
ArgListTy &Args) const override;
diff --git a/llvm/test/CodeGen/X86/active_lane_mask.ll b/llvm/test/CodeGen/X86/active_lane_mask.ll
index be4264daffef0..74a37c8ba6b4a 100644
--- a/llvm/test/CodeGen/X86/active_lane_mask.ll
+++ b/llvm/test/CodeGen/X86/active_lane_mask.ll
@@ -1,6 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64 | FileCheck %s --check-prefixes=SSE2
-; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=SSE42
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64 | FileCheck %s --check-prefixes=SSE,SSE2
+; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s --check-prefixes=SSE,SSE42
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=AVX2
; RUN: llc < %s -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX512
@@ -272,34 +272,34 @@ define <16 x i1> @lane_mask_v16i1_i32(i32 %index, i32 %TC) {
; SSE42-LABEL: lane_mask_v16i1_i32:
; SSE42: # %bb.0:
; SSE42-NEXT: movd %edi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,0,0]
+; SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,0,0,0]
; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [4294967295,4294967294,4294967293,4294967292]
-; SSE42-NEXT: pminud %xmm2, %xmm0
+; SSE42-NEXT: pminud %xmm1, %xmm0
; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [0,1,2,3]
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [4294967291,4294967290,4294967289,4294967288]
-; SSE42-NEXT: pminud %xmm2, %xmm1
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4,5,6,7]
+; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967291,4294967290,4294967289,4294967288]
+; SSE42-NEXT: pminud %xmm1, %xmm2
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4,5,6,7]
; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967287,4294967286,4294967285,4294967284]
-; SSE42-NEXT: pminud %xmm2, %xmm3
+; SSE42-NEXT: pminud %xmm1, %xmm3
; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [8,9,10,11]
; SSE42-NEXT: movd %esi, %xmm4
-; SSE42-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE42-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE42-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [12,13,14,15]
-; SSE42-NEXT: movdqa %xmm2, %xmm5
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [12,13,14,15]
+; SSE42-NEXT: movdqa %xmm1, %xmm5
; SSE42-NEXT: pmaxud %xmm4, %xmm5
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm3, %xmm2
-; SSE42-NEXT: pmaxud %xmm4, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm2
-; SSE42-NEXT: packssdw %xmm5, %xmm2
-; SSE42-NEXT: movdqa %xmm1, %xmm3
+; SSE42-NEXT: pcmpeqd %xmm1, %xmm5
+; SSE42-NEXT: movdqa %xmm3, %xmm1
+; SSE42-NEXT: pmaxud %xmm4, %xmm1
+; SSE42-NEXT: pcmpeqd %xmm3, %xmm1
+; SSE42-NEXT: packssdw %xmm5, %xmm1
+; SSE42-NEXT: movdqa %xmm2, %xmm3
; SSE42-NEXT: pmaxud %xmm4, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm3
+; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
; SSE42-NEXT: pmaxud %xmm0, %xmm4
; SSE42-NEXT: pcmpeqd %xmm0, %xmm4
; SSE42-NEXT: packssdw %xmm3, %xmm4
-; SSE42-NEXT: packsswb %xmm2, %xmm4
+; SSE42-NEXT: packsswb %xmm1, %xmm4
; SSE42-NEXT: pcmpeqd %xmm0, %xmm0
; SSE42-NEXT: pxor %xmm4, %xmm0
; SSE42-NEXT: retq
@@ -329,13 +329,16 @@ define <16 x i1> @lane_mask_v16i1_i32(i32 %index, i32 %TC) {
;
; AVX512-LABEL: lane_mask_v16i1_i32:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastd %esi, %zmm0
-; AVX512-NEXT: vpbroadcastd %edi, %zmm1
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm1, %k0
+; AVX512-NEXT: xorl %eax, %eax
+; AVX512-NEXT: subl %edi, %esi
+; AVX512-NEXT: cmovbel %eax, %esi
+; AVX512-NEXT: cmpl $16, %esi
+; AVX512-NEXT: movl $16, %eax
+; AVX512-NEXT: cmovbl %esi, %eax
+; AVX512-NEXT: movl $-1, %ecx
+; AVX512-NEXT: bzhil %eax, %ecx, %eax
+; AVX512-NEXT: kmovd %eax, %k0
; AVX512-NEXT: vpmovm2b %k0, %xmm0
-; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 %index, i32 %TC)
ret <16 x i1> %active.lane.mask
@@ -405,20 +408,9 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
; SSE2-NEXT: por %xmm4, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [24,25,26,27]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [20,21,22,23]
+; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
+; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [24,25,26,27]
; SSE2-NEXT: paddd %xmm2, %xmm5
; SSE2-NEXT: movdqa %xmm5, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm6
@@ -428,6 +420,17 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE2-NEXT: pxor %xmm1, %xmm7
; SSE2-NEXT: movdqa %xmm3, %xmm5
; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
+; SSE2-NEXT: packssdw %xmm4, %xmm5
+; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [20,21,22,23]
+; SSE2-NEXT: paddd %xmm2, %xmm4
+; SSE2-NEXT: movdqa %xmm4, %xmm6
+; SSE2-NEXT: pxor %xmm1, %xmm6
+; SSE2-NEXT: movdqa %xmm0, %xmm7
+; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
+; SSE2-NEXT: por %xmm4, %xmm7
+; SSE2-NEXT: pxor %xmm1, %xmm7
+; SSE2-NEXT: movdqa %xmm3, %xmm4
+; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
; SSE2-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [16,17,18,19]
; SSE2-NEXT: movdqa %xmm2, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm6
@@ -435,8 +438,8 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE2-NEXT: por %xmm2, %xmm0
; SSE2-NEXT: pxor %xmm1, %xmm0
; SSE2-NEXT: pcmpgtd %xmm0, %xmm3
-; SSE2-NEXT: packssdw %xmm5, %xmm3
-; SSE2-NEXT: packsswb %xmm4, %xmm3
+; SSE2-NEXT: packssdw %xmm4, %xmm3
+; SSE2-NEXT: packsswb %xmm5, %xmm3
; SSE2-NEXT: pmovmskb %xmm3, %edx
; SSE2-NEXT: shll $16, %edx
; SSE2-NEXT: orl %ecx, %edx
@@ -456,28 +459,28 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE42-NEXT: movdqa %xmm2, %xmm3
; SSE42-NEXT: pmaxud %xmm0, %xmm3
; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967287,4294967286,4294967285,4294967284]
-; SSE42-NEXT: pminud %xmm1, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [8,9,10,11]
-; SSE42-NEXT: movdqa %xmm4, %xmm2
-; SSE42-NEXT: pmaxud %xmm0, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm2
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967291,4294967290,4294967289,4294967288]
-; SSE42-NEXT: pminud %xmm1, %xmm3
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [4,5,6,7]
-; SSE42-NEXT: movdqa %xmm3, %xmm4
+; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967287,4294967286,4294967285,4294967284]
+; SSE42-NEXT: pminud %xmm1, %xmm2
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [8,9,10,11]
+; SSE42-NEXT: movdqa %xmm2, %xmm4
; SSE42-NEXT: pmaxud %xmm0, %xmm4
+; SSE42-NEXT: pcmpeqd %xmm2, %xmm4
+; SSE42-NEXT: packssdw %xmm3, %xmm4
+; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967291,4294967290,4294967289,4294967288]
+; SSE42-NEXT: pminud %xmm1, %xmm2
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4,5,6,7]
+; SSE42-NEXT: movdqa %xmm2, %xmm3
+; SSE42-NEXT: pmaxud %xmm0, %xmm3
; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [4294967295,4294967294,4294967293,4294967292]
; SSE42-NEXT: pminud %xmm1, %xmm5
; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [0,1,2,3]
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm4
-; SSE42-NEXT: movdqa %xmm5, %xmm3
-; SSE42-NEXT: pmaxud %xmm0, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm5, %xmm3
-; SSE42-NEXT: packssdw %xmm4, %xmm3
-; SSE42-NEXT: packsswb %xmm2, %xmm3
-; SSE42-NEXT: pmovmskb %xmm3, %ecx
+; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
+; SSE42-NEXT: movdqa %xmm5, %xmm2
+; SSE42-NEXT: pmaxud %xmm0, %xmm2
+; SSE42-NEXT: pcmpeqd %xmm5, %xmm2
+; SSE42-NEXT: packssdw %xmm3, %xmm2
+; SSE42-NEXT: packsswb %xmm4, %xmm2
+; SSE42-NEXT: pmovmskb %xmm2, %ecx
; SSE42-NEXT: xorl $65535, %ecx # imm = 0xFFFF
; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967267,4294967266,4294967265,4294967264]
; SSE42-NEXT: pminud %xmm1, %xmm2
@@ -546,15 +549,15 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
;
; AVX512-LABEL: lane_mask_v32i1_i32:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastd %esi, %zmm0
-; AVX512-NEXT: vpbroadcastd %edi, %zmm1
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm2, %k0
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm1, %k1
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
+; AVX512-NEXT: xorl %eax, %eax
+; AVX512-NEXT: subl %edi, %esi
+; AVX512-NEXT: cmovbel %eax, %esi
+; AVX512-NEXT: cmpl $32, %esi
+; AVX512-NEXT: movl $32, %eax
+; AVX512-NEXT: cmovbl %esi, %eax
+; AVX512-NEXT: movl $-1, %ecx
+; AVX512-NEXT: bzhil %eax, %ecx, %eax
+; AVX512-NEXT: kmovd %eax, %k0
; AVX512-NEXT: vpmovm2b %k0, %ymm0
; AVX512-NEXT: retq
%active.lane.mask = call <32 x i1> @llvm.get.active.lane.mask.v32i1.i32(i32 %index, i32 %TC)
@@ -562,434 +565,69 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
}
define <64 x i1> @lane_mask_v64i1_i32(i32 %index, i32 %TC) {
-; SSE2-LABEL: lane_mask_v64i1_i32:
+; SSE-LABEL: lane_mask_v64i1_i32:
+; SSE: # %bb.0:
+; SSE-NEXT: xorl %eax, %eax
+; SSE-NEXT: subl %esi, %edx
+; SSE-NEXT: cmoval %edx, %eax
+; SSE-NEXT: cmpl $64, %eax
+; SSE-NEXT: movl $64, %ecx
+; SSE-NEXT: cmovbl %eax, %ecx
+; SSE-NEXT: movl $1, %edx
+; SSE-NEXT: # kill: def $cl killed $cl killed $ecx
+; SSE-NEXT: shlq %cl, %rdx
+; SSE-NEXT: movq %rdi, %rax
+; SSE-NEXT: decq %rdx
+; SSE-NEXT: movq %rdx, (%rdi)
+; SSE-NEXT: retq
+;
+; AVX2-LABEL: lane_mask_v64i1_i32:
+; AVX2: # %bb.0:
+; AVX2-NEXT: xorl %eax, %eax
+; AVX2-NEXT: subl %esi, %edx
+; AVX2-NEXT: cmovbel %eax, %edx
+; AVX2-NEXT: cmpl $64, %edx
+; AVX2-NEXT: movl $64, %ecx
+; AVX2-NEXT: cmovbl %edx, %ecx
+; AVX2-NEXT: movq %rdi, %rax
+; AVX2-NEXT: movq $-1, %rdx
+; AVX2-NEXT: bzhiq %rcx, %rdx, %rcx
+; AVX2-NEXT: movq %rcx, (%rdi)
+; AVX2-NEXT: retq
+;
+; AVX512-LABEL: lane_mask_v64i1_i32:
+; AVX512: # %bb.0:
+; AVX512-NEXT: xorl %eax, %eax
+; AVX512-NEXT: subl %edi, %esi
+; AVX512-NEXT: cmovbel %eax, %esi
+; AVX512-NEXT: cmpl $64, %esi
+; AVX512-NEXT: movl $64, %eax
+; AVX512-NEXT: cmovbl %esi, %eax
+; AVX512-NEXT: movq $-1, %rcx
+; AVX512-NEXT: bzhiq %rax, %rcx, %rax
+; AVX512-NEXT: kmovq %rax, %k0
+; AVX512-NEXT: vpmovm2b %k0, %zmm0
+; AVX512-NEXT: retq
+ %active.lane.mask = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i32(i32 %index, i32 %TC)
+ ret <64 x i1> %active.lane.mask
+}
+
+;
+; i32 (zero index)
+;
+
+define <2 x i1> @lane_mask_v2i1_i32_zero(i32 %TC) {
+; SSE2-LABEL: lane_mask_v2i1_i32_zero:
; SSE2: # %bb.0:
-; SSE2-NEXT: movq %rdi, %rax
-; SSE2-NEXT: movd %esi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,0,0]
-; SSE2-NEXT: movdqa {{.*#+}} xmm1 = [2147483648,2147483648,2147483648,2147483648]
-; SSE2-NEXT: movdqa %xmm2, %xmm0
-; SSE2-NEXT: pxor %xmm1, %xmm0
-; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [12,13,14,15]
-; SSE2-NEXT: paddd %xmm2, %xmm3
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pxor %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
-; SSE2-NEXT: por %xmm3, %xmm5
-; SSE2-NEXT: pxor %xmm1, %xmm5
-; SSE2-NEXT: movd %edx, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,0,0,0]
-; SSE2-NEXT: pxor %xmm1, %xmm3
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [8,9,10,11]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: packssdw %xmm6, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [4,5,6,7]
-; SSE2-NEXT: paddd %xmm2, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [0,1,2,3]
-; SSE2-NEXT: paddd %xmm2, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm0, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: pxor %xmm1, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: packssdw %xmm5, %xmm6
-; SSE2-NEXT: packsswb %xmm4, %xmm6
-; SSE2-NEXT: pmovmskb %xmm6, %edx
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [28,29,30,31]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: por %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [24,25,26,27]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [20,21,22,23]
-; SSE2-NEXT: paddd %xmm2, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [16,17,18,19]
-; SSE2-NEXT: paddd %xmm2, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm0, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: pxor %xmm1, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: packssdw %xmm5, %xmm6
-; SSE2-NEXT: packsswb %xmm4, %xmm6
-; SSE2-NEXT: pmovmskb %xmm6, %ecx
-; SSE2-NEXT: shll $16, %ecx
-; SSE2-NEXT: orl %edx, %ecx
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [44,45,46,47]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: por %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [40,41,42,43]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [36,37,38,39]
-; SSE2-NEXT: paddd %xmm2, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [32,33,34,35]
-; SSE2-NEXT: paddd %xmm2, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm0, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: pxor %xmm1, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: packssdw %xmm5, %xmm6
-; SSE2-NEXT: packsswb %xmm4, %xmm6
-; SSE2-NEXT: pmovmskb %xmm6, %edx
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [60,61,62,63]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: por %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [56,57,58,59]
-; SSE2-NEXT: paddd %xmm2, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [52,53,54,55]
-; SSE2-NEXT: paddd %xmm2, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [48,49,50,51]
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: movdqa %xmm2, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm0
-; SSE2-NEXT: por %xmm2, %xmm0
-; SSE2-NEXT: pxor %xmm1, %xmm0
-; SSE2-NEXT: pcmpgtd %xmm0, %xmm3
-; SSE2-NEXT: packssdw %xmm5, %xmm3
-; SSE2-NEXT: packsswb %xmm4, %xmm3
-; SSE2-NEXT: pmovmskb %xmm3, %esi
-; SSE2-NEXT: shll $16, %esi
-; SSE2-NEXT: orl %edx, %esi
-; SSE2-NEXT: shlq $32, %rsi
-; SSE2-NEXT: orq %rcx, %rsi
-; SSE2-NEXT: movq %rsi, (%rdi)
+; SSE2-NEXT: movd %edi, %xmm0
+; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
+; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE2-NEXT: retq
;
-; SSE42-LABEL: lane_mask_v64i1_i32:
+; SSE42-LABEL: lane_mask_v2i1_i32_zero:
; SSE42: # %bb.0:
-; SSE42-NEXT: movq %rdi, %rax
-; SSE42-NEXT: movd %edx, %xmm1
-; SSE42-NEXT: movd %esi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967283,4294967282,4294967281,4294967280]
-; SSE42-NEXT: pminud %xmm0, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [12,13,14,15]
-; SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]
-; SSE42-NEXT: movdqa %xmm2, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967287,4294967286,4294967285,4294967284]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [8,9,10,11]
-; SSE42-NEXT: movdqa %xmm4, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm2
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967291,4294967290,4294967289,4294967288]
-; SSE42-NEXT: pminud %xmm0, %xmm3
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [4,5,6,7]
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pmaxud %xmm1, %xmm4
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967295,4294967294,4294967293,4294967292]
-; SSE42-NEXT: pminud %xmm0, %xmm3
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [0,1,2,3]
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pmaxud %xmm1, %xmm5
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm5
-; SSE42-NEXT: packsswb %xmm2, %xmm5
-; SSE42-NEXT: pmovmskb %xmm5, %edx
-; SSE42-NEXT: xorl $65535, %edx # imm = 0xFFFF
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967267,4294967266,4294967265,4294967264]
-; SSE42-NEXT: pminud %xmm0, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [28,29,30,31]
-; SSE42-NEXT: movdqa %xmm2, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967271,4294967270,4294967269,4294967268]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [24,25,26,27]
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm4, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967275,4294967274,4294967273,4294967272]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [20,21,22,23]
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: movdqa %xmm4, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967279,4294967278,4294967277,4294967276]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [16,17,18,19]
-; SSE42-NEXT: movdqa %xmm4, %xmm5
-; SSE42-NEXT: pmaxud %xmm1, %xmm5
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm5
-; SSE42-NEXT: packssdw %xmm3, %xmm5
-; SSE42-NEXT: packsswb %xmm2, %xmm5
-; SSE42-NEXT: pmovmskb %xmm5, %ecx
-; SSE42-NEXT: notl %ecx
-; SSE42-NEXT: shll $16, %ecx
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967251,4294967250,4294967249,4294967248]
-; SSE42-NEXT: pminud %xmm0, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [44,45,46,47]
-; SSE42-NEXT: orl %edx, %ecx
-; SSE42-NEXT: movdqa %xmm2, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967255,4294967254,4294967253,4294967252]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [40,41,42,43]
-; SSE42-NEXT: movdqa %xmm4, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm2
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967259,4294967258,4294967257,4294967256]
-; SSE42-NEXT: pminud %xmm0, %xmm3
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [36,37,38,39]
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pmaxud %xmm1, %xmm4
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967263,4294967262,4294967261,4294967260]
-; SSE42-NEXT: pminud %xmm0, %xmm3
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [32,33,34,35]
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pmaxud %xmm1, %xmm5
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm5
-; SSE42-NEXT: packsswb %xmm2, %xmm5
-; SSE42-NEXT: pmovmskb %xmm5, %edx
-; SSE42-NEXT: xorl $65535, %edx # imm = 0xFFFF
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967235,4294967234,4294967233,4294967232]
-; SSE42-NEXT: pminud %xmm0, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [60,61,62,63]
-; SSE42-NEXT: movdqa %xmm2, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967239,4294967238,4294967237,4294967236]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [56,57,58,59]
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm4, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967243,4294967242,4294967241,4294967240]
-; SSE42-NEXT: pminud %xmm0, %xmm4
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [52,53,54,55]
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: movdqa %xmm4, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm4, %xmm3
-; SSE42-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [48,49,50,51]
-; SSE42-NEXT: pmaxud %xmm0, %xmm1
-; SSE42-NEXT: pcmpeqd %xmm0, %xmm1
-; SSE42-NEXT: packssdw %xmm3, %xmm1
-; SSE42-NEXT: packsswb %xmm2, %xmm1
-; SSE42-NEXT: pmovmskb %xmm1, %esi
-; SSE42-NEXT: notl %esi
-; SSE42-NEXT: shll $16, %esi
-; SSE42-NEXT: orl %edx, %esi
-; SSE42-NEXT: shlq $32, %rsi
-; SSE42-NEXT: orq %rcx, %rsi
-; SSE42-NEXT: movq %rsi, (%rdi)
-; SSE42-NEXT: retq
-;
-; AVX2-LABEL: lane_mask_v64i1_i32:
-; AVX2: # %bb.0:
-; AVX2-NEXT: movq %rdi, %rax
-; AVX2-NEXT: vmovd %edx, %xmm0
-; AVX2-NEXT: vpbroadcastd %xmm0, %ymm0
-; AVX2-NEXT: vmovd %esi, %xmm1
-; AVX2-NEXT: vpbroadcastd %xmm1, %ymm1
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm2
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2 # [24,25,26,27,28,29,30,31]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm2, %ymm3
-; AVX2-NEXT: vpcmpeqd %ymm3, %ymm2, %ymm2
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm3
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm3, %ymm3 # [16,17,18,19,20,21,22,23]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm3, %ymm4
-; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm3
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
-; AVX2-NEXT: vpxor %ymm2, %ymm3, %ymm3
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm4
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4 # [8,9,10,11,12,13,14,15]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm4, %ymm5
-; AVX2-NEXT: vpcmpeqd %ymm5, %ymm4, %ymm4
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm5, %ymm5 # [0,1,2,3,4,5,6,7]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpeqd %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpackssdw %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm2, %ymm4, %ymm4
-; AVX2-NEXT: vpacksswb %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,2,1,3]
-; AVX2-NEXT: vpmovmskb %ymm3, %ecx
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm3
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm3, %ymm3 # [56,57,58,59,60,61,62,63]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm3, %ymm4
-; AVX2-NEXT: vpcmpeqd %ymm4, %ymm3, %ymm3
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm4
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4 # [48,49,50,51,52,53,54,55]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm4, %ymm5
-; AVX2-NEXT: vpcmpeqd %ymm5, %ymm4, %ymm4
-; AVX2-NEXT: vpackssdw %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,2,1,3]
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm4
-; AVX2-NEXT: vpxor %ymm2, %ymm3, %ymm3
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm4, %ymm4 # [40,41,42,43,44,45,46,47]
-; AVX2-NEXT: vpmaxud %ymm0, %ymm4, %ymm5
-; AVX2-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
-; AVX2-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [32,33,34,35,36,37,38,39]
-; AVX2-NEXT: vpcmpeqd %ymm5, %ymm4, %ymm4
-; AVX2-NEXT: vpmaxud %ymm0, %ymm1, %ymm0
-; AVX2-NEXT: vpcmpeqd %ymm0, %ymm1, %ymm0
-; AVX2-NEXT: vpackssdw %ymm4, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpacksswb %ymm3, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpmovmskb %ymm0, %edx
-; AVX2-NEXT: shlq $32, %rdx
-; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: movq %rdx, (%rdi)
-; AVX2-NEXT: vzeroupper
-; AVX2-NEXT: retq
-;
-; AVX512-LABEL: lane_mask_v64i1_i32:
-; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastd %esi, %zmm0
-; AVX512-NEXT: vpbroadcastd %edi, %zmm1
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm3
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm2, %k0
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm3, %zmm2 # [16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47]
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
-; AVX512-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63]
-; AVX512-NEXT: vpcmpltud %zmm0, %zmm1, %k2
-; AVX512-NEXT: kunpckwd %k1, %k2, %k1
-; AVX512-NEXT: kunpckdq %k0, %k1, %k0
-; AVX512-NEXT: vpmovm2b %k0, %zmm0
-; AVX512-NEXT: retq
- %active.lane.mask = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i32(i32 %index, i32 %TC)
- ret <64 x i1> %active.lane.mask
-}
-
-;
-; i32 (zero index)
-;
-
-define <2 x i1> @lane_mask_v2i1_i32_zero(i32 %TC) {
-; SSE2-LABEL: lane_mask_v2i1_i32_zero:
-; SSE2: # %bb.0:
-; SSE2-NEXT: movd %edi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
-; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: retq
-;
-; SSE42-LABEL: lane_mask_v2i1_i32_zero:
-; SSE42: # %bb.0:
-; SSE42-NEXT: movd %edi, %xmm0
+; SSE42-NEXT: movd %edi, %xmm0
; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
; SSE42-NEXT: movq {{.*#+}} xmm1 = [0,1,0,0]
; SSE42-NEXT: pmaxud %xmm1, %xmm0
@@ -1180,10 +818,13 @@ define <16 x i1> @lane_mask_v16i1_i32_zero(i32 %TC) {
;
; AVX512-LABEL: lane_mask_v16i1_i32_zero:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastd %edi, %zmm0
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k0
+; AVX512-NEXT: cmpl $16, %edi
+; AVX512-NEXT: movl $16, %eax
+; AVX512-NEXT: cmovbl %edi, %eax
+; AVX512-NEXT: movl $-1, %ecx
+; AVX512-NEXT: bzhil %eax, %ecx, %eax
+; AVX512-NEXT: kmovd %eax, %k0
; AVX512-NEXT: vpmovm2b %k0, %xmm0
-; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 %TC)
ret <16 x i1> %active.lane.mask
@@ -1304,10 +945,12 @@ define <32 x i1> @lane_mask_v32i1_i32_zero(i32 %TC) {
;
; AVX512-LABEL: lane_mask_v32i1_i32_zero:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastd %edi, %zmm0
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k0
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
+; AVX512-NEXT: cmpl $32, %edi
+; AVX512-NEXT: movl $32, %eax
+; AVX512-NEXT: cmovbl %edi, %eax
+; AVX512-NEXT: movl $-1, %ecx
+; AVX512-NEXT: bzhil %eax, %ecx, %eax
+; AVX512-NEXT: kmovd %eax, %k0
; AVX512-NEXT: vpmovm2b %k0, %ymm0
; AVX512-NEXT: retq
%active.lane.mask = call <32 x i1> @llvm.get.active.lane.mask.v32i1.i32(i32 0, i32 %TC)
@@ -1315,229 +958,38 @@ define <32 x i1> @lane_mask_v32i1_i32_zero(i32 %TC) {
}
define <64 x i1> @lane_mask_v64i1_i32_zero(i32 %TC) {
-; SSE2-LABEL: lane_mask_v64i1_i32_zero:
-; SSE2: # %bb.0:
-; SSE2-NEXT: movd %esi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
-; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: movq %rdi, %rax
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: packssdw %xmm1, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm1, %xmm3
-; SSE2-NEXT: packsswb %xmm2, %xmm3
-; SSE2-NEXT: pmovmskb %xmm3, %edx
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: packssdw %xmm1, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm1, %xmm3
-; SSE2-NEXT: packsswb %xmm2, %xmm3
-; SSE2-NEXT: pmovmskb %xmm3, %ecx
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: shll $16, %ecx
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: orl %edx, %ecx
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm1, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: packssdw %xmm3, %xmm1
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packsswb %xmm2, %xmm1
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pmovmskb %xmm1, %edx
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: packssdw %xmm3, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: packssdw %xmm1, %xmm0
-; SSE2-NEXT: packsswb %xmm2, %xmm0
-; SSE2-NEXT: pmovmskb %xmm0, %esi
-; SSE2-NEXT: shll $16, %esi
-; SSE2-NEXT: orl %edx, %esi
-; SSE2-NEXT: shlq $32, %rsi
-; SSE2-NEXT: orq %rcx, %rsi
-; SSE2-NEXT: movq %rsi, (%rdi)
-; SSE2-NEXT: retq
-;
-; SSE42-LABEL: lane_mask_v64i1_i32_zero:
-; SSE42: # %bb.0:
-; SSE42-NEXT: movq %rdi, %rax
-; SSE42-NEXT: movd %esi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [12,13,14,15]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [8,9,10,11]
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [4,5,6,7]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [0,1,2,3]
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pmaxud %xmm1, %xmm4
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm4
-; SSE42-NEXT: packssdw %xmm2, %xmm4
-; SSE42-NEXT: packsswb %xmm3, %xmm4
-; SSE42-NEXT: pmovmskb %xmm4, %edx
-; SSE42-NEXT: xorl $65535, %edx # imm = 0xFFFF
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [28,29,30,31]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [24,25,26,27]
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [20,21,22,23]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [16,17,18,19]
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pmaxud %xmm1, %xmm4
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm4
-; SSE42-NEXT: packssdw %xmm2, %xmm4
-; SSE42-NEXT: packsswb %xmm3, %xmm4
-; SSE42-NEXT: pmovmskb %xmm4, %ecx
-; SSE42-NEXT: notl %ecx
-; SSE42-NEXT: shll $16, %ecx
-; SSE42-NEXT: orl %edx, %ecx
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [44,45,46,47]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [40,41,42,43]
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [36,37,38,39]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [32,33,34,35]
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pmaxud %xmm1, %xmm4
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm4
-; SSE42-NEXT: packssdw %xmm2, %xmm4
-; SSE42-NEXT: packsswb %xmm3, %xmm4
-; SSE42-NEXT: pmovmskb %xmm4, %edx
-; SSE42-NEXT: xorl $65535, %edx # imm = 0xFFFF
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [60,61,62,63]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [56,57,58,59]
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pmaxud %xmm1, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [52,53,54,55]
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pmaxud %xmm1, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [48,49,50,51]
-; SSE42-NEXT: pmaxud %xmm1, %xmm0
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm0
-; SSE42-NEXT: packssdw %xmm2, %xmm0
-; SSE42-NEXT: packsswb %xmm3, %xmm0
-; SSE42-NEXT: pmovmskb %xmm0, %esi
-; SSE42-NEXT: notl %esi
-; SSE42-NEXT: shll $16, %esi
-; SSE42-NEXT: orl %edx, %esi
-; SSE42-NEXT: shlq $32, %rsi
-; SSE42-NEXT: orq %rcx, %rsi
-; SSE42-NEXT: movq %rsi, (%rdi)
-; SSE42-NEXT: retq
+; SSE-LABEL: lane_mask_v64i1_i32_zero:
+; SSE: # %bb.0:
+; SSE-NEXT: cmpl $64, %esi
+; SSE-NEXT: movl $64, %ecx
+; SSE-NEXT: cmovbl %esi, %ecx
+; SSE-NEXT: movl $1, %edx
+; SSE-NEXT: # kill: def $cl killed $cl killed $ecx
+; SSE-NEXT: shlq %cl, %rdx
+; SSE-NEXT: movq %rdi, %rax
+; SSE-NEXT: decq %rdx
+; SSE-NEXT: movq %rdx, (%rdi)
+; SSE-NEXT: retq
;
; AVX2-LABEL: lane_mask_v64i1_i32_zero:
; AVX2: # %bb.0:
+; AVX2-NEXT: cmpl $64, %esi
+; AVX2-NEXT: movl $64, %ecx
+; AVX2-NEXT: cmovbl %esi, %ecx
; AVX2-NEXT: movq %rdi, %rax
-; AVX2-NEXT: vmovd %esi, %xmm0
-; AVX2-NEXT: vpbroadcastd %xmm0, %ymm0
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [24,25,26,27,28,29,30,31]
-; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm2
-; AVX2-NEXT: vpcmpeqd %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [16,17,18,19,20,21,22,23]
-; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm3
-; AVX2-NEXT: vpcmpeqd %ymm2, %ymm3, %ymm2
-; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
-; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [8,9,10,11,12,13,14,15]
-; AVX2-NEXT: vpmaxud %ymm3, %ymm0, %ymm4
-; AVX2-NEXT: vpcmpeqd %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,2,3,4,5,6,7]
-; AVX2-NEXT: vpmaxud %ymm4, %ymm0, %ymm5
-; AVX2-NEXT: vpcmpeqd %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpackssdw %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm2, %ymm3, %ymm3
-; AVX2-NEXT: vpacksswb %ymm1, %ymm3, %ymm1
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpmovmskb %ymm1, %ecx
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [56,57,58,59,60,61,62,63]
-; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm3
-; AVX2-NEXT: vpcmpeqd %ymm1, %ymm3, %ymm1
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [48,49,50,51,52,53,54,55]
-; AVX2-NEXT: vpmaxud %ymm3, %ymm0, %ymm4
-; AVX2-NEXT: vpcmpeqd %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vpackssdw %ymm1, %ymm3, %ymm1
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [40,41,42,43,44,45,46,47]
-; AVX2-NEXT: vpmaxud %ymm3, %ymm0, %ymm4
-; AVX2-NEXT: vpcmpeqd %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [32,33,34,35,36,37,38,39]
-; AVX2-NEXT: vpmaxud %ymm4, %ymm0, %ymm0
-; AVX2-NEXT: vpcmpeqd %ymm4, %ymm0, %ymm0
-; AVX2-NEXT: vpackssdw %ymm3, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpmovmskb %ymm0, %edx
-; AVX2-NEXT: shlq $32, %rdx
-; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: movq %rdx, (%rdi)
-; AVX2-NEXT: vzeroupper
+; AVX2-NEXT: movq $-1, %rdx
+; AVX2-NEXT: bzhiq %rcx, %rdx, %rcx
+; AVX2-NEXT: movq %rcx, (%rdi)
; AVX2-NEXT: retq
;
; AVX512-LABEL: lane_mask_v64i1_i32_zero:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastd %edi, %zmm0
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k0
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k2
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
-; AVX512-NEXT: vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: kunpckwd %k2, %k1, %k1
-; AVX512-NEXT: kunpckdq %k0, %k1, %k0
+; AVX512-NEXT: cmpl $64, %edi
+; AVX512-NEXT: movl $64, %eax
+; AVX512-NEXT: cmovbl %edi, %eax
+; AVX512-NEXT: movq $-1, %rcx
+; AVX512-NEXT: bzhiq %rax, %rcx, %rax
+; AVX512-NEXT: kmovq %rax, %k0
; AVX512-NEXT: vpmovm2b %k0, %zmm0
; AVX512-NEXT: retq
%active.lane.mask = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i32(i32 0, i32 %TC)
@@ -1948,195 +1400,195 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
; SSE2-LABEL: lane_mask_v16i1_i64:
; SSE2: # %bb.0:
; SSE2-NEXT: movq %rdi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,1,0,1]
+; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm0[0,1,0,1]
; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [9223372039002259456,9223372039002259456]
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm0, %xmm5
+; SSE2-NEXT: movdqa %xmm5, %xmm6
+; SSE2-NEXT: pxor %xmm0, %xmm6
; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
-; SSE2-NEXT: paddq %xmm4, %xmm2
+; SSE2-NEXT: paddq %xmm5, %xmm2
; SSE2-NEXT: movdqa %xmm2, %xmm1
; SSE2-NEXT: pxor %xmm0, %xmm1
-; SSE2-NEXT: movdqa %xmm5, %xmm3
+; SSE2-NEXT: movdqa %xmm6, %xmm3
; SSE2-NEXT: pcmpgtd %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm1
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm1
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
+; SSE2-NEXT: pand %xmm4, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
; SSE2-NEXT: por %xmm2, %xmm1
; SSE2-NEXT: por %xmm7, %xmm1
; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2,3]
-; SSE2-NEXT: paddq %xmm4, %xmm3
+; SSE2-NEXT: paddq %xmm5, %xmm3
; SSE2-NEXT: movdqa %xmm3, %xmm2
; SSE2-NEXT: pxor %xmm0, %xmm2
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm2
+; SSE2-NEXT: movdqa %xmm6, %xmm4
+; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm2
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm2[1,1,3,3]
; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
; SSE2-NEXT: por %xmm3, %xmm2
; SSE2-NEXT: por %xmm8, %xmm2
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [4,5]
-; SSE2-NEXT: paddq %xmm4, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm3
+; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [4,5]
+; SSE2-NEXT: paddq %xmm5, %xmm4
+; SSE2-NEXT: movdqa %xmm4, %xmm3
; SSE2-NEXT: pxor %xmm0, %xmm3
-; SSE2-NEXT: movdqa %xmm5, %xmm7
+; SSE2-NEXT: movdqa %xmm6, %xmm7
; SSE2-NEXT: pcmpgtd %xmm3, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm3
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm3
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[1,1,3,3]
; SSE2-NEXT: pand %xmm8, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm3
+; SSE2-NEXT: por %xmm4, %xmm3
; SSE2-NEXT: por %xmm9, %xmm3
; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [6,7]
-; SSE2-NEXT: paddq %xmm4, %xmm7
-; SSE2-NEXT: movdqa %xmm7, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm5, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm8
+; SSE2-NEXT: paddq %xmm5, %xmm7
+; SSE2-NEXT: movdqa %xmm7, %xmm4
+; SSE2-NEXT: pxor %xmm0, %xmm4
+; SSE2-NEXT: movdqa %xmm6, %xmm8
+; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[1,1,3,3]
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm4[1,1,3,3]
; SSE2-NEXT: pand %xmm9, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: por %xmm10, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
+; SSE2-NEXT: por %xmm7, %xmm4
+; SSE2-NEXT: por %xmm10, %xmm4
; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [8,9]
-; SSE2-NEXT: paddq %xmm4, %xmm8
+; SSE2-NEXT: paddq %xmm5, %xmm8
; SSE2-NEXT: movdqa %xmm8, %xmm7
; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm5, %xmm9
+; SSE2-NEXT: movdqa %xmm6, %xmm9
; SSE2-NEXT: pcmpgtd %xmm7, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm7
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm7[1,1,3,3]
; SSE2-NEXT: pand %xmm10, %xmm11
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
; SSE2-NEXT: por %xmm8, %xmm7
; SSE2-NEXT: por %xmm11, %xmm7
; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [10,11]
-; SSE2-NEXT: paddq %xmm4, %xmm9
+; SSE2-NEXT: paddq %xmm5, %xmm9
; SSE2-NEXT: movdqa %xmm9, %xmm8
; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm5, %xmm10
+; SSE2-NEXT: movdqa %xmm6, %xmm10
; SSE2-NEXT: pcmpgtd %xmm8, %xmm10
; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm8
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm8
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm8[1,1,3,3]
; SSE2-NEXT: pand %xmm11, %xmm12
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
; SSE2-NEXT: por %xmm9, %xmm8
; SSE2-NEXT: por %xmm12, %xmm8
; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [12,13]
-; SSE2-NEXT: paddq %xmm4, %xmm10
+; SSE2-NEXT: paddq %xmm5, %xmm10
; SSE2-NEXT: movdqa %xmm10, %xmm9
; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm5, %xmm11
+; SSE2-NEXT: movdqa %xmm6, %xmm11
; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm9
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm9[1,1,3,3]
; SSE2-NEXT: pand %xmm12, %xmm13
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm11[1,1,3,3]
; SSE2-NEXT: por %xmm10, %xmm9
; SSE2-NEXT: por %xmm13, %xmm9
-; SSE2-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [14,15]
-; SSE2-NEXT: movdqa %xmm4, %xmm10
+; SSE2-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [14,15]
+; SSE2-NEXT: movdqa %xmm5, %xmm10
; SSE2-NEXT: pxor %xmm0, %xmm10
-; SSE2-NEXT: movdqa %xmm5, %xmm11
+; SSE2-NEXT: movdqa %xmm6, %xmm11
; SSE2-NEXT: pcmpgtd %xmm10, %xmm11
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm10[1,1,3,3]
-; SSE2-NEXT: pand %xmm12, %xmm5
+; SSE2-NEXT: pcmpeqd %xmm6, %xmm10
+; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm10[1,1,3,3]
+; SSE2-NEXT: pand %xmm12, %xmm6
; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm10
; SSE2-NEXT: por %xmm5, %xmm10
-; SSE2-NEXT: movq %rsi, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,1,0,1]
+; SSE2-NEXT: por %xmm6, %xmm10
+; SSE2-NEXT: movq %rsi, %xmm5
+; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[0,1,0,1]
; SSE2-NEXT: pxor %xmm0, %xmm10
-; SSE2-NEXT: pxor %xmm0, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm10, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm10
+; SSE2-NEXT: pxor %xmm0, %xmm5
+; SSE2-NEXT: movdqa %xmm5, %xmm6
+; SSE2-NEXT: pcmpgtd %xmm10, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm6[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm10
; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
; SSE2-NEXT: pand %xmm11, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm10, %xmm5
+; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
+; SSE2-NEXT: por %xmm10, %xmm6
; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm4, %xmm10
+; SSE2-NEXT: movdqa %xmm5, %xmm10
; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm9
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm9[1,1,3,3]
; SSE2-NEXT: pand %xmm11, %xmm12
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
; SSE2-NEXT: por %xmm12, %xmm9
-; SSE2-NEXT: packssdw %xmm5, %xmm9
+; SSE2-NEXT: packssdw %xmm6, %xmm9
; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
+; SSE2-NEXT: movdqa %xmm5, %xmm6
+; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm8
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
; SSE2-NEXT: pand %xmm10, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[1,1,3,3]
; SSE2-NEXT: por %xmm8, %xmm10
; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm7
+; SSE2-NEXT: movdqa %xmm5, %xmm6
+; SSE2-NEXT: pcmpgtd %xmm7, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
; SSE2-NEXT: pand %xmm8, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm5
-; SSE2-NEXT: packssdw %xmm10, %xmm5
-; SSE2-NEXT: packssdw %xmm9, %xmm5
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm4, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm6
; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
+; SSE2-NEXT: por %xmm7, %xmm6
+; SSE2-NEXT: packssdw %xmm10, %xmm6
+; SSE2-NEXT: packssdw %xmm9, %xmm6
+; SSE2-NEXT: pxor %xmm0, %xmm4
+; SSE2-NEXT: movdqa %xmm5, %xmm7
+; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
+; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
+; SSE2-NEXT: pand %xmm8, %xmm4
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm7
+; SSE2-NEXT: por %xmm4, %xmm7
; SSE2-NEXT: pxor %xmm0, %xmm3
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm3
+; SSE2-NEXT: movdqa %xmm5, %xmm4
+; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm3
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[1,1,3,3]
; SSE2-NEXT: pand %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
; SSE2-NEXT: por %xmm9, %xmm3
; SSE2-NEXT: packssdw %xmm7, %xmm3
; SSE2-NEXT: pxor %xmm0, %xmm2
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm2
+; SSE2-NEXT: movdqa %xmm5, %xmm4
+; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm2
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
; SSE2-NEXT: pand %xmm7, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm2, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
+; SSE2-NEXT: por %xmm2, %xmm4
; SSE2-NEXT: pxor %xmm0, %xmm1
-; SSE2-NEXT: movdqa %xmm4, %xmm0
+; SSE2-NEXT: movdqa %xmm5, %xmm0
; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm4, %xmm1
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm1
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
; SSE2-NEXT: pand %xmm2, %xmm1
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
; SSE2-NEXT: por %xmm1, %xmm0
-; SSE2-NEXT: packssdw %xmm6, %xmm0
+; SSE2-NEXT: packssdw %xmm4, %xmm0
; SSE2-NEXT: packssdw %xmm3, %xmm0
-; SSE2-NEXT: packsswb %xmm5, %xmm0
+; SSE2-NEXT: packsswb %xmm6, %xmm0
; SSE2-NEXT: retq
;
; SSE42-LABEL: lane_mask_v16i1_i64:
@@ -2144,72 +1596,72 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: movq %rdi, %xmm0
; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pxor %xmm1, %xmm4
+; SSE42-NEXT: movdqa %xmm0, %xmm5
+; SSE42-NEXT: pxor %xmm1, %xmm5
; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
; SSE42-NEXT: paddq %xmm0, %xmm3
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm5
-; SSE42-NEXT: movdqa %xmm4, %xmm2
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm2
+; SSE42-NEXT: movdqa %xmm3, %xmm4
+; SSE42-NEXT: pxor %xmm1, %xmm4
+; SSE42-NEXT: movdqa %xmm5, %xmm2
+; SSE42-NEXT: pcmpgtq %xmm4, %xmm2
; SSE42-NEXT: por %xmm3, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [2,3]
-; SSE42-NEXT: paddq %xmm0, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
+; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [2,3]
+; SSE42-NEXT: paddq %xmm0, %xmm4
+; SSE42-NEXT: movdqa %xmm4, %xmm6
; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm4, %xmm3
+; SSE42-NEXT: movdqa %xmm5, %xmm3
; SSE42-NEXT: pcmpgtq %xmm6, %xmm3
-; SSE42-NEXT: por %xmm5, %xmm3
+; SSE42-NEXT: por %xmm4, %xmm3
; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [4,5]
; SSE42-NEXT: paddq %xmm0, %xmm6
; SSE42-NEXT: movdqa %xmm6, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm4, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
-; SSE42-NEXT: por %xmm6, %xmm5
+; SSE42-NEXT: movdqa %xmm5, %xmm4
+; SSE42-NEXT: pcmpgtq %xmm7, %xmm4
+; SSE42-NEXT: por %xmm6, %xmm4
; SSE42-NEXT: movdqa {{.*#+}} xmm7 = [6,7]
; SSE42-NEXT: paddq %xmm0, %xmm7
; SSE42-NEXT: movdqa %xmm7, %xmm8
; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm4, %xmm6
+; SSE42-NEXT: movdqa %xmm5, %xmm6
; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
; SSE42-NEXT: por %xmm7, %xmm6
; SSE42-NEXT: movdqa {{.*#+}} xmm8 = [8,9]
; SSE42-NEXT: paddq %xmm0, %xmm8
; SSE42-NEXT: movdqa %xmm8, %xmm9
; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: movdqa %xmm4, %xmm7
+; SSE42-NEXT: movdqa %xmm5, %xmm7
; SSE42-NEXT: pcmpgtq %xmm9, %xmm7
; SSE42-NEXT: por %xmm8, %xmm7
; SSE42-NEXT: movdqa {{.*#+}} xmm9 = [10,11]
; SSE42-NEXT: paddq %xmm0, %xmm9
; SSE42-NEXT: movdqa %xmm9, %xmm10
; SSE42-NEXT: pxor %xmm1, %xmm10
-; SSE42-NEXT: movdqa %xmm4, %xmm8
+; SSE42-NEXT: movdqa %xmm5, %xmm8
; SSE42-NEXT: pcmpgtq %xmm10, %xmm8
; SSE42-NEXT: por %xmm9, %xmm8
; SSE42-NEXT: movdqa {{.*#+}} xmm9 = [12,13]
; SSE42-NEXT: paddq %xmm0, %xmm9
; SSE42-NEXT: movdqa %xmm9, %xmm10
; SSE42-NEXT: pxor %xmm1, %xmm10
-; SSE42-NEXT: movdqa %xmm4, %xmm11
+; SSE42-NEXT: movdqa %xmm5, %xmm11
; SSE42-NEXT: pcmpgtq %xmm10, %xmm11
; SSE42-NEXT: por %xmm9, %xmm11
; SSE42-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [14,15]
; SSE42-NEXT: movdqa %xmm0, %xmm9
; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm9, %xmm4
-; SSE42-NEXT: por %xmm0, %xmm4
+; SSE42-NEXT: pcmpgtq %xmm9, %xmm5
+; SSE42-NEXT: por %xmm0, %xmm5
; SSE42-NEXT: movq %rsi, %xmm0
; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE42-NEXT: pxor %xmm1, %xmm4
+; SSE42-NEXT: pxor %xmm1, %xmm5
; SSE42-NEXT: pxor %xmm1, %xmm0
; SSE42-NEXT: movdqa %xmm0, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm4, %xmm9
+; SSE42-NEXT: pcmpgtq %xmm5, %xmm9
; SSE42-NEXT: pxor %xmm1, %xmm11
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm11, %xmm4
-; SSE42-NEXT: packssdw %xmm9, %xmm4
+; SSE42-NEXT: movdqa %xmm0, %xmm5
+; SSE42-NEXT: pcmpgtq %xmm11, %xmm5
+; SSE42-NEXT: packssdw %xmm9, %xmm5
; SSE42-NEXT: pxor %xmm1, %xmm8
; SSE42-NEXT: movdqa %xmm0, %xmm9
; SSE42-NEXT: pcmpgtq %xmm8, %xmm9
@@ -2217,14 +1669,14 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: movdqa %xmm0, %xmm8
; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
; SSE42-NEXT: packssdw %xmm9, %xmm8
-; SSE42-NEXT: packssdw %xmm4, %xmm8
+; SSE42-NEXT: packssdw %xmm5, %xmm8
; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm4
-; SSE42-NEXT: pxor %xmm1, %xmm5
+; SSE42-NEXT: movdqa %xmm0, %xmm5
+; SSE42-NEXT: pcmpgtq %xmm6, %xmm5
+; SSE42-NEXT: pxor %xmm1, %xmm4
; SSE42-NEXT: movdqa %xmm0, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm6
-; SSE42-NEXT: packssdw %xmm4, %xmm6
+; SSE42-NEXT: pcmpgtq %xmm4, %xmm6
+; SSE42-NEXT: packssdw %xmm5, %xmm6
; SSE42-NEXT: pxor %xmm1, %xmm3
; SSE42-NEXT: movdqa %xmm0, %xmm4
; SSE42-NEXT: pcmpgtq %xmm3, %xmm4
@@ -2281,17 +1733,16 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
;
; AVX512-LABEL: lane_mask_v16i1_i64:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rsi, %zmm0
-; AVX512-NEXT: vpbroadcastq %rdi, %zmm1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [0,1,2,3,4,5,6,7]
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k0
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [8,9,10,11,12,13,14,15]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm1, %k1
-; AVX512-NEXT: kunpckbw %k0, %k1, %k0
+; AVX512-NEXT: xorl %eax, %eax
+; AVX512-NEXT: subq %rdi, %rsi
+; AVX512-NEXT: cmovaq %rsi, %rax
+; AVX512-NEXT: cmpq $16, %rax
+; AVX512-NEXT: movl $16, %ecx
+; AVX512-NEXT: cmovbq %rax, %rcx
+; AVX512-NEXT: movl $-1, %eax
+; AVX512-NEXT: bzhil %ecx, %eax, %eax
+; AVX512-NEXT: kmovd %eax, %k0
; AVX512-NEXT: vpmovm2b %k0, %xmm0
-; AVX512-NEXT: vzeroupper
; AVX512-NEXT: retq
%active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i64(i64 %index, i64 %TC)
ret <16 x i1> %active.lane.mask
@@ -2831,20 +2282,9 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
; SSE42-NEXT: por %xmm5, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [20,21]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm5, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
-; SSE42-NEXT: packssdw %xmm6, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [18,19]
+; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
+; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [20,21]
; SSE42-NEXT: paddq %xmm2, %xmm6
; SSE42-NEXT: movdqa %xmm6, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
@@ -2854,6 +2294,17 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: pxor %xmm1, %xmm8
; SSE42-NEXT: movdqa %xmm3, %xmm6
; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
+; SSE42-NEXT: packssdw %xmm5, %xmm6
+; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [18,19]
+; SSE42-NEXT: paddq %xmm2, %xmm5
+; SSE42-NEXT: movdqa %xmm5, %xmm7
+; SSE42-NEXT: pxor %xmm1, %xmm7
+; SSE42-NEXT: movdqa %xmm0, %xmm8
+; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
+; SSE42-NEXT: por %xmm5, %xmm8
+; SSE42-NEXT: pxor %xmm1, %xmm8
+; SSE42-NEXT: movdqa %xmm3, %xmm5
+; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
; SSE42-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [16,17]
; SSE42-NEXT: movdqa %xmm2, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
@@ -2861,8 +2312,8 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: por %xmm2, %xmm0
; SSE42-NEXT: pxor %xmm1, %xmm0
; SSE42-NEXT: pcmpgtq %xmm0, %xmm3
-; SSE42-NEXT: packssdw %xmm6, %xmm3
; SSE42-NEXT: packssdw %xmm5, %xmm3
+; SSE42-NEXT: packssdw %xmm6, %xmm3
; SSE42-NEXT: packsswb %xmm4, %xmm3
; SSE42-NEXT: pmovmskb %xmm3, %edx
; SSE42-NEXT: shll $16, %edx
@@ -2945,23 +2396,15 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
;
; AVX512-LABEL: lane_mask_v32i1_i64:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rsi, %zmm0
-; AVX512-NEXT: vpbroadcastq %rdi, %zmm1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [0,1,2,3,4,5,6,7]
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm3
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k0
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm3, %zmm2 # [8,9,10,11,12,13,14,15]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: kunpckbw %k0, %k1, %k0
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [16,17,18,19,20,21,22,23]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [24,25,26,27,28,29,30,31]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm1, %k2
-; AVX512-NEXT: kunpckbw %k1, %k2, %k1
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
+; AVX512-NEXT: xorl %eax, %eax
+; AVX512-NEXT: subq %rdi, %rsi
+; AVX512-NEXT: cmovaq %rsi, %rax
+; AVX512-NEXT: cmpq $32, %rax
+; AVX512-NEXT: movl $32, %ecx
+; AVX512-NEXT: cmovbq %rax, %rcx
+; AVX512-NEXT: movl $-1, %eax
+; AVX512-NEXT: bzhil %ecx, %eax, %eax
+; AVX512-NEXT: kmovd %eax, %k0
; AVX512-NEXT: vpmovm2b %k0, %ymm0
; AVX512-NEXT: retq
%active.lane.mask = call <32 x i1> @llvm.get.active.lane.mask.v32i1.i64(i64 %index, i64 %TC)
@@ -2969,1367 +2412,105 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
}
define <64 x i1> @lane_mask_v64i1_i64(i64 %index, i64 %TC) {
-; SSE2-LABEL: lane_mask_v64i1_i64:
+; SSE-LABEL: lane_mask_v64i1_i64:
+; SSE: # %bb.0:
+; SSE-NEXT: xorl %eax, %eax
+; SSE-NEXT: subq %rsi, %rdx
+; SSE-NEXT: cmovaq %rdx, %rax
+; SSE-NEXT: cmpq $64, %rax
+; SSE-NEXT: movl $64, %ecx
+; SSE-NEXT: cmovbq %rax, %rcx
+; SSE-NEXT: movl $1, %edx
+; SSE-NEXT: # kill: def $cl killed $cl killed $rcx
+; SSE-NEXT: shlq %cl, %rdx
+; SSE-NEXT: movq %rdi, %rax
+; SSE-NEXT: decq %rdx
+; SSE-NEXT: movq %rdx, (%rdi)
+; SSE-NEXT: retq
+;
+; AVX2-LABEL: lane_mask_v64i1_i64:
+; AVX2: # %bb.0:
+; AVX2-NEXT: xorl %eax, %eax
+; AVX2-NEXT: subq %rsi, %rdx
+; AVX2-NEXT: cmovaq %rdx, %rax
+; AVX2-NEXT: cmpq $64, %rax
+; AVX2-NEXT: movl $64, %ecx
+; AVX2-NEXT: cmovbq %rax, %rcx
+; AVX2-NEXT: movq %rdi, %rax
+; AVX2-NEXT: movq $-1, %rdx
+; AVX2-NEXT: bzhiq %rcx, %rdx, %rcx
+; AVX2-NEXT: movq %rcx, (%rdi)
+; AVX2-NEXT: retq
+;
+; AVX512-LABEL: lane_mask_v64i1_i64:
+; AVX512: # %bb.0:
+; AVX512-NEXT: xorl %eax, %eax
+; AVX512-NEXT: subq %rdi, %rsi
+; AVX512-NEXT: cmovaq %rsi, %rax
+; AVX512-NEXT: cmpq $64, %rax
+; AVX512-NEXT: movl $64, %ecx
+; AVX512-NEXT: cmovbq %rax, %rcx
+; AVX512-NEXT: movq $-1, %rax
+; AVX512-NEXT: bzhiq %rcx, %rax, %rax
+; AVX512-NEXT: kmovq %rax, %k0
+; AVX512-NEXT: vpmovm2b %k0, %zmm0
+; AVX512-NEXT: retq
+ %active.lane.mask = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i64(i64 %index, i64 %TC)
+ ret <64 x i1> %active.lane.mask
+}
+
+;
+; i64 (zero index)
+;
+
+define <2 x i1> @lane_mask_v2i1_i64_zero(i64 %TC) {
+; SSE2-LABEL: lane_mask_v2i1_i64_zero:
; SSE2: # %bb.0:
-; SSE2-NEXT: movq %rdi, %rax
-; SSE2-NEXT: movq %rsi, %xmm0
+; SSE2-NEXT: movq %rdi, %xmm0
+; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
+; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE2-NEXT: movdqa %xmm0, %xmm1
+; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
+; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
+; SSE2-NEXT: pand %xmm0, %xmm2
+; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
+; SSE2-NEXT: por %xmm2, %xmm0
+; SSE2-NEXT: retq
+;
+; SSE42-LABEL: lane_mask_v2i1_i64_zero:
+; SSE42: # %bb.0:
+; SSE42-NEXT: movq %rdi, %xmm0
+; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
+; SSE42-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NEXT: retq
+;
+; AVX2-LABEL: lane_mask_v2i1_i64_zero:
+; AVX2: # %bb.0:
+; AVX2-NEXT: vmovq %rdi, %xmm0
+; AVX2-NEXT: vpbroadcastq %xmm0, %xmm0
+; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX2-NEXT: retq
+;
+; AVX512-LABEL: lane_mask_v2i1_i64_zero:
+; AVX512: # %bb.0:
+; AVX512-NEXT: vpbroadcastq %rdi, %xmm0
+; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k0
+; AVX512-NEXT: vpmovm2q %k0, %xmm0
+; AVX512-NEXT: retq
+ %active.lane.mask = call <2 x i1> @llvm.get.active.lane.mask.v2i1.i64(i64 0, i64 %TC)
+ ret <2 x i1> %active.lane.mask
+}
+
+define <4 x i1> @lane_mask_v4i1_i64_zero(i64 %TC) {
+; SSE2-LABEL: lane_mask_v4i1_i64_zero:
+; SSE2: # %bb.0:
+; SSE2-NEXT: movq %rdi, %xmm0
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]
-; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [9223372039002259456,9223372039002259456]
-; SSE2-NEXT: movdqa %xmm1, %xmm2
-; SSE2-NEXT: pxor %xmm0, %xmm2
-; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [14,15]
-; SSE2-NEXT: paddq %xmm1, %xmm3
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pxor %xmm0, %xmm4
-; SSE2-NEXT: movdqa %xmm2, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm3, %xmm5
-; SSE2-NEXT: por %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm0, %xmm5
-; SSE2-NEXT: movq %rdx, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,1,0,1]
-; SSE2-NEXT: pxor %xmm0, %xmm3
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [12,13]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm5
-; SSE2-NEXT: packssdw %xmm4, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [10,11]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [8,9]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm4
-; SSE2-NEXT: packssdw %xmm6, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [6,7]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [4,5]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm5
-; SSE2-NEXT: packssdw %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2,3]
-; SSE2-NEXT: paddq %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
-; SSE2-NEXT: paddq %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm2, %xmm9
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm10, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm9
-; SSE2-NEXT: por %xmm8, %xmm9
-; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm3, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm9, %xmm7
-; SSE2-NEXT: packssdw %xmm6, %xmm7
-; SSE2-NEXT: packssdw %xmm5, %xmm7
-; SSE2-NEXT: packsswb %xmm4, %xmm7
-; SSE2-NEXT: pmovmskb %xmm7, %edx
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [30,31]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm0, %xmm5
-; SSE2-NEXT: movdqa %xmm2, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm6
-; SSE2-NEXT: por %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [28,29]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm5
-; SSE2-NEXT: packssdw %xmm4, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [26,27]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [24,25]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm4
-; SSE2-NEXT: packssdw %xmm6, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [22,23]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [20,21]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm5
-; SSE2-NEXT: packssdw %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [18,19]
-; SSE2-NEXT: paddq %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [16,17]
-; SSE2-NEXT: paddq %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm2, %xmm9
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm10, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm9
-; SSE2-NEXT: por %xmm8, %xmm9
-; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm3, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm9, %xmm7
-; SSE2-NEXT: packssdw %xmm6, %xmm7
-; SSE2-NEXT: packssdw %xmm5, %xmm7
-; SSE2-NEXT: packsswb %xmm4, %xmm7
-; SSE2-NEXT: pmovmskb %xmm7, %ecx
-; SSE2-NEXT: shll $16, %ecx
-; SSE2-NEXT: orl %edx, %ecx
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [46,47]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm0, %xmm5
-; SSE2-NEXT: movdqa %xmm2, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm6
-; SSE2-NEXT: por %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [44,45]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm5
-; SSE2-NEXT: packssdw %xmm4, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [42,43]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [40,41]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm4
-; SSE2-NEXT: packssdw %xmm6, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [38,39]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [36,37]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm5
-; SSE2-NEXT: packssdw %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [34,35]
-; SSE2-NEXT: paddq %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [32,33]
-; SSE2-NEXT: paddq %xmm1, %xmm7
-; SSE2-NEXT: movdqa %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm2, %xmm9
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm10, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm9
-; SSE2-NEXT: por %xmm8, %xmm9
-; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm3, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm9, %xmm7
-; SSE2-NEXT: packssdw %xmm6, %xmm7
-; SSE2-NEXT: packssdw %xmm5, %xmm7
-; SSE2-NEXT: packsswb %xmm4, %xmm7
-; SSE2-NEXT: pmovmskb %xmm7, %edx
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [62,63]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm5
-; SSE2-NEXT: pxor %xmm0, %xmm5
-; SSE2-NEXT: movdqa %xmm2, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm6
-; SSE2-NEXT: por %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm5, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [60,61]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm5
-; SSE2-NEXT: packssdw %xmm4, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [58,59]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [56,57]
-; SSE2-NEXT: paddq %xmm1, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm4
-; SSE2-NEXT: packssdw %xmm6, %xmm4
-; SSE2-NEXT: packssdw %xmm5, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [54,55]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
-; SSE2-NEXT: movdqa %xmm2, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: por %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm6, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [52,53]
-; SSE2-NEXT: paddq %xmm1, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm5
-; SSE2-NEXT: packssdw %xmm6, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [50,51]
-; SSE2-NEXT: paddq %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm6, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm8
-; SSE2-NEXT: por %xmm7, %xmm8
-; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm3, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
-; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm8, %xmm6
-; SSE2-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [48,49]
-; SSE2-NEXT: movdqa %xmm1, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm2, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm2, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm9, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm1, %xmm7
-; SSE2-NEXT: por %xmm2, %xmm7
-; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm3, %xmm0
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm3, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm7[1,1,3,3]
-; SSE2-NEXT: pand %xmm1, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; SSE2-NEXT: por %xmm2, %xmm0
-; SSE2-NEXT: packssdw %xmm6, %xmm0
-; SSE2-NEXT: packssdw %xmm5, %xmm0
-; SSE2-NEXT: packsswb %xmm4, %xmm0
-; SSE2-NEXT: pmovmskb %xmm0, %esi
-; SSE2-NEXT: shll $16, %esi
-; SSE2-NEXT: orl %edx, %esi
-; SSE2-NEXT: shlq $32, %rsi
-; SSE2-NEXT: orq %rcx, %rsi
-; SSE2-NEXT: movq %rsi, (%rdi)
-; SSE2-NEXT: retq
-;
-; SSE42-LABEL: lane_mask_v64i1_i64:
-; SSE42: # %bb.0:
-; SSE42-NEXT: movq %rdi, %rax
-; SSE42-NEXT: movq %rsi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,1,0,1]
-; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
-; SSE42-NEXT: movdqa %xmm2, %xmm0
-; SSE42-NEXT: pxor %xmm1, %xmm0
-; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [14,15]
-; SSE42-NEXT: paddq %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pxor %xmm1, %xmm4
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm4, %xmm5
-; SSE42-NEXT: por %xmm3, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm5
-; SSE42-NEXT: movq %rdx, %xmm3
-; SSE42-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,1,0,1]
-; SSE42-NEXT: pxor %xmm1, %xmm3
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [12,13]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [10,11]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [8,9]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm4, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm4
-; SSE42-NEXT: packssdw %xmm6, %xmm4
-; SSE42-NEXT: packssdw %xmm5, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [6,7]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [4,5]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm5, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
-; SSE42-NEXT: packssdw %xmm6, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [2,3]
-; SSE42-NEXT: paddq %xmm2, %xmm6
-; SSE42-NEXT: movdqa %xmm6, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm6, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm7 = [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
-; SSE42-NEXT: paddq %xmm2, %xmm7
-; SSE42-NEXT: movdqa %xmm7, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm0, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm9
-; SSE42-NEXT: por %xmm7, %xmm9
-; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: movdqa %xmm3, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm9, %xmm7
-; SSE42-NEXT: packssdw %xmm6, %xmm7
-; SSE42-NEXT: packssdw %xmm5, %xmm7
-; SSE42-NEXT: packsswb %xmm4, %xmm7
-; SSE42-NEXT: pmovmskb %xmm7, %edx
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [30,31]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm5
-; SSE42-NEXT: movdqa %xmm0, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm6
-; SSE42-NEXT: por %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [28,29]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [26,27]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [24,25]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm4, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm4
-; SSE42-NEXT: packssdw %xmm6, %xmm4
-; SSE42-NEXT: packssdw %xmm5, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [22,23]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [20,21]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm5, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
-; SSE42-NEXT: packssdw %xmm6, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [18,19]
-; SSE42-NEXT: paddq %xmm2, %xmm6
-; SSE42-NEXT: movdqa %xmm6, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm6, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm7 = [16,17]
-; SSE42-NEXT: paddq %xmm2, %xmm7
-; SSE42-NEXT: movdqa %xmm7, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm0, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm9
-; SSE42-NEXT: por %xmm7, %xmm9
-; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: movdqa %xmm3, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm9, %xmm7
-; SSE42-NEXT: packssdw %xmm6, %xmm7
-; SSE42-NEXT: packssdw %xmm5, %xmm7
-; SSE42-NEXT: packsswb %xmm4, %xmm7
-; SSE42-NEXT: pmovmskb %xmm7, %ecx
-; SSE42-NEXT: shll $16, %ecx
-; SSE42-NEXT: orl %edx, %ecx
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [46,47]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm5
-; SSE42-NEXT: movdqa %xmm0, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm6
-; SSE42-NEXT: por %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [44,45]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [42,43]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [40,41]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm4, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm4
-; SSE42-NEXT: packssdw %xmm6, %xmm4
-; SSE42-NEXT: packssdw %xmm5, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [38,39]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [36,37]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm5, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
-; SSE42-NEXT: packssdw %xmm6, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [34,35]
-; SSE42-NEXT: paddq %xmm2, %xmm6
-; SSE42-NEXT: movdqa %xmm6, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm6, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm7 = [32,33]
-; SSE42-NEXT: paddq %xmm2, %xmm7
-; SSE42-NEXT: movdqa %xmm7, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm0, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm9
-; SSE42-NEXT: por %xmm7, %xmm9
-; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: movdqa %xmm3, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm9, %xmm7
-; SSE42-NEXT: packssdw %xmm6, %xmm7
-; SSE42-NEXT: packssdw %xmm5, %xmm7
-; SSE42-NEXT: packsswb %xmm4, %xmm7
-; SSE42-NEXT: pmovmskb %xmm7, %edx
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [62,63]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm5
-; SSE42-NEXT: movdqa %xmm0, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm6
-; SSE42-NEXT: por %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [60,61]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [58,59]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [56,57]
-; SSE42-NEXT: paddq %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm4, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm4
-; SSE42-NEXT: packssdw %xmm6, %xmm4
-; SSE42-NEXT: packssdw %xmm5, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [54,55]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm6
-; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
-; SSE42-NEXT: por %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [52,53]
-; SSE42-NEXT: paddq %xmm2, %xmm5
-; SSE42-NEXT: movdqa %xmm5, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm5, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
-; SSE42-NEXT: packssdw %xmm6, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [50,51]
-; SSE42-NEXT: paddq %xmm2, %xmm6
-; SSE42-NEXT: movdqa %xmm6, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm6, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
-; SSE42-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [48,49]
-; SSE42-NEXT: movdqa %xmm2, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm0
-; SSE42-NEXT: por %xmm2, %xmm0
-; SSE42-NEXT: pxor %xmm1, %xmm0
-; SSE42-NEXT: pcmpgtq %xmm0, %xmm3
-; SSE42-NEXT: packssdw %xmm6, %xmm3
-; SSE42-NEXT: packssdw %xmm5, %xmm3
-; SSE42-NEXT: packsswb %xmm4, %xmm3
-; SSE42-NEXT: pmovmskb %xmm3, %esi
-; SSE42-NEXT: shll $16, %esi
-; SSE42-NEXT: orl %edx, %esi
-; SSE42-NEXT: shlq $32, %rsi
-; SSE42-NEXT: orq %rcx, %rsi
-; SSE42-NEXT: movq %rsi, (%rdi)
-; SSE42-NEXT: retq
-;
-; AVX2-LABEL: lane_mask_v64i1_i64:
-; AVX2: # %bb.0:
-; AVX2-NEXT: movq %rdi, %rax
-; AVX2-NEXT: vmovq %rsi, %xmm0
-; AVX2-NEXT: vpbroadcastq %xmm0, %ymm1
-; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm0 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
-; AVX2-NEXT: vpxor %ymm0, %ymm1, %ymm2
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm3 # [28,29,30,31]
-; AVX2-NEXT: vpxor %ymm0, %ymm3, %ymm4
-; AVX2-NEXT: vpcmpgtq %ymm4, %ymm2, %ymm4
-; AVX2-NEXT: vpor %ymm4, %ymm3, %ymm3
-; AVX2-NEXT: vpxor %ymm0, %ymm3, %ymm4
-; AVX2-NEXT: vmovq %rdx, %xmm3
-; AVX2-NEXT: vpbroadcastq %xmm3, %ymm3
-; AVX2-NEXT: vpxor %ymm0, %ymm3, %ymm3
-; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm4
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5 # [24,25,26,27]
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm6
-; AVX2-NEXT: vpor %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm5
-; AVX2-NEXT: vpackssdw %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5 # [20,21,22,23]
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm6
-; AVX2-NEXT: vpor %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm5
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6 # [16,17,18,19]
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm7
-; AVX2-NEXT: vpor %ymm7, %ymm6, %ymm6
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm3, %ymm6
-; AVX2-NEXT: vpackssdw %ymm5, %ymm6, %ymm5
-; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5 # [12,13,14,15]
-; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm6
-; AVX2-NEXT: vpor %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm5
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6 # [8,9,10,11]
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm7
-; AVX2-NEXT: vpor %ymm7, %ymm6, %ymm6
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm3, %ymm6
-; AVX2-NEXT: vpackssdw %ymm5, %ymm6, %ymm5
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6 # [4,5,6,7]
-; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm7
-; AVX2-NEXT: vpor %ymm7, %ymm6, %ymm6
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm3, %ymm6
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm7 # [0,1,2,3]
-; AVX2-NEXT: vpxor %ymm0, %ymm7, %ymm8
-; AVX2-NEXT: vpcmpgtq %ymm8, %ymm2, %ymm8
-; AVX2-NEXT: vpor %ymm7, %ymm8, %ymm7
-; AVX2-NEXT: vpxor %ymm0, %ymm7, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm3, %ymm7
-; AVX2-NEXT: vpackssdw %ymm6, %ymm7, %ymm6
-; AVX2-NEXT: vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm5, %ymm6, %ymm5
-; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]
-; AVX2-NEXT: vpacksswb %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
-; AVX2-NEXT: vpsllw $7, %ymm4, %ymm4
-; AVX2-NEXT: vpmovmskb %ymm4, %ecx
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm4 # [60,61,62,63]
-; AVX2-NEXT: vpxor %ymm0, %ymm4, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm2, %ymm5
-; AVX2-NEXT: vpor %ymm5, %ymm4, %ymm4
-; AVX2-NEXT: vpxor %ymm0, %ymm4, %ymm4
-; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm4
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5 # [56,57,58,59]
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm6
-; AVX2-NEXT: vpor %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm5
-; AVX2-NEXT: vpackssdw %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5 # [52,53,54,55]
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm6
-; AVX2-NEXT: vpor %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm5
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6 # [48,49,50,51]
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm7
-; AVX2-NEXT: vpor %ymm7, %ymm6, %ymm6
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm3, %ymm6
-; AVX2-NEXT: vpackssdw %ymm5, %ymm6, %ymm5
-; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm5 # [44,45,46,47]
-; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm2, %ymm6
-; AVX2-NEXT: vpor %ymm6, %ymm5, %ymm5
-; AVX2-NEXT: vpxor %ymm0, %ymm5, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm5
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6 # [40,41,42,43]
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm7
-; AVX2-NEXT: vpor %ymm7, %ymm6, %ymm6
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm3, %ymm6
-; AVX2-NEXT: vpackssdw %ymm5, %ymm6, %ymm5
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm6 # [36,37,38,39]
-; AVX2-NEXT: vpermq {{.*#+}} ymm5 = ymm5[0,2,1,3]
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm7
-; AVX2-NEXT: vpor %ymm7, %ymm6, %ymm6
-; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm6
-; AVX2-NEXT: vpcmpgtq %ymm6, %ymm3, %ymm6
-; AVX2-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1 # [32,33,34,35]
-; AVX2-NEXT: vpxor %ymm0, %ymm1, %ymm7
-; AVX2-NEXT: vpcmpgtq %ymm7, %ymm2, %ymm2
-; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm0, %ymm1, %ymm0
-; AVX2-NEXT: vpcmpgtq %ymm0, %ymm3, %ymm0
-; AVX2-NEXT: vpackssdw %ymm6, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm5, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpacksswb %ymm4, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpsllw $7, %ymm0, %ymm0
-; AVX2-NEXT: vpmovmskb %ymm0, %edx
-; AVX2-NEXT: shlq $32, %rdx
-; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: movq %rdx, (%rdi)
-; AVX2-NEXT: vzeroupper
-; AVX2-NEXT: retq
-;
-; AVX512-LABEL: lane_mask_v64i1_i64:
-; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rsi, %zmm0
-; AVX512-NEXT: vpbroadcastq %rdi, %zmm1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [0,1,2,3,4,5,6,7]
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm3
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k0
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm3, %zmm2 # [8,9,10,11,12,13,14,15]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: kunpckbw %k0, %k1, %k0
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [16,17,18,19,20,21,22,23]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [24,25,26,27,28,29,30,31]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k2
-; AVX512-NEXT: kunpckbw %k1, %k2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [32,33,34,35,36,37,38,39]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [40,41,42,43,44,45,46,47]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k2
-; AVX512-NEXT: kunpckbw %k1, %k2, %k1
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm2
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm2, %zmm2 # [48,49,50,51,52,53,54,55]
-; AVX512-NEXT: vpminuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1
-; AVX512-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm1, %zmm1 # [56,57,58,59,60,61,62,63]
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm2, %k2
-; AVX512-NEXT: vpcmpltuq %zmm0, %zmm1, %k3
-; AVX512-NEXT: kunpckbw %k2, %k3, %k2
-; AVX512-NEXT: kunpckwd %k1, %k2, %k1
-; AVX512-NEXT: kunpckdq %k0, %k1, %k0
-; AVX512-NEXT: vpmovm2b %k0, %zmm0
-; AVX512-NEXT: retq
- %active.lane.mask = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i64(i64 %index, i64 %TC)
- ret <64 x i1> %active.lane.mask
-}
-
-;
-; i64 (zero index)
-;
-
-define <2 x i1> @lane_mask_v2i1_i64_zero(i64 %TC) {
-; SSE2-LABEL: lane_mask_v2i1_i64_zero:
-; SSE2: # %bb.0:
-; SSE2-NEXT: movq %rdi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: movdqa %xmm0, %xmm1
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,0,2,2]
-; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pand %xmm0, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
-; SSE2-NEXT: por %xmm2, %xmm0
-; SSE2-NEXT: retq
-;
-; SSE42-LABEL: lane_mask_v2i1_i64_zero:
-; SSE42: # %bb.0:
-; SSE42-NEXT: movq %rdi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE42-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: retq
-;
-; AVX2-LABEL: lane_mask_v2i1_i64_zero:
-; AVX2: # %bb.0:
-; AVX2-NEXT: vmovq %rdi, %xmm0
-; AVX2-NEXT: vpbroadcastq %xmm0, %xmm0
-; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
-; AVX2-NEXT: retq
-;
-; AVX512-LABEL: lane_mask_v2i1_i64_zero:
-; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rdi, %xmm0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k0
-; AVX512-NEXT: vpmovm2q %k0, %xmm0
-; AVX512-NEXT: retq
- %active.lane.mask = call <2 x i1> @llvm.get.active.lane.mask.v2i1.i64(i64 0, i64 %TC)
- ret <2 x i1> %active.lane.mask
-}
-
-define <4 x i1> @lane_mask_v4i1_i64_zero(i64 %TC) {
-; SSE2-LABEL: lane_mask_v4i1_i64_zero:
-; SSE2: # %bb.0:
-; SSE2-NEXT: movq %rdi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,1,0,1]
-; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE2-NEXT: movdqa %xmm1, %xmm2
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,3,1,3]
@@ -4520,223 +2701,10 @@ define <16 x i1> @lane_mask_v16i1_i64_zero(i64 %TC) {
; SSE2-NEXT: retq
;
; SSE42-LABEL: lane_mask_v16i1_i64_zero:
-; SSE42: # %bb.0:
-; SSE42-NEXT: movq %rdi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE42-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm1, %xmm2
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: packssdw %xmm1, %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm1, %xmm2
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: packssdw %xmm1, %xmm0
-; SSE42-NEXT: packssdw %xmm2, %xmm0
-; SSE42-NEXT: packsswb %xmm3, %xmm0
-; SSE42-NEXT: retq
-;
-; AVX2-LABEL: lane_mask_v16i1_i64_zero:
-; AVX2: # %bb.0:
-; AVX2-NEXT: vmovq %rdi, %xmm0
-; AVX2-NEXT: vpbroadcastq %xmm0, %ymm0
-; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
-; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
-; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
-; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
-; AVX2-NEXT: vzeroupper
-; AVX2-NEXT: retq
-;
-; AVX512-LABEL: lane_mask_v16i1_i64_zero:
-; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rdi, %zmm0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: kunpckbw %k0, %k1, %k0
-; AVX512-NEXT: vpmovm2b %k0, %xmm0
-; AVX512-NEXT: vzeroupper
-; AVX512-NEXT: retq
- %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i64(i64 0, i64 %TC)
- ret <16 x i1> %active.lane.mask
-}
-
-define <32 x i1> @lane_mask_v32i1_i64_zero(i64 %TC) {
-; SSE2-LABEL: lane_mask_v32i1_i64_zero:
-; SSE2: # %bb.0:
-; SSE2-NEXT: movq %rsi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: movq %rdi, %rax
-; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
-; SSE2-NEXT: pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
-; SSE2-NEXT: packssdw %xmm2, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm2
-; SSE2-NEXT: packssdw %xmm5, %xmm2
-; SSE2-NEXT: packssdw %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm4
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm4
-; SSE2-NEXT: packssdw %xmm3, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: movdqa %xmm0, %xmm6
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
-; SSE2-NEXT: por %xmm5, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm6
-; SSE2-NEXT: packssdw %xmm3, %xmm6
-; SSE2-NEXT: packssdw %xmm4, %xmm6
-; SSE2-NEXT: packsswb %xmm2, %xmm6
-; SSE2-NEXT: pmovmskb %xmm6, %ecx
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
-; SSE2-NEXT: packssdw %xmm2, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm5
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm2
-; SSE2-NEXT: packssdw %xmm5, %xmm2
-; SSE2-NEXT: packssdw %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm4
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm4
-; SSE2-NEXT: packssdw %xmm3, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm0
-; SSE2-NEXT: packssdw %xmm3, %xmm0
-; SSE2-NEXT: packssdw %xmm4, %xmm0
-; SSE2-NEXT: packsswb %xmm2, %xmm0
-; SSE2-NEXT: pmovmskb %xmm0, %edx
-; SSE2-NEXT: shll $16, %edx
-; SSE2-NEXT: orl %ecx, %edx
-; SSE2-NEXT: movl %edx, (%rdi)
-; SSE2-NEXT: retq
-;
-; SSE42-LABEL: lane_mask_v32i1_i64_zero:
-; SSE42: # %bb.0:
-; SSE42-NEXT: movq %rsi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE42-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE42-NEXT: movq %rdi, %rax
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE42-NEXT: packssdw %xmm1, %xmm2
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: packssdw %xmm3, %xmm4
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm5, %xmm1
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: packssdw %xmm1, %xmm2
-; SSE42-NEXT: packsswb %xmm4, %xmm2
-; SSE42-NEXT: pmovmskb %xmm2, %ecx
+; SSE42: # %bb.0:
+; SSE42-NEXT: movq %rdi, %xmm0
+; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
+; SSE42-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE42-NEXT: movdqa %xmm0, %xmm1
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE42-NEXT: movdqa %xmm0, %xmm2
@@ -4759,13 +2727,9 @@ define <32 x i1> @lane_mask_v32i1_i64_zero(i64 %TC) {
; SSE42-NEXT: packssdw %xmm1, %xmm0
; SSE42-NEXT: packssdw %xmm2, %xmm0
; SSE42-NEXT: packsswb %xmm3, %xmm0
-; SSE42-NEXT: pmovmskb %xmm0, %edx
-; SSE42-NEXT: shll $16, %edx
-; SSE42-NEXT: orl %ecx, %edx
-; SSE42-NEXT: movl %edx, (%rdi)
; SSE42-NEXT: retq
;
-; AVX2-LABEL: lane_mask_v32i1_i64_zero:
+; AVX2-LABEL: lane_mask_v16i1_i64_zero:
; AVX2: # %bb.0:
; AVX2-NEXT: vmovq %rdi, %xmm0
; AVX2-NEXT: vpbroadcastq %xmm0, %ymm0
@@ -4776,43 +2740,32 @@ define <32 x i1> @lane_mask_v32i1_i64_zero(i64 %TC) {
; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
-; AVX2-NEXT: vpackssdw %ymm3, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
+; AVX2-NEXT: vpackssdw %ymm1, %ymm0, %ymm0
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
+; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
+; AVX2-NEXT: vzeroupper
; AVX2-NEXT: retq
;
-; AVX512-LABEL: lane_mask_v32i1_i64_zero:
+; AVX512-LABEL: lane_mask_v16i1_i64_zero:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rdi, %zmm0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k2
-; AVX512-NEXT: kunpckbw %k0, %k1, %k0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: kunpckbw %k2, %k1, %k1
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
-; AVX512-NEXT: vpmovm2b %k0, %ymm0
+; AVX512-NEXT: cmpq $16, %rdi
+; AVX512-NEXT: movl $16, %eax
+; AVX512-NEXT: cmovbq %rdi, %rax
+; AVX512-NEXT: movl $-1, %ecx
+; AVX512-NEXT: bzhil %eax, %ecx, %eax
+; AVX512-NEXT: kmovd %eax, %k0
+; AVX512-NEXT: vpmovm2b %k0, %xmm0
; AVX512-NEXT: retq
- %active.lane.mask = call <32 x i1> @llvm.get.active.lane.mask.v32i1.i64(i64 0, i64 %TC)
- ret <32 x i1> %active.lane.mask
+ %active.lane.mask = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i64(i64 0, i64 %TC)
+ ret <16 x i1> %active.lane.mask
}
-define <64 x i1> @lane_mask_v64i1_i64_zero(i64 %TC) {
-; SSE2-LABEL: lane_mask_v64i1_i64_zero:
+define <32 x i1> @lane_mask_v32i1_i64_zero(i64 %TC) {
+; SSE2-LABEL: lane_mask_v32i1_i64_zero:
; SSE2: # %bb.0:
; SSE2-NEXT: movq %rsi, %xmm0
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
@@ -4875,7 +2828,7 @@ define <64 x i1> @lane_mask_v64i1_i64_zero(i64 %TC) {
; SSE2-NEXT: packssdw %xmm3, %xmm6
; SSE2-NEXT: packssdw %xmm4, %xmm6
; SSE2-NEXT: packsswb %xmm2, %xmm6
-; SSE2-NEXT: pmovmskb %xmm6, %edx
+; SSE2-NEXT: pmovmskb %xmm6, %ecx
; SSE2-NEXT: movdqa %xmm0, %xmm2
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
@@ -4921,120 +2874,6 @@ define <64 x i1> @lane_mask_v64i1_i64_zero(i64 %TC) {
; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
; SSE2-NEXT: pand %xmm1, %xmm5
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: movdqa %xmm0, %xmm6
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm6
-; SSE2-NEXT: por %xmm5, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm6
-; SSE2-NEXT: packssdw %xmm3, %xmm6
-; SSE2-NEXT: packssdw %xmm4, %xmm6
-; SSE2-NEXT: packsswb %xmm2, %xmm6
-; SSE2-NEXT: pmovmskb %xmm6, %ecx
-; SSE2-NEXT: shll $16, %ecx
-; SSE2-NEXT: orl %edx, %ecx
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: movdqa %xmm0, %xmm4
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NEXT: por %xmm3, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm3, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm2, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm2, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm2
-; SSE2-NEXT: packssdw %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm4, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm4
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm4
-; SSE2-NEXT: packssdw %xmm3, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm5
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
-; SSE2-NEXT: por %xmm6, %xmm5
-; SSE2-NEXT: packssdw %xmm3, %xmm5
-; SSE2-NEXT: packssdw %xmm4, %xmm5
-; SSE2-NEXT: packsswb %xmm2, %xmm5
-; SSE2-NEXT: pmovmskb %xmm5, %edx
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: movdqa %xmm0, %xmm4
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NEXT: por %xmm3, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm3, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm2, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm2, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm2
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm2
-; SSE2-NEXT: packssdw %xmm3, %xmm2
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: packssdw %xmm4, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
-; SSE2-NEXT: movdqa %xmm0, %xmm4
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm5, %xmm4
-; SSE2-NEXT: packssdw %xmm3, %xmm4
-; SSE2-NEXT: movdqa %xmm0, %xmm3
-; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
-; SSE2-NEXT: pand %xmm1, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
; SSE2-NEXT: por %xmm5, %xmm3
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm0[0,0,2,2]
@@ -5044,203 +2883,147 @@ define <64 x i1> @lane_mask_v64i1_i64_zero(i64 %TC) {
; SSE2-NEXT: packssdw %xmm3, %xmm0
; SSE2-NEXT: packssdw %xmm4, %xmm0
; SSE2-NEXT: packsswb %xmm2, %xmm0
-; SSE2-NEXT: pmovmskb %xmm0, %esi
-; SSE2-NEXT: shll $16, %esi
-; SSE2-NEXT: orl %edx, %esi
-; SSE2-NEXT: shlq $32, %rsi
-; SSE2-NEXT: orq %rcx, %rsi
-; SSE2-NEXT: movq %rsi, (%rdi)
+; SSE2-NEXT: pmovmskb %xmm0, %edx
+; SSE2-NEXT: shll $16, %edx
+; SSE2-NEXT: orl %ecx, %edx
+; SSE2-NEXT: movl %edx, (%rdi)
; SSE2-NEXT: retq
;
-; SSE42-LABEL: lane_mask_v64i1_i64_zero:
+; SSE42-LABEL: lane_mask_v32i1_i64_zero:
; SSE42: # %bb.0:
; SSE42-NEXT: movq %rsi, %xmm0
; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
; SSE42-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
+; SSE42-NEXT: movdqa %xmm0, %xmm1
+; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE42-NEXT: movdqa %xmm0, %xmm2
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; SSE42-NEXT: movdqa %xmm0, %xmm3
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
; SSE42-NEXT: movdqa %xmm0, %xmm4
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE42-NEXT: movdqa %xmm0, %xmm1
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
; SSE42-NEXT: movq %rdi, %rax
; SSE42-NEXT: movdqa %xmm0, %xmm5
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm4, %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE42-NEXT: packssdw %xmm3, %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: packssdw %xmm5, %xmm2
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE42-NEXT: packssdw %xmm4, %xmm3
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE42-NEXT: packssdw %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packsswb %xmm1, %xmm3
+; SSE42-NEXT: packssdw %xmm1, %xmm2
; SSE42-NEXT: movdqa %xmm0, %xmm1
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: pmovmskb %xmm3, %edx
+; SSE42-NEXT: packssdw %xmm3, %xmm4
; SSE42-NEXT: movdqa %xmm0, %xmm3
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: packssdw %xmm5, %xmm4
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5
-; SSE42-NEXT: packssdw %xmm2, %xmm1
+; SSE42-NEXT: packssdw %xmm2, %xmm4
; SSE42-NEXT: movdqa %xmm0, %xmm2
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm4, %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE42-NEXT: packssdw %xmm3, %xmm5
-; SSE42-NEXT: packssdw %xmm2, %xmm4
-; SSE42-NEXT: packssdw %xmm5, %xmm4
-; SSE42-NEXT: packsswb %xmm1, %xmm4
-; SSE42-NEXT: pmovmskb %xmm4, %ecx
+; SSE42-NEXT: packssdw %xmm5, %xmm1
+; SSE42-NEXT: packssdw %xmm3, %xmm2
+; SSE42-NEXT: packssdw %xmm1, %xmm2
+; SSE42-NEXT: packsswb %xmm4, %xmm2
+; SSE42-NEXT: pmovmskb %xmm2, %ecx
; SSE42-NEXT: movdqa %xmm0, %xmm1
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: shll $16, %ecx
; SSE42-NEXT: movdqa %xmm0, %xmm2
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: orl %edx, %ecx
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
; SSE42-NEXT: packssdw %xmm1, %xmm2
; SSE42-NEXT: movdqa %xmm0, %xmm1
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: packssdw %xmm3, %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm3, %xmm2
; SSE42-NEXT: movdqa %xmm0, %xmm3
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: movdqa %xmm0, %xmm4
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4
-; SSE42-NEXT: packssdw %xmm3, %xmm4
-; SSE42-NEXT: packssdw %xmm2, %xmm4
-; SSE42-NEXT: movdqa %xmm0, %xmm2
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packsswb %xmm1, %xmm4
+; SSE42-NEXT: packssdw %xmm1, %xmm3
+; SSE42-NEXT: packssdw %xmm2, %xmm3
; SSE42-NEXT: movdqa %xmm0, %xmm1
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: pmovmskb %xmm4, %edx
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE42-NEXT: packssdw %xmm2, %xmm1
; SSE42-NEXT: movdqa %xmm0, %xmm2
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
; SSE42-NEXT: packssdw %xmm1, %xmm2
; SSE42-NEXT: movdqa %xmm0, %xmm1
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
-; SSE42-NEXT: packssdw %xmm3, %xmm1
-; SSE42-NEXT: movdqa %xmm0, %xmm3
-; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
; SSE42-NEXT: pcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
-; SSE42-NEXT: packssdw %xmm3, %xmm0
; SSE42-NEXT: packssdw %xmm1, %xmm0
-; SSE42-NEXT: packsswb %xmm2, %xmm0
-; SSE42-NEXT: pmovmskb %xmm0, %esi
-; SSE42-NEXT: shll $16, %esi
-; SSE42-NEXT: orl %edx, %esi
-; SSE42-NEXT: shlq $32, %rsi
-; SSE42-NEXT: orq %rcx, %rsi
-; SSE42-NEXT: movq %rsi, (%rdi)
+; SSE42-NEXT: packssdw %xmm2, %xmm0
+; SSE42-NEXT: packsswb %xmm3, %xmm0
+; SSE42-NEXT: pmovmskb %xmm0, %edx
+; SSE42-NEXT: shll $16, %edx
+; SSE42-NEXT: orl %ecx, %edx
+; SSE42-NEXT: movl %edx, (%rdi)
; SSE42-NEXT: retq
;
-; AVX2-LABEL: lane_mask_v64i1_i64_zero:
+; AVX2-LABEL: lane_mask_v32i1_i64_zero:
; AVX2: # %bb.0:
-; AVX2-NEXT: vmovq %rsi, %xmm0
+; AVX2-NEXT: vmovq %rdi, %xmm0
; AVX2-NEXT: vpbroadcastq %xmm0, %ymm0
; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: movq %rdi, %rax
; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm4
-; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm3, %ymm4, %ymm3
-; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpacksswb %ymm1, %ymm2, %ymm1
+; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpsllw $7, %ymm1, %ymm1
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
-; AVX2-NEXT: vpmovmskb %ymm1, %ecx
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm1
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
-; AVX2-NEXT: vpackssdw %ymm1, %ymm2, %ymm1
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm2
-; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
-; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
-; AVX2-NEXT: vpackssdw %ymm2, %ymm3, %ymm2
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm3
; AVX2-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
-; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
; AVX2-NEXT: vpackssdw %ymm3, %ymm0, %ymm0
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
; AVX2-NEXT: vpackssdw %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
; AVX2-NEXT: vpacksswb %ymm1, %ymm0, %ymm0
; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
-; AVX2-NEXT: vpsllw $7, %ymm0, %ymm0
-; AVX2-NEXT: vpmovmskb %ymm0, %edx
-; AVX2-NEXT: shlq $32, %rdx
-; AVX2-NEXT: orq %rcx, %rdx
-; AVX2-NEXT: movq %rdx, (%rdi)
-; AVX2-NEXT: vzeroupper
+; AVX2-NEXT: retq
+;
+; AVX512-LABEL: lane_mask_v32i1_i64_zero:
+; AVX512: # %bb.0:
+; AVX512-NEXT: cmpq $32, %rdi
+; AVX512-NEXT: movl $32, %eax
+; AVX512-NEXT: cmovbq %rdi, %rax
+; AVX512-NEXT: movl $-1, %ecx
+; AVX512-NEXT: bzhil %eax, %ecx, %eax
+; AVX512-NEXT: kmovd %eax, %k0
+; AVX512-NEXT: vpmovm2b %k0, %ymm0
+; AVX512-NEXT: retq
+ %active.lane.mask = call <32 x i1> @llvm.get.active.lane.mask.v32i1.i64(i64 0, i64 %TC)
+ ret <32 x i1> %active.lane.mask
+}
+
+define <64 x i1> @lane_mask_v64i1_i64_zero(i64 %TC) {
+; SSE-LABEL: lane_mask_v64i1_i64_zero:
+; SSE: # %bb.0:
+; SSE-NEXT: cmpq $64, %rsi
+; SSE-NEXT: movl $64, %ecx
+; SSE-NEXT: cmovbq %rsi, %rcx
+; SSE-NEXT: movl $1, %edx
+; SSE-NEXT: # kill: def $cl killed $cl killed $rcx
+; SSE-NEXT: shlq %cl, %rdx
+; SSE-NEXT: movq %rdi, %rax
+; SSE-NEXT: decq %rdx
+; SSE-NEXT: movq %rdx, (%rdi)
+; SSE-NEXT: retq
+;
+; AVX2-LABEL: lane_mask_v64i1_i64_zero:
+; AVX2: # %bb.0:
+; AVX2-NEXT: cmpq $64, %rsi
+; AVX2-NEXT: movl $64, %ecx
+; AVX2-NEXT: cmovbq %rsi, %rcx
+; AVX2-NEXT: movq %rdi, %rax
+; AVX2-NEXT: movq $-1, %rdx
+; AVX2-NEXT: bzhiq %rcx, %rdx, %rcx
+; AVX2-NEXT: movq %rcx, (%rdi)
; AVX2-NEXT: retq
;
; AVX512-LABEL: lane_mask_v64i1_i64_zero:
; AVX512: # %bb.0:
-; AVX512-NEXT: vpbroadcastq %rdi, %zmm0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k2
-; AVX512-NEXT: kunpckbw %k0, %k1, %k0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: kunpckbw %k2, %k1, %k1
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k2
-; AVX512-NEXT: kunpckwd %k0, %k1, %k0
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k1
-; AVX512-NEXT: kunpckbw %k2, %k1, %k1
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k2
-; AVX512-NEXT: vpcmpnleuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %k3
-; AVX512-NEXT: kunpckbw %k2, %k3, %k2
-; AVX512-NEXT: kunpckwd %k1, %k2, %k1
-; AVX512-NEXT: kunpckdq %k0, %k1, %k0
+; AVX512-NEXT: cmpq $64, %rdi
+; AVX512-NEXT: movl $64, %eax
+; AVX512-NEXT: cmovbq %rdi, %rax
+; AVX512-NEXT: movq $-1, %rcx
+; AVX512-NEXT: bzhiq %rax, %rcx, %rax
+; AVX512-NEXT: kmovq %rax, %k0
; AVX512-NEXT: vpmovm2b %k0, %zmm0
; AVX512-NEXT: retq
%active.lane.mask = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i64(i64 0, i64 %TC)
diff --git a/llvm/test/CodeGen/X86/pr47299.ll b/llvm/test/CodeGen/X86/pr47299.ll
index 7cb1112402ebe..1e502fd52268b 100644
--- a/llvm/test/CodeGen/X86/pr47299.ll
+++ b/llvm/test/CodeGen/X86/pr47299.ll
@@ -56,12 +56,13 @@ define <7 x i1> @create_mask7(i64 %0) {
define <16 x i1> @create_mask16(i64 %0) {
; CHECK-LABEL: create_mask16:
; CHECK: # %bb.0:
-; CHECK-NEXT: vpbroadcastq zmm0, rdi
-; CHECK-NEXT: vpcmpnleuq k0, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleuq k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k0, k1, k0
+; CHECK-NEXT: cmp rdi, 16
+; CHECK-NEXT: mov eax, 16
+; CHECK-NEXT: cmovb rax, rdi
+; CHECK-NEXT: mov ecx, -1
+; CHECK-NEXT: bzhi eax, ecx, eax
+; CHECK-NEXT: kmovd k0, eax
; CHECK-NEXT: vpmovm2b xmm0, k0
-; CHECK-NEXT: vzeroupper
; CHECK-NEXT: ret
%2 = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i64(i64 0, i64 %0)
ret <16 x i1> %2
@@ -70,14 +71,12 @@ define <16 x i1> @create_mask16(i64 %0) {
define <32 x i1> @create_mask32(i64 %0) {
; CHECK-LABEL: create_mask32:
; CHECK: # %bb.0:
-; CHECK-NEXT: vpbroadcastq zmm0, rdi
-; CHECK-NEXT: vpcmpnleuq k0, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleuq k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleuq k2, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k0, k1, k0
-; CHECK-NEXT: vpcmpnleuq k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k1, k1, k2
-; CHECK-NEXT: kunpckwd k0, k1, k0
+; CHECK-NEXT: cmp rdi, 32
+; CHECK-NEXT: mov eax, 32
+; CHECK-NEXT: cmovb rax, rdi
+; CHECK-NEXT: mov ecx, -1
+; CHECK-NEXT: bzhi eax, ecx, eax
+; CHECK-NEXT: kmovd k0, eax
; CHECK-NEXT: vpmovm2b ymm0, k0
; CHECK-NEXT: ret
%2 = call <32 x i1> @llvm.get.active.lane.mask.v32i1.i64(i64 0, i64 %0)
@@ -87,22 +86,12 @@ define <32 x i1> @create_mask32(i64 %0) {
define <64 x i1> @create_mask64(i64 %0) {
; CHECK-LABEL: create_mask64:
; CHECK: # %bb.0:
-; CHECK-NEXT: vpbroadcastq zmm0, rdi
-; CHECK-NEXT: vpcmpnleuq k0, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleuq k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleuq k2, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k0, k1, k0
-; CHECK-NEXT: vpcmpnleuq k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k1, k1, k2
-; CHECK-NEXT: vpcmpnleuq k2, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckwd k0, k1, k0
-; CHECK-NEXT: vpcmpnleuq k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k1, k1, k2
-; CHECK-NEXT: vpcmpnleuq k2, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleuq k3, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckbw k2, k3, k2
-; CHECK-NEXT: kunpckwd k1, k2, k1
-; CHECK-NEXT: kunpckdq k0, k1, k0
+; CHECK-NEXT: cmp rdi, 64
+; CHECK-NEXT: mov eax, 64
+; CHECK-NEXT: cmovb rax, rdi
+; CHECK-NEXT: mov rcx, -1
+; CHECK-NEXT: bzhi rax, rcx, rax
+; CHECK-NEXT: kmovq k0, rax
; CHECK-NEXT: vpmovm2b zmm0, k0
; CHECK-NEXT: ret
%2 = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i64(i64 0, i64 %0)
@@ -112,10 +101,13 @@ define <64 x i1> @create_mask64(i64 %0) {
define <16 x i1> @create_mask16_i32(i32 %0) {
; CHECK-LABEL: create_mask16_i32:
; CHECK: # %bb.0:
-; CHECK-NEXT: vpbroadcastd zmm0, edi
-; CHECK-NEXT: vpcmpnleud k0, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
+; CHECK-NEXT: cmp edi, 16
+; CHECK-NEXT: mov eax, 16
+; CHECK-NEXT: cmovb eax, edi
+; CHECK-NEXT: mov ecx, -1
+; CHECK-NEXT: bzhi eax, ecx, eax
+; CHECK-NEXT: kmovd k0, eax
; CHECK-NEXT: vpmovm2b xmm0, k0
-; CHECK-NEXT: vzeroupper
; CHECK-NEXT: ret
%2 = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 %0)
ret <16 x i1> %2
@@ -124,14 +116,12 @@ define <16 x i1> @create_mask16_i32(i32 %0) {
define <64 x i1> @create_mask64_i32(i32 %0) {
; CHECK-LABEL: create_mask64_i32:
; CHECK: # %bb.0:
-; CHECK-NEXT: vpbroadcastd zmm0, edi
-; CHECK-NEXT: vpcmpnleud k0, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleud k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: vpcmpnleud k2, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckwd k0, k1, k0
-; CHECK-NEXT: vpcmpnleud k1, zmm0, zmmword ptr [rip + {{\.?LCPI[0-9]+_[0-9]+}}]
-; CHECK-NEXT: kunpckwd k1, k1, k2
-; CHECK-NEXT: kunpckdq k0, k1, k0
+; CHECK-NEXT: cmp edi, 64
+; CHECK-NEXT: mov eax, 64
+; CHECK-NEXT: cmovb eax, edi
+; CHECK-NEXT: mov rcx, -1
+; CHECK-NEXT: bzhi rax, rcx, rax
+; CHECK-NEXT: kmovq k0, rax
; CHECK-NEXT: vpmovm2b zmm0, k0
; CHECK-NEXT: ret
%2 = call <64 x i1> @llvm.get.active.lane.mask.v64i1.i32(i32 0, i32 %0)
>From 2c7897d59ccc46133c91f6a1137d80541ecf0b54 Mon Sep 17 00:00:00 2001
From: william <we3223 at gmail.com>
Date: Wed, 30 Sep 2026 23:54:13 +0800
Subject: [PATCH 2/2] [X86][test] Add common SSE check prefix in
active_lane_mask.ll-1
---
llvm/test/CodeGen/X86/active_lane_mask.ll | 376 +++++++++++-----------
1 file changed, 188 insertions(+), 188 deletions(-)
diff --git a/llvm/test/CodeGen/X86/active_lane_mask.ll b/llvm/test/CodeGen/X86/active_lane_mask.ll
index 74a37c8ba6b4a..d316db74246d9 100644
--- a/llvm/test/CodeGen/X86/active_lane_mask.ll
+++ b/llvm/test/CodeGen/X86/active_lane_mask.ll
@@ -272,34 +272,34 @@ define <16 x i1> @lane_mask_v16i1_i32(i32 %index, i32 %TC) {
; SSE42-LABEL: lane_mask_v16i1_i32:
; SSE42: # %bb.0:
; SSE42-NEXT: movd %edi, %xmm0
-; SSE42-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,0,0,0]
+; SSE42-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,0,0]
; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [4294967295,4294967294,4294967293,4294967292]
-; SSE42-NEXT: pminud %xmm1, %xmm0
+; SSE42-NEXT: pminud %xmm2, %xmm0
; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [0,1,2,3]
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967291,4294967290,4294967289,4294967288]
-; SSE42-NEXT: pminud %xmm1, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4,5,6,7]
+; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [4294967291,4294967290,4294967289,4294967288]
+; SSE42-NEXT: pminud %xmm2, %xmm1
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [4,5,6,7]
; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967287,4294967286,4294967285,4294967284]
-; SSE42-NEXT: pminud %xmm1, %xmm3
+; SSE42-NEXT: pminud %xmm2, %xmm3
; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [8,9,10,11]
; SSE42-NEXT: movd %esi, %xmm4
-; SSE42-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE42-NEXT: pminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; SSE42-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,0,0,0]
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1 # [12,13,14,15]
-; SSE42-NEXT: movdqa %xmm1, %xmm5
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [12,13,14,15]
+; SSE42-NEXT: movdqa %xmm2, %xmm5
; SSE42-NEXT: pmaxud %xmm4, %xmm5
-; SSE42-NEXT: pcmpeqd %xmm1, %xmm5
-; SSE42-NEXT: movdqa %xmm3, %xmm1
-; SSE42-NEXT: pmaxud %xmm4, %xmm1
-; SSE42-NEXT: pcmpeqd %xmm3, %xmm1
-; SSE42-NEXT: packssdw %xmm5, %xmm1
-; SSE42-NEXT: movdqa %xmm2, %xmm3
+; SSE42-NEXT: pcmpeqd %xmm2, %xmm5
+; SSE42-NEXT: movdqa %xmm3, %xmm2
+; SSE42-NEXT: pmaxud %xmm4, %xmm2
+; SSE42-NEXT: pcmpeqd %xmm3, %xmm2
+; SSE42-NEXT: packssdw %xmm5, %xmm2
+; SSE42-NEXT: movdqa %xmm1, %xmm3
; SSE42-NEXT: pmaxud %xmm4, %xmm3
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
+; SSE42-NEXT: pcmpeqd %xmm1, %xmm3
; SSE42-NEXT: pmaxud %xmm0, %xmm4
; SSE42-NEXT: pcmpeqd %xmm0, %xmm4
; SSE42-NEXT: packssdw %xmm3, %xmm4
-; SSE42-NEXT: packsswb %xmm1, %xmm4
+; SSE42-NEXT: packsswb %xmm2, %xmm4
; SSE42-NEXT: pcmpeqd %xmm0, %xmm0
; SSE42-NEXT: pxor %xmm4, %xmm0
; SSE42-NEXT: retq
@@ -408,20 +408,9 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
; SSE2-NEXT: por %xmm4, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm3, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
-; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [24,25,26,27]
-; SSE2-NEXT: paddd %xmm2, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm1, %xmm6
-; SSE2-NEXT: movdqa %xmm0, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
-; SSE2-NEXT: por %xmm5, %xmm7
-; SSE2-NEXT: pxor %xmm1, %xmm7
; SSE2-NEXT: movdqa %xmm3, %xmm5
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
-; SSE2-NEXT: packssdw %xmm4, %xmm5
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [20,21,22,23]
+; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
+; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [24,25,26,27]
; SSE2-NEXT: paddd %xmm2, %xmm4
; SSE2-NEXT: movdqa %xmm4, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm6
@@ -431,6 +420,17 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE2-NEXT: pxor %xmm1, %xmm7
; SSE2-NEXT: movdqa %xmm3, %xmm4
; SSE2-NEXT: pcmpgtd %xmm7, %xmm4
+; SSE2-NEXT: packssdw %xmm5, %xmm4
+; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [20,21,22,23]
+; SSE2-NEXT: paddd %xmm2, %xmm5
+; SSE2-NEXT: movdqa %xmm5, %xmm6
+; SSE2-NEXT: pxor %xmm1, %xmm6
+; SSE2-NEXT: movdqa %xmm0, %xmm7
+; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
+; SSE2-NEXT: por %xmm5, %xmm7
+; SSE2-NEXT: pxor %xmm1, %xmm7
+; SSE2-NEXT: movdqa %xmm3, %xmm5
+; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
; SSE2-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [16,17,18,19]
; SSE2-NEXT: movdqa %xmm2, %xmm6
; SSE2-NEXT: pxor %xmm1, %xmm6
@@ -438,8 +438,8 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE2-NEXT: por %xmm2, %xmm0
; SSE2-NEXT: pxor %xmm1, %xmm0
; SSE2-NEXT: pcmpgtd %xmm0, %xmm3
-; SSE2-NEXT: packssdw %xmm4, %xmm3
-; SSE2-NEXT: packsswb %xmm5, %xmm3
+; SSE2-NEXT: packssdw %xmm5, %xmm3
+; SSE2-NEXT: packsswb %xmm4, %xmm3
; SSE2-NEXT: pmovmskb %xmm3, %edx
; SSE2-NEXT: shll $16, %edx
; SSE2-NEXT: orl %ecx, %edx
@@ -459,28 +459,28 @@ define <32 x i1> @lane_mask_v32i1_i32(i32 %index, i32 %TC) {
; SSE42-NEXT: movdqa %xmm2, %xmm3
; SSE42-NEXT: pmaxud %xmm0, %xmm3
; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967287,4294967286,4294967285,4294967284]
-; SSE42-NEXT: pminud %xmm1, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [8,9,10,11]
-; SSE42-NEXT: movdqa %xmm2, %xmm4
+; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [4294967287,4294967286,4294967285,4294967284]
+; SSE42-NEXT: pminud %xmm1, %xmm4
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [8,9,10,11]
+; SSE42-NEXT: movdqa %xmm4, %xmm2
+; SSE42-NEXT: pmaxud %xmm0, %xmm2
+; SSE42-NEXT: pcmpeqd %xmm4, %xmm2
+; SSE42-NEXT: packssdw %xmm3, %xmm2
+; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [4294967291,4294967290,4294967289,4294967288]
+; SSE42-NEXT: pminud %xmm1, %xmm3
+; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3 # [4,5,6,7]
+; SSE42-NEXT: movdqa %xmm3, %xmm4
; SSE42-NEXT: pmaxud %xmm0, %xmm4
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm4
-; SSE42-NEXT: packssdw %xmm3, %xmm4
-; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967291,4294967290,4294967289,4294967288]
-; SSE42-NEXT: pminud %xmm1, %xmm2
-; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [4,5,6,7]
-; SSE42-NEXT: movdqa %xmm2, %xmm3
-; SSE42-NEXT: pmaxud %xmm0, %xmm3
; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [4294967295,4294967294,4294967293,4294967292]
; SSE42-NEXT: pminud %xmm1, %xmm5
; SSE42-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [0,1,2,3]
-; SSE42-NEXT: pcmpeqd %xmm2, %xmm3
-; SSE42-NEXT: movdqa %xmm5, %xmm2
-; SSE42-NEXT: pmaxud %xmm0, %xmm2
-; SSE42-NEXT: pcmpeqd %xmm5, %xmm2
-; SSE42-NEXT: packssdw %xmm3, %xmm2
-; SSE42-NEXT: packsswb %xmm4, %xmm2
-; SSE42-NEXT: pmovmskb %xmm2, %ecx
+; SSE42-NEXT: pcmpeqd %xmm3, %xmm4
+; SSE42-NEXT: movdqa %xmm5, %xmm3
+; SSE42-NEXT: pmaxud %xmm0, %xmm3
+; SSE42-NEXT: pcmpeqd %xmm5, %xmm3
+; SSE42-NEXT: packssdw %xmm4, %xmm3
+; SSE42-NEXT: packsswb %xmm2, %xmm3
+; SSE42-NEXT: pmovmskb %xmm3, %ecx
; SSE42-NEXT: xorl $65535, %ecx # imm = 0xFFFF
; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [4294967267,4294967266,4294967265,4294967264]
; SSE42-NEXT: pminud %xmm1, %xmm2
@@ -1400,195 +1400,195 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
; SSE2-LABEL: lane_mask_v16i1_i64:
; SSE2: # %bb.0:
; SSE2-NEXT: movq %rdi, %xmm0
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm0[0,1,0,1]
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm0[0,1,0,1]
; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [9223372039002259456,9223372039002259456]
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm6
+; SSE2-NEXT: movdqa %xmm4, %xmm5
+; SSE2-NEXT: pxor %xmm0, %xmm5
; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
-; SSE2-NEXT: paddq %xmm5, %xmm2
+; SSE2-NEXT: paddq %xmm4, %xmm2
; SSE2-NEXT: movdqa %xmm2, %xmm1
; SSE2-NEXT: pxor %xmm0, %xmm1
-; SSE2-NEXT: movdqa %xmm6, %xmm3
+; SSE2-NEXT: movdqa %xmm5, %xmm3
; SSE2-NEXT: pcmpgtd %xmm1, %xmm3
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm1
+; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm1
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
-; SSE2-NEXT: pand %xmm4, %xmm7
+; SSE2-NEXT: pand %xmm6, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
; SSE2-NEXT: por %xmm2, %xmm1
; SSE2-NEXT: por %xmm7, %xmm1
; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2,3]
-; SSE2-NEXT: paddq %xmm5, %xmm3
+; SSE2-NEXT: paddq %xmm4, %xmm3
; SSE2-NEXT: movdqa %xmm3, %xmm2
; SSE2-NEXT: pxor %xmm0, %xmm2
-; SSE2-NEXT: movdqa %xmm6, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm2
+; SSE2-NEXT: movdqa %xmm5, %xmm6
+; SSE2-NEXT: pcmpgtd %xmm2, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm2
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm2[1,1,3,3]
; SSE2-NEXT: pand %xmm7, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm6[1,1,3,3]
; SSE2-NEXT: por %xmm3, %xmm2
; SSE2-NEXT: por %xmm8, %xmm2
-; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [4,5]
-; SSE2-NEXT: paddq %xmm5, %xmm4
-; SSE2-NEXT: movdqa %xmm4, %xmm3
+; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [4,5]
+; SSE2-NEXT: paddq %xmm4, %xmm6
+; SSE2-NEXT: movdqa %xmm6, %xmm3
; SSE2-NEXT: pxor %xmm0, %xmm3
-; SSE2-NEXT: movdqa %xmm6, %xmm7
+; SSE2-NEXT: movdqa %xmm5, %xmm7
; SSE2-NEXT: pcmpgtd %xmm3, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm3
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm3
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[1,1,3,3]
; SSE2-NEXT: pand %xmm8, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm3
+; SSE2-NEXT: por %xmm6, %xmm3
; SSE2-NEXT: por %xmm9, %xmm3
; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [6,7]
-; SSE2-NEXT: paddq %xmm5, %xmm7
-; SSE2-NEXT: movdqa %xmm7, %xmm4
-; SSE2-NEXT: pxor %xmm0, %xmm4
-; SSE2-NEXT: movdqa %xmm6, %xmm8
-; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
+; SSE2-NEXT: paddq %xmm4, %xmm7
+; SSE2-NEXT: movdqa %xmm7, %xmm6
+; SSE2-NEXT: pxor %xmm0, %xmm6
+; SSE2-NEXT: movdqa %xmm5, %xmm8
+; SSE2-NEXT: pcmpgtd %xmm6, %xmm8
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm4[1,1,3,3]
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[1,1,3,3]
; SSE2-NEXT: pand %xmm9, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm4
-; SSE2-NEXT: por %xmm10, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm8[1,1,3,3]
+; SSE2-NEXT: por %xmm7, %xmm6
+; SSE2-NEXT: por %xmm10, %xmm6
; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [8,9]
-; SSE2-NEXT: paddq %xmm5, %xmm8
+; SSE2-NEXT: paddq %xmm4, %xmm8
; SSE2-NEXT: movdqa %xmm8, %xmm7
; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm6, %xmm9
+; SSE2-NEXT: movdqa %xmm5, %xmm9
; SSE2-NEXT: pcmpgtd %xmm7, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm7[1,1,3,3]
; SSE2-NEXT: pand %xmm10, %xmm11
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm9[1,1,3,3]
; SSE2-NEXT: por %xmm8, %xmm7
; SSE2-NEXT: por %xmm11, %xmm7
; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [10,11]
-; SSE2-NEXT: paddq %xmm5, %xmm9
+; SSE2-NEXT: paddq %xmm4, %xmm9
; SSE2-NEXT: movdqa %xmm9, %xmm8
; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm6, %xmm10
+; SSE2-NEXT: movdqa %xmm5, %xmm10
; SSE2-NEXT: pcmpgtd %xmm8, %xmm10
; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm8
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm8
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm8[1,1,3,3]
; SSE2-NEXT: pand %xmm11, %xmm12
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
; SSE2-NEXT: por %xmm9, %xmm8
; SSE2-NEXT: por %xmm12, %xmm8
; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [12,13]
-; SSE2-NEXT: paddq %xmm5, %xmm10
+; SSE2-NEXT: paddq %xmm4, %xmm10
; SSE2-NEXT: movdqa %xmm10, %xmm9
; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm6, %xmm11
+; SSE2-NEXT: movdqa %xmm5, %xmm11
; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm9
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm9[1,1,3,3]
; SSE2-NEXT: pand %xmm12, %xmm13
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm11[1,1,3,3]
; SSE2-NEXT: por %xmm10, %xmm9
; SSE2-NEXT: por %xmm13, %xmm9
-; SSE2-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm5 # [14,15]
-; SSE2-NEXT: movdqa %xmm5, %xmm10
+; SSE2-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm4 # [14,15]
+; SSE2-NEXT: movdqa %xmm4, %xmm10
; SSE2-NEXT: pxor %xmm0, %xmm10
-; SSE2-NEXT: movdqa %xmm6, %xmm11
+; SSE2-NEXT: movdqa %xmm5, %xmm11
; SSE2-NEXT: pcmpgtd %xmm10, %xmm11
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm6, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm10[1,1,3,3]
-; SSE2-NEXT: pand %xmm12, %xmm6
+; SSE2-NEXT: pcmpeqd %xmm5, %xmm10
+; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm10[1,1,3,3]
+; SSE2-NEXT: pand %xmm12, %xmm5
; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
+; SSE2-NEXT: por %xmm4, %xmm10
; SSE2-NEXT: por %xmm5, %xmm10
-; SSE2-NEXT: por %xmm6, %xmm10
-; SSE2-NEXT: movq %rsi, %xmm5
-; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[0,1,0,1]
+; SSE2-NEXT: movq %rsi, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,1,0,1]
; SSE2-NEXT: pxor %xmm0, %xmm10
-; SSE2-NEXT: pxor %xmm0, %xmm5
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm10, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm10
+; SSE2-NEXT: pxor %xmm0, %xmm4
+; SSE2-NEXT: movdqa %xmm4, %xmm5
+; SSE2-NEXT: pcmpgtd %xmm10, %xmm5
+; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm5[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm10
; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
; SSE2-NEXT: pand %xmm11, %xmm10
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm10, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
+; SSE2-NEXT: por %xmm10, %xmm5
; SSE2-NEXT: pxor %xmm0, %xmm9
-; SSE2-NEXT: movdqa %xmm5, %xmm10
+; SSE2-NEXT: movdqa %xmm4, %xmm10
; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm9
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm9
; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm9[1,1,3,3]
; SSE2-NEXT: pand %xmm11, %xmm12
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
; SSE2-NEXT: por %xmm12, %xmm9
-; SSE2-NEXT: packssdw %xmm6, %xmm9
+; SSE2-NEXT: packssdw %xmm5, %xmm9
; SSE2-NEXT: pxor %xmm0, %xmm8
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm8
+; SSE2-NEXT: movdqa %xmm4, %xmm5
+; SSE2-NEXT: pcmpgtd %xmm8, %xmm5
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm8[1,1,3,3]
; SSE2-NEXT: pand %xmm10, %xmm8
-; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm6[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[1,1,3,3]
; SSE2-NEXT: por %xmm8, %xmm10
; SSE2-NEXT: pxor %xmm0, %xmm7
-; SSE2-NEXT: movdqa %xmm5, %xmm6
-; SSE2-NEXT: pcmpgtd %xmm7, %xmm6
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm7
+; SSE2-NEXT: movdqa %xmm4, %xmm5
+; SSE2-NEXT: pcmpgtd %xmm7, %xmm5
+; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm5[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
; SSE2-NEXT: pand %xmm8, %xmm7
-; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
-; SSE2-NEXT: por %xmm7, %xmm6
-; SSE2-NEXT: packssdw %xmm10, %xmm6
-; SSE2-NEXT: packssdw %xmm9, %xmm6
-; SSE2-NEXT: pxor %xmm0, %xmm4
-; SSE2-NEXT: movdqa %xmm5, %xmm7
-; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
+; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
+; SSE2-NEXT: por %xmm7, %xmm5
+; SSE2-NEXT: packssdw %xmm10, %xmm5
+; SSE2-NEXT: packssdw %xmm9, %xmm5
+; SSE2-NEXT: pxor %xmm0, %xmm6
+; SSE2-NEXT: movdqa %xmm4, %xmm7
+; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: pand %xmm8, %xmm4
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
+; SSE2-NEXT: pand %xmm8, %xmm6
; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm7[1,1,3,3]
-; SSE2-NEXT: por %xmm4, %xmm7
+; SSE2-NEXT: por %xmm6, %xmm7
; SSE2-NEXT: pxor %xmm0, %xmm3
-; SSE2-NEXT: movdqa %xmm5, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm3
+; SSE2-NEXT: movdqa %xmm4, %xmm6
+; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm3
; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[1,1,3,3]
; SSE2-NEXT: pand %xmm8, %xmm9
-; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
+; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
; SSE2-NEXT: por %xmm9, %xmm3
; SSE2-NEXT: packssdw %xmm7, %xmm3
; SSE2-NEXT: pxor %xmm0, %xmm2
-; SSE2-NEXT: movdqa %xmm5, %xmm4
-; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
-; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm2
+; SSE2-NEXT: movdqa %xmm4, %xmm6
+; SSE2-NEXT: pcmpgtd %xmm2, %xmm6
+; SSE2-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm2
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
; SSE2-NEXT: pand %xmm7, %xmm2
-; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
-; SSE2-NEXT: por %xmm2, %xmm4
+; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
+; SSE2-NEXT: por %xmm2, %xmm6
; SSE2-NEXT: pxor %xmm0, %xmm1
-; SSE2-NEXT: movdqa %xmm5, %xmm0
+; SSE2-NEXT: movdqa %xmm4, %xmm0
; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm0[0,0,2,2]
-; SSE2-NEXT: pcmpeqd %xmm5, %xmm1
+; SSE2-NEXT: pcmpeqd %xmm4, %xmm1
; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
; SSE2-NEXT: pand %xmm2, %xmm1
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
; SSE2-NEXT: por %xmm1, %xmm0
-; SSE2-NEXT: packssdw %xmm4, %xmm0
+; SSE2-NEXT: packssdw %xmm6, %xmm0
; SSE2-NEXT: packssdw %xmm3, %xmm0
-; SSE2-NEXT: packsswb %xmm6, %xmm0
+; SSE2-NEXT: packsswb %xmm5, %xmm0
; SSE2-NEXT: retq
;
; SSE42-LABEL: lane_mask_v16i1_i64:
@@ -1596,72 +1596,72 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: movq %rdi, %xmm0
; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
; SSE42-NEXT: movdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm5
+; SSE42-NEXT: movdqa %xmm0, %xmm4
+; SSE42-NEXT: pxor %xmm1, %xmm4
; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
; SSE42-NEXT: paddq %xmm0, %xmm3
-; SSE42-NEXT: movdqa %xmm3, %xmm4
-; SSE42-NEXT: pxor %xmm1, %xmm4
-; SSE42-NEXT: movdqa %xmm5, %xmm2
-; SSE42-NEXT: pcmpgtq %xmm4, %xmm2
+; SSE42-NEXT: movdqa %xmm3, %xmm5
+; SSE42-NEXT: pxor %xmm1, %xmm5
+; SSE42-NEXT: movdqa %xmm4, %xmm2
+; SSE42-NEXT: pcmpgtq %xmm5, %xmm2
; SSE42-NEXT: por %xmm3, %xmm2
-; SSE42-NEXT: movdqa {{.*#+}} xmm4 = [2,3]
-; SSE42-NEXT: paddq %xmm0, %xmm4
-; SSE42-NEXT: movdqa %xmm4, %xmm6
+; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [2,3]
+; SSE42-NEXT: paddq %xmm0, %xmm5
+; SSE42-NEXT: movdqa %xmm5, %xmm6
; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm5, %xmm3
+; SSE42-NEXT: movdqa %xmm4, %xmm3
; SSE42-NEXT: pcmpgtq %xmm6, %xmm3
-; SSE42-NEXT: por %xmm4, %xmm3
+; SSE42-NEXT: por %xmm5, %xmm3
; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [4,5]
; SSE42-NEXT: paddq %xmm0, %xmm6
; SSE42-NEXT: movdqa %xmm6, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm5, %xmm4
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm4
-; SSE42-NEXT: por %xmm6, %xmm4
+; SSE42-NEXT: movdqa %xmm4, %xmm5
+; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
+; SSE42-NEXT: por %xmm6, %xmm5
; SSE42-NEXT: movdqa {{.*#+}} xmm7 = [6,7]
; SSE42-NEXT: paddq %xmm0, %xmm7
; SSE42-NEXT: movdqa %xmm7, %xmm8
; SSE42-NEXT: pxor %xmm1, %xmm8
-; SSE42-NEXT: movdqa %xmm5, %xmm6
+; SSE42-NEXT: movdqa %xmm4, %xmm6
; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
; SSE42-NEXT: por %xmm7, %xmm6
; SSE42-NEXT: movdqa {{.*#+}} xmm8 = [8,9]
; SSE42-NEXT: paddq %xmm0, %xmm8
; SSE42-NEXT: movdqa %xmm8, %xmm9
; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: movdqa %xmm5, %xmm7
+; SSE42-NEXT: movdqa %xmm4, %xmm7
; SSE42-NEXT: pcmpgtq %xmm9, %xmm7
; SSE42-NEXT: por %xmm8, %xmm7
; SSE42-NEXT: movdqa {{.*#+}} xmm9 = [10,11]
; SSE42-NEXT: paddq %xmm0, %xmm9
; SSE42-NEXT: movdqa %xmm9, %xmm10
; SSE42-NEXT: pxor %xmm1, %xmm10
-; SSE42-NEXT: movdqa %xmm5, %xmm8
+; SSE42-NEXT: movdqa %xmm4, %xmm8
; SSE42-NEXT: pcmpgtq %xmm10, %xmm8
; SSE42-NEXT: por %xmm9, %xmm8
; SSE42-NEXT: movdqa {{.*#+}} xmm9 = [12,13]
; SSE42-NEXT: paddq %xmm0, %xmm9
; SSE42-NEXT: movdqa %xmm9, %xmm10
; SSE42-NEXT: pxor %xmm1, %xmm10
-; SSE42-NEXT: movdqa %xmm5, %xmm11
+; SSE42-NEXT: movdqa %xmm4, %xmm11
; SSE42-NEXT: pcmpgtq %xmm10, %xmm11
; SSE42-NEXT: por %xmm9, %xmm11
; SSE42-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0 # [14,15]
; SSE42-NEXT: movdqa %xmm0, %xmm9
; SSE42-NEXT: pxor %xmm1, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm9, %xmm5
-; SSE42-NEXT: por %xmm0, %xmm5
+; SSE42-NEXT: pcmpgtq %xmm9, %xmm4
+; SSE42-NEXT: por %xmm0, %xmm4
; SSE42-NEXT: movq %rsi, %xmm0
; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
-; SSE42-NEXT: pxor %xmm1, %xmm5
+; SSE42-NEXT: pxor %xmm1, %xmm4
; SSE42-NEXT: pxor %xmm1, %xmm0
; SSE42-NEXT: movdqa %xmm0, %xmm9
-; SSE42-NEXT: pcmpgtq %xmm5, %xmm9
+; SSE42-NEXT: pcmpgtq %xmm4, %xmm9
; SSE42-NEXT: pxor %xmm1, %xmm11
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm11, %xmm5
-; SSE42-NEXT: packssdw %xmm9, %xmm5
+; SSE42-NEXT: movdqa %xmm0, %xmm4
+; SSE42-NEXT: pcmpgtq %xmm11, %xmm4
+; SSE42-NEXT: packssdw %xmm9, %xmm4
; SSE42-NEXT: pxor %xmm1, %xmm8
; SSE42-NEXT: movdqa %xmm0, %xmm9
; SSE42-NEXT: pcmpgtq %xmm8, %xmm9
@@ -1669,14 +1669,14 @@ define <16 x i1> @lane_mask_v16i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: movdqa %xmm0, %xmm8
; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
; SSE42-NEXT: packssdw %xmm9, %xmm8
-; SSE42-NEXT: packssdw %xmm5, %xmm8
+; SSE42-NEXT: packssdw %xmm4, %xmm8
; SSE42-NEXT: pxor %xmm1, %xmm6
-; SSE42-NEXT: movdqa %xmm0, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm6, %xmm5
-; SSE42-NEXT: pxor %xmm1, %xmm4
+; SSE42-NEXT: movdqa %xmm0, %xmm4
+; SSE42-NEXT: pcmpgtq %xmm6, %xmm4
+; SSE42-NEXT: pxor %xmm1, %xmm5
; SSE42-NEXT: movdqa %xmm0, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm4, %xmm6
-; SSE42-NEXT: packssdw %xmm5, %xmm6
+; SSE42-NEXT: pcmpgtq %xmm5, %xmm6
+; SSE42-NEXT: packssdw %xmm4, %xmm6
; SSE42-NEXT: pxor %xmm1, %xmm3
; SSE42-NEXT: movdqa %xmm0, %xmm4
; SSE42-NEXT: pcmpgtq %xmm3, %xmm4
@@ -2282,20 +2282,9 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: pcmpgtq %xmm6, %xmm7
; SSE42-NEXT: por %xmm5, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm3, %xmm5
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm5
-; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [20,21]
-; SSE42-NEXT: paddq %xmm2, %xmm6
-; SSE42-NEXT: movdqa %xmm6, %xmm7
-; SSE42-NEXT: pxor %xmm1, %xmm7
-; SSE42-NEXT: movdqa %xmm0, %xmm8
-; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
-; SSE42-NEXT: por %xmm6, %xmm8
-; SSE42-NEXT: pxor %xmm1, %xmm8
; SSE42-NEXT: movdqa %xmm3, %xmm6
-; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
-; SSE42-NEXT: packssdw %xmm5, %xmm6
-; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [18,19]
+; SSE42-NEXT: pcmpgtq %xmm7, %xmm6
+; SSE42-NEXT: movdqa {{.*#+}} xmm5 = [20,21]
; SSE42-NEXT: paddq %xmm2, %xmm5
; SSE42-NEXT: movdqa %xmm5, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
@@ -2305,6 +2294,17 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: pxor %xmm1, %xmm8
; SSE42-NEXT: movdqa %xmm3, %xmm5
; SSE42-NEXT: pcmpgtq %xmm8, %xmm5
+; SSE42-NEXT: packssdw %xmm6, %xmm5
+; SSE42-NEXT: movdqa {{.*#+}} xmm6 = [18,19]
+; SSE42-NEXT: paddq %xmm2, %xmm6
+; SSE42-NEXT: movdqa %xmm6, %xmm7
+; SSE42-NEXT: pxor %xmm1, %xmm7
+; SSE42-NEXT: movdqa %xmm0, %xmm8
+; SSE42-NEXT: pcmpgtq %xmm7, %xmm8
+; SSE42-NEXT: por %xmm6, %xmm8
+; SSE42-NEXT: pxor %xmm1, %xmm8
+; SSE42-NEXT: movdqa %xmm3, %xmm6
+; SSE42-NEXT: pcmpgtq %xmm8, %xmm6
; SSE42-NEXT: paddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2 # [16,17]
; SSE42-NEXT: movdqa %xmm2, %xmm7
; SSE42-NEXT: pxor %xmm1, %xmm7
@@ -2312,8 +2312,8 @@ define <32 x i1> @lane_mask_v32i1_i64(i64 %index, i64 %TC) {
; SSE42-NEXT: por %xmm2, %xmm0
; SSE42-NEXT: pxor %xmm1, %xmm0
; SSE42-NEXT: pcmpgtq %xmm0, %xmm3
-; SSE42-NEXT: packssdw %xmm5, %xmm3
; SSE42-NEXT: packssdw %xmm6, %xmm3
+; SSE42-NEXT: packssdw %xmm5, %xmm3
; SSE42-NEXT: packsswb %xmm4, %xmm3
; SSE42-NEXT: pmovmskb %xmm3, %edx
; SSE42-NEXT: shll $16, %edx
More information about the llvm-commits
mailing list