llvm.org GIT mirror llvm / 485262e
[x86] narrow extract subvector of vector select This is a potentially large perf win for AVX1 targets because of the way we auto-vectorize to 256-bit but then expect the backend to legalize/optimize for the half-implemented AVX1 ISA. On the motivating example from PR37428 (even though this patch doesn't solve the vector shift issue): https://bugs.llvm.org/show_bug.cgi?id=37428 ...there's a 16% speedup when compiling with "-mavx" (perf tested on Haswell) because we eliminate the remaining 256-bit vblendv ops. I added comments on a couple of tests that require further work. If we have 256-bit logic ops separating the vselect and extract, we should probably narrow everything to 128-bit, but that requires a larger pattern match. Differential Revision: https://reviews.llvm.org/D62969 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362797 91177308-0d34-0410-b5e6-96231b3b80d8 Sanjay Patel 4 months ago
25 changed file(s) with 1983 addition(s) and 2240 deletion(s). Raw diff Collapse all Expand all
4315743157 return SDValue();
4315843158 }
4315943159
43160 /// If we are extracting a subvector of a vector select and the select condition
43161 /// is composed of concatenated vectors, try to narrow the select width. This
43162 /// is a common pattern for AVX1 integer code because 256-bit selects may be
43163 /// legal, but there is almost no integer math/logic available for 256-bit.
43164 /// This function should only be called with legal types (otherwise, the calls
43165 /// to get simple value types will assert).
43166 static SDValue narrowExtractedVectorSelect(SDNode *Ext, SelectionDAG &DAG) {
43167 SDValue Sel = peekThroughBitcasts(Ext->getOperand(0));
43168 SmallVector CatOps;
43169 if (Sel.getOpcode() != ISD::VSELECT ||
43170 !collectConcatOps(Sel.getOperand(0).getNode(), CatOps))
43171 return SDValue();
43172
43173 // TODO: This can be extended to handle extraction to 256-bits.
43174 MVT VT = Ext->getSimpleValueType(0);
43175 if (!VT.is128BitVector())
43176 return SDValue();
43177
43178 MVT WideVT = Ext->getOperand(0).getSimpleValueType();
43179 MVT SelVT = Sel.getSimpleValueType();
43180 unsigned SelElts = SelVT.getVectorNumElements();
43181 unsigned CastedElts = WideVT.getVectorNumElements();
43182 unsigned ExtIdx = cast(Ext->getOperand(1))->getZExtValue();
43183 if (SelElts % CastedElts == 0) {
43184 // The select has the same or more (narrower) elements than the extract
43185 // operand. The extraction index gets scaled by that factor.
43186 ExtIdx *= (SelElts / CastedElts);
43187 } else if (CastedElts % SelElts == 0) {
43188 // The select has less (wider) elements than the extract operand. Make sure
43189 // that the extraction index can be divided evenly.
43190 unsigned IndexDivisor = CastedElts / SelElts;
43191 if (ExtIdx % IndexDivisor != 0)
43192 return SDValue();
43193 ExtIdx /= IndexDivisor;
43194 } else {
43195 llvm_unreachable("Element count of simple vector types are not divisible?");
43196 }
43197
43198 unsigned NarrowingFactor = WideVT.getSizeInBits() / VT.getSizeInBits();
43199 unsigned NarrowElts = SelElts / NarrowingFactor;
43200 MVT NarrowSelVT = MVT::getVectorVT(SelVT.getVectorElementType(), NarrowElts);
43201 SDLoc DL(Ext);
43202 SDValue ExtCond = extract128BitVector(Sel.getOperand(0), ExtIdx, DAG, DL);
43203 SDValue ExtT = extract128BitVector(Sel.getOperand(1), ExtIdx, DAG, DL);
43204 SDValue ExtF = extract128BitVector(Sel.getOperand(2), ExtIdx, DAG, DL);
43205 SDValue NarrowSel = DAG.getSelect(DL, NarrowSelVT, ExtCond, ExtT, ExtF);
43206 return DAG.getBitcast(VT, NarrowSel);
43207 }
43208
4316043209 static SDValue combineExtractSubvector(SDNode *N, SelectionDAG &DAG,
4316143210 TargetLowering::DAGCombinerInfo &DCI,
4316243211 const X86Subtarget &Subtarget) {
4319843247
4319943248 if (DCI.isBeforeLegalizeOps())
4320043249 return SDValue();
43250
43251 if (SDValue V = narrowExtractedVectorSelect(N, DAG))
43252 return V;
4320143253
4320243254 SDValue InVec = N->getOperand(0);
4320343255 unsigned IdxVal = cast(N->getOperand(1))->getZExtValue();
454454 ; X86-AVX1-LABEL: test_reduce_v4i64:
455455 ; X86-AVX1: ## %bb.0:
456456 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
457 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
458 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
459 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
460 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
457 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
458 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
461459 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
462460 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
463 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
461 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
464462 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
465463 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
466464 ; X86-AVX1-NEXT: vzeroupper
530528 ; X64-AVX1-LABEL: test_reduce_v4i64:
531529 ; X64-AVX1: ## %bb.0:
532530 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
533 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
534 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
535 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
536 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
531 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
532 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
537533 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
538534 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
539 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
535 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
540536 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
541537 ; X64-AVX1-NEXT: vzeroupper
542538 ; X64-AVX1-NEXT: retq
11171113 ;
11181114 ; X86-AVX1-LABEL: test_reduce_v8i64:
11191115 ; X86-AVX1: ## %bb.0:
1120 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1121 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1122 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1123 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
1124 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1125 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1126 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
11271116 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
1128 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
1129 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1130 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1117 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1118 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1119 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
1120 ; X86-AVX1-NEXT: vblendvpd %xmm5, %xmm4, %xmm3, %xmm3
1121 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1122 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm1
1123 ; X86-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
11311124 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
11321125 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
1133 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1126 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
11341127 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
11351128 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
11361129 ; X86-AVX1-NEXT: vzeroupper
12381231 ;
12391232 ; X64-AVX1-LABEL: test_reduce_v8i64:
12401233 ; X64-AVX1: ## %bb.0:
1241 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1242 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1243 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1244 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
1245 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1246 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1247 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
12481234 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
1249 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
1250 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1251 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1235 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1236 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1237 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
1238 ; X64-AVX1-NEXT: vblendvpd %xmm5, %xmm4, %xmm3, %xmm3
1239 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1240 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm1
1241 ; X64-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
12521242 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
12531243 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
1254 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1244 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
12551245 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
12561246 ; X64-AVX1-NEXT: vzeroupper
12571247 ; X64-AVX1-NEXT: retq
457457 ; X86-AVX1-LABEL: test_reduce_v4i64:
458458 ; X86-AVX1: ## %bb.0:
459459 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
460 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
461 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
462 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
463 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
460 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
461 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
464462 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
465463 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
466 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
464 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
467465 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
468466 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
469467 ; X86-AVX1-NEXT: vzeroupper
534532 ; X64-AVX1-LABEL: test_reduce_v4i64:
535533 ; X64-AVX1: ## %bb.0:
536534 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
537 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
538 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
539 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
540 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
535 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
536 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
541537 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
542538 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
543 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
539 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
544540 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
545541 ; X64-AVX1-NEXT: vzeroupper
546542 ; X64-AVX1-NEXT: retq
11231119 ; X86-AVX1: ## %bb.0:
11241120 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
11251121 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1126 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1127 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
1128 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1129 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1130 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1122 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
1123 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm5
1124 ; X86-AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm0
1125 ; X86-AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm3, %xmm1
11311126 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
1132 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
1133 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1134 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1127 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
11351128 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
11361129 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
1137 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1130 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
11381131 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
11391132 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
11401133 ; X86-AVX1-NEXT: vzeroupper
12441237 ; X64-AVX1: ## %bb.0:
12451238 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
12461239 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1247 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1248 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
1249 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1250 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1251 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1240 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
1241 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm5
1242 ; X64-AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm0
1243 ; X64-AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm3, %xmm1
12521244 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
1253 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
1254 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1255 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1245 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
12561246 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
12571247 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
1258 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1248 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
12591249 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
12601250 ; X64-AVX1-NEXT: vzeroupper
12611251 ; X64-AVX1-NEXT: retq
540540 ; X86-AVX1-NEXT: ## xmm2 = mem[0,0]
541541 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm1, %xmm3
542542 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm0, %xmm4
543 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm4
544 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
545 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
546 ; X86-AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
543 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
544 ; X86-AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
547545 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
548546 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
549547 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
550548 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
551 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
549 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
552550 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
553551 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
554552 ; X86-AVX1-NEXT: vzeroupper
632630 ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
633631 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
634632 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm4
635 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm4
636 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
637 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
638 ; X64-AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
633 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
634 ; X64-AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
639635 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
640636 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
641637 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
642638 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
643 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
639 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
644640 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
645641 ; X64-AVX1-NEXT: vzeroupper
646642 ; X64-AVX1-NEXT: retq
12511247 ;
12521248 ; X86-AVX1-LABEL: test_reduce_v8i64:
12531249 ; X86-AVX1: ## %bb.0:
1254 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1255 ; X86-AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0]
1256 ; X86-AVX1-NEXT: ## xmm3 = mem[0,0]
1257 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
1258 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1259 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
1260 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1261 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4
1262 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5
1263 ; X86-AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1264 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1265 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1266 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1267 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm2
1268 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm4
1269 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm4
1270 ; X86-AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm2
1271 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1272 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1250 ; X86-AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]
1251 ; X86-AVX1-NEXT: ## xmm2 = mem[0,0]
1252 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm1, %xmm3
1253 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm0, %xmm4
1254 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1255 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1256 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm4, %xmm5
1257 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1258 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm6, %xmm7
1259 ; X86-AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
1260 ; X86-AVX1-NEXT: vblendvpd %xmm5, %xmm6, %xmm4, %xmm4
1261 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm4, %xmm5
1262 ; X86-AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
1263 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm1
1264 ; X86-AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1
1265 ; X86-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm4, %xmm0
12731266 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
1274 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
1275 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
1276 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
1277 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1267 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
1268 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
1269 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1270 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
12781271 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
12791272 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
12801273 ; X86-AVX1-NEXT: vzeroupper
14001393 ;
14011394 ; X64-AVX1-LABEL: test_reduce_v8i64:
14021395 ; X64-AVX1: ## %bb.0:
1403 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1404 ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1405 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1406 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1407 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
1408 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1409 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
1410 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
1411 ; X64-AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1412 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1413 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1414 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1415 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm2
1416 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm4
1417 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm4
1418 ; X64-AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm2
1419 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1420 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1396 ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
1397 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
1398 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm4
1399 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1400 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1401 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm4, %xmm5
1402 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1403 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm6, %xmm7
1404 ; X64-AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
1405 ; X64-AVX1-NEXT: vblendvpd %xmm5, %xmm6, %xmm4, %xmm4
1406 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm4, %xmm5
1407 ; X64-AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
1408 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm1
1409 ; X64-AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1
1410 ; X64-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm4, %xmm0
14211411 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
1422 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
1423 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
1424 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
1425 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1412 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
1413 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
1414 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1415 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
14261416 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
14271417 ; X64-AVX1-NEXT: vzeroupper
14281418 ; X64-AVX1-NEXT: retq
473473 ;
474474 ; X86-AVX1-LABEL: test_reduce_v4i64:
475475 ; X86-AVX1: ## %bb.0:
476 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
477 ; X86-AVX1-NEXT: vmovddup {{.*#+}} xmm2 = [-0.0E+0,-0.0E+0]
478 ; X86-AVX1-NEXT: ## xmm2 = mem[0,0]
479 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm0, %xmm3
480 ; X86-AVX1-NEXT: vxorps %xmm2, %xmm1, %xmm4
481 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
482 ; X86-AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
483 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
484 ; X86-AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
485 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
486 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
487 ; X86-AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
488 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
489 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
476 ; X86-AVX1-NEXT: vmovddup {{.*#+}} xmm1 = [-0.0E+0,-0.0E+0]
477 ; X86-AVX1-NEXT: ## xmm1 = mem[0,0]
478 ; X86-AVX1-NEXT: vxorps %xmm1, %xmm0, %xmm2
479 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
480 ; X86-AVX1-NEXT: vxorps %xmm1, %xmm3, %xmm4
481 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
482 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm3, %xmm0
483 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[2,3,0,1]
484 ; X86-AVX1-NEXT: vxorpd %xmm1, %xmm0, %xmm3
485 ; X86-AVX1-NEXT: vxorpd %xmm1, %xmm2, %xmm1
486 ; X86-AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1
487 ; X86-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
490488 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
491489 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
492490 ; X86-AVX1-NEXT: vzeroupper
568566 ;
569567 ; X64-AVX1-LABEL: test_reduce_v4i64:
570568 ; X64-AVX1: ## %bb.0:
571 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
572 ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
573 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
574 ; X64-AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm4
575 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
576 ; X64-AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
577 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
578 ; X64-AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
579 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
580 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
581 ; X64-AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
582 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
583 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
569 ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
570 ; X64-AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm2
571 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
572 ; X64-AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm4
573 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
574 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm3, %xmm0
575 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[2,3,0,1]
576 ; X64-AVX1-NEXT: vxorpd %xmm1, %xmm0, %xmm3
577 ; X64-AVX1-NEXT: vxorpd %xmm1, %xmm2, %xmm1
578 ; X64-AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1
579 ; X64-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
584580 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
585581 ; X64-AVX1-NEXT: vzeroupper
586582 ; X64-AVX1-NEXT: retq
11561152 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
11571153 ; X86-AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [-0.0E+0,-0.0E+0]
11581154 ; X86-AVX1-NEXT: ## xmm3 = mem[0,0]
1159 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
1160 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1161 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
1162 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1163 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4
1164 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5
1165 ; X86-AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1166 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1167 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1168 ; X86-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1169 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
1170 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4
1171 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1172 ; X86-AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
1173 ; X86-AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm2, %ymm2
1174 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1155 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm4
1156 ; X86-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1157 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm5, %xmm6
1158 ; X86-AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
1159 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm6
1160 ; X86-AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm7
1161 ; X86-AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1162 ; X86-AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm1, %xmm0
1163 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm1
1164 ; X86-AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm5, %xmm2
1165 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm2, %xmm4
1166 ; X86-AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm1
1167 ; X86-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
11751168 ; X86-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
11761169 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
11771170 ; X86-AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
11781171 ; X86-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1179 ; X86-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1172 ; X86-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
11801173 ; X86-AVX1-NEXT: vmovd %xmm0, %eax
11811174 ; X86-AVX1-NEXT: vpextrd $1, %xmm0, %edx
11821175 ; X86-AVX1-NEXT: vzeroupper
13061299 ; X64-AVX1: ## %bb.0:
13071300 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
13081301 ; X64-AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1309 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1310 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1311 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
1312 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1313 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
1314 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
1315 ; X64-AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1316 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1317 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1318 ; X64-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1319 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
1320 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
1321 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1322 ; X64-AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
1323 ; X64-AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm2, %ymm2
1324 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1302 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm4
1303 ; X64-AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1304 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm6
1305 ; X64-AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
1306 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm6
1307 ; X64-AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm7
1308 ; X64-AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1309 ; X64-AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm1, %xmm0
1310 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm1
1311 ; X64-AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm5, %xmm2
1312 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm2, %xmm4
1313 ; X64-AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm1
1314 ; X64-AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
13251315 ; X64-AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
13261316 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
13271317 ; X64-AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
13281318 ; X64-AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
1329 ; X64-AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1319 ; X64-AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
13301320 ; X64-AVX1-NEXT: vmovq %xmm0, %rax
13311321 ; X64-AVX1-NEXT: vzeroupper
13321322 ; X64-AVX1-NEXT: retq
308308 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm3
309309 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm2
310310 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
311 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
312 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [2147483647,2147483647,2147483647,2147483647]
313 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
314 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [2147483647,2147483647]
315 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
316 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm5, %xmm6
317 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
318 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
319 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
320 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
321 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm5, %xmm5
322 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
323 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
324 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
325 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
311 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm8
312 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
313 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [2147483647,2147483647]
314 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm9
315 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm6
316 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
317 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm4, %xmm2
318 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm5
319 ; AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm4, %xmm0
326320 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [18446744071562067968,18446744071562067968]
327 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm4
328 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm6
329 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
330 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
331 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
332 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm4
333 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm5
334 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
335 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
336 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
321 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm10
322 ; AVX1-NEXT: vblendvpd %xmm2, %xmm7, %xmm4, %xmm2
323 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm2, %xmm7
324 ; AVX1-NEXT: vblendvpd %xmm6, %xmm1, %xmm4, %xmm1
325 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm6
326 ; AVX1-NEXT: vblendvpd %xmm9, %xmm3, %xmm4, %xmm3
327 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm4
328 ; AVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm5, %xmm3
329 ; AVX1-NEXT: vblendvpd %xmm6, %xmm1, %xmm5, %xmm1
337330 ; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
338 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
339 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
331 ; AVX1-NEXT: vblendvpd %xmm7, %xmm2, %xmm5, %xmm2
332 ; AVX1-NEXT: vblendvpd %xmm10, %xmm0, %xmm5, %xmm0
333 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
340334 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
341 ; AVX1-NEXT: vmaskmovps %ymm0, %ymm2, (%rdi)
335 ; AVX1-NEXT: vmaskmovps %ymm0, %ymm8, (%rdi)
342336 ; AVX1-NEXT: vzeroupper
343337 ; AVX1-NEXT: retq
344338 ;
705699 ; AVX1: # %bb.0:
706700 ; AVX1-NEXT: vpxor %xmm8, %xmm8, %xmm8
707701 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm2, %xmm5
708 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
709 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
710 ; AVX1-NEXT: vmovapd {{.*#+}} ymm6 = [32767,32767,32767,32767]
711 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7
712 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [32767,32767]
713 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm7
714 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm9
715 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm9, %ymm7
716 ; AVX1-NEXT: vblendvpd %ymm7, %ymm1, %ymm6, %ymm1
717 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
718 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm7
719 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
720 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm3, %ymm3
721 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm6, %ymm0
722 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
723 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
724 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [18446744073709518848,18446744073709518848]
725 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
726 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm0, %xmm9
727 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm9, %ymm6
728 ; AVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm3, %ymm0
702 ; AVX1-NEXT: vpcmpeqd %xmm9, %xmm9, %xmm9
703 ; AVX1-NEXT: vpxor %xmm9, %xmm5, %xmm10
729704 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
730 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
731 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm1, %xmm7
732 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6
733 ; AVX1-NEXT: vblendvpd %ymm6, %ymm1, %ymm3, %ymm1
734 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
735 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
736 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
705 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [32767,32767]
706 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm11
707 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm7, %xmm12
708 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
709 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm3
710 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm7, %xmm4
711 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm7, %xmm0
712 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709518848,18446744073709518848]
713 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm13
714 ; AVX1-NEXT: vblendvpd %xmm3, %xmm5, %xmm7, %xmm3
715 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm14
716 ; AVX1-NEXT: vblendvpd %xmm12, %xmm1, %xmm7, %xmm1
717 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
718 ; AVX1-NEXT: vblendvpd %xmm11, %xmm6, %xmm7, %xmm6
719 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm7
720 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm4, %xmm6
721 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm4, %xmm1
722 ; AVX1-NEXT: vpackssdw %xmm6, %xmm1, %xmm1
723 ; AVX1-NEXT: vblendvpd %xmm14, %xmm3, %xmm4, %xmm3
724 ; AVX1-NEXT: vblendvpd %xmm13, %xmm0, %xmm4, %xmm0
737725 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0
738726 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
739 ; AVX1-NEXT: vpextrb $0, %xmm5, %eax
727 ; AVX1-NEXT: vpextrb $0, %xmm10, %eax
740728 ; AVX1-NEXT: testb $1, %al
741729 ; AVX1-NEXT: je .LBB1_2
742730 ; AVX1-NEXT: # %bb.1: # %cond.store
743731 ; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)
744732 ; AVX1-NEXT: .LBB1_2: # %else
745733 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm2, %xmm1
746 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm1
734 ; AVX1-NEXT: vpxor %xmm9, %xmm1, %xmm1
747735 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
748736 ; AVX1-NEXT: testb $1, %al
749737 ; AVX1-NEXT: je .LBB1_4
12901278 ; AVX1: # %bb.0:
12911279 ; AVX1-NEXT: vpxor %xmm8, %xmm8, %xmm8
12921280 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm2, %xmm5
1293 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
1294 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
1295 ; AVX1-NEXT: vmovapd {{.*#+}} ymm6 = [127,127,127,127]
1296 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7
1297 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [127,127]
1298 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm7
1299 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm9
1300 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm9, %ymm7
1301 ; AVX1-NEXT: vblendvpd %ymm7, %ymm1, %ymm6, %ymm1
1302 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
1303 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm7
1304 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
1305 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm3, %ymm3
1306 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm6, %ymm0
1307 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
1308 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1309 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [18446744073709551488,18446744073709551488]
1310 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
1311 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm0, %xmm9
1312 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm9, %ymm6
1313 ; AVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm3, %ymm0
1281 ; AVX1-NEXT: vpcmpeqd %xmm9, %xmm9, %xmm9
1282 ; AVX1-NEXT: vpxor %xmm9, %xmm5, %xmm10
13141283 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
1315 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
1316 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm1, %xmm7
1317 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6
1318 ; AVX1-NEXT: vblendvpd %ymm6, %ymm1, %ymm3, %ymm1
1319 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1320 ; AVX1-NEXT: vpackssdw %xmm3, %xmm1, %xmm1
1321 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1284 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [127,127]
1285 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm11
1286 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm7, %xmm12
1287 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
1288 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm3
1289 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm7, %xmm4
1290 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm7, %xmm0
1291 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744073709551488,18446744073709551488]
1292 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm13
1293 ; AVX1-NEXT: vblendvpd %xmm3, %xmm5, %xmm7, %xmm3
1294 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm14
1295 ; AVX1-NEXT: vblendvpd %xmm12, %xmm1, %xmm7, %xmm1
1296 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
1297 ; AVX1-NEXT: vblendvpd %xmm11, %xmm6, %xmm7, %xmm6
1298 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm7
1299 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm4, %xmm6
1300 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm4, %xmm1
1301 ; AVX1-NEXT: vpackssdw %xmm6, %xmm1, %xmm1
1302 ; AVX1-NEXT: vblendvpd %xmm14, %xmm3, %xmm4, %xmm3
1303 ; AVX1-NEXT: vblendvpd %xmm13, %xmm0, %xmm4, %xmm0
13221304 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0
13231305 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1324 ; AVX1-NEXT: vpextrb $0, %xmm5, %eax
1306 ; AVX1-NEXT: vpextrb $0, %xmm10, %eax
13251307 ; AVX1-NEXT: testb $1, %al
13261308 ; AVX1-NEXT: je .LBB2_2
13271309 ; AVX1-NEXT: # %bb.1: # %cond.store
13281310 ; AVX1-NEXT: vpextrb $0, %xmm0, (%rdi)
13291311 ; AVX1-NEXT: .LBB2_2: # %else
13301312 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm2, %xmm1
1331 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm1
1313 ; AVX1-NEXT: vpxor %xmm9, %xmm1, %xmm1
13321314 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
13331315 ; AVX1-NEXT: testb $1, %al
13341316 ; AVX1-NEXT: je .LBB2_4
17351717 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
17361718 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
17371719 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
1738 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [2147483647,2147483647,2147483647,2147483647]
1739 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1740 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [2147483647,2147483647]
1741 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1742 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4
1743 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1744 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1745 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [18446744071562067968,18446744071562067968,18446744071562067968,18446744071562067968]
1746 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1747 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [18446744071562067968,18446744071562067968]
1748 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1749 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
1750 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1751 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
17521720 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1721 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2147483647,2147483647]
1722 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
1723 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm5
1724 ; AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm3, %xmm0
1725 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [18446744071562067968,18446744071562067968]
1726 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm6
1727 ; AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm3, %xmm2
1728 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm2, %xmm3
1729 ; AVX1-NEXT: vblendvpd %xmm3, %xmm2, %xmm5, %xmm2
1730 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm5, %xmm0
17531731 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
17541732 ; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)
17551733 ; AVX1-NEXT: vzeroupper
19831961 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm2
19841962 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
19851963 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1986 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [32767,32767,32767,32767]
1987 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1988 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [32767,32767]
1989 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1990 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm5, %xmm5
1991 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1992 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1993 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [18446744073709518848,18446744073709518848,18446744073709518848,18446744073709518848]
1994 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1995 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [18446744073709518848,18446744073709518848]
1996 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm4
1997 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm5
1998 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1999 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
20001964 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1965 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [32767,32767]
1966 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
1967 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm6
1968 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
1969 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [18446744073709518848,18446744073709518848]
1970 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm0, %xmm7
1971 ; AVX1-NEXT: vblendvpd %xmm5, %xmm3, %xmm4, %xmm3
1972 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm4
1973 ; AVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
1974 ; AVX1-NEXT: vblendvpd %xmm7, %xmm0, %xmm6, %xmm0
20011975 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0
20021976 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
20031977 ; AVX1-NEXT: testb $1, %al
23132287 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm2
23142288 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
23152289 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
2316 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [127,127,127,127]
2317 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
2318 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [127,127]
2319 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
2320 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm5, %xmm5
2321 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
2322 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
2323 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [18446744073709551488,18446744073709551488,18446744073709551488,18446744073709551488]
2324 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
2325 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [18446744073709551488,18446744073709551488]
2326 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm4
2327 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm0, %xmm5
2328 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
2329 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
23302290 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2291 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127]
2292 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
2293 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm6
2294 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm4, %xmm0
2295 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [18446744073709551488,18446744073709551488]
2296 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm0, %xmm7
2297 ; AVX1-NEXT: vblendvpd %xmm5, %xmm3, %xmm4, %xmm3
2298 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm4
2299 ; AVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm6, %xmm3
2300 ; AVX1-NEXT: vblendvpd %xmm7, %xmm0, %xmm6, %xmm0
23312301 ; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0
23322302 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
23332303 ; AVX1-NEXT: testb $1, %al
247247 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm3
248248 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm2, %xmm2
249249 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
250 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
251 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [4294967295,4294967295,4294967295,4294967295]
252 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
253 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
254 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
255 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [9223372041149743103,9223372041149743103]
256 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
257 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
258 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm7
259 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm7, %ymm4
260 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
250 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm8
251 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
252 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
253 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372041149743103,9223372041149743103]
254 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm9
255 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
256 ; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm7
257 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm7
258 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm2
259 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm5, %xmm2
261260 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
262 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
263 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
264 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5
265 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
266 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
267 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
268 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
261 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3
262 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
263 ; AVX1-NEXT: vmovapd {{.*#+}} xmm5 = [4294967295,4294967295]
264 ; AVX1-NEXT: vblendvpd %xmm3, %xmm4, %xmm5, %xmm3
265 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm5, %xmm1
269266 ; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
270 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
271 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
267 ; AVX1-NEXT: vblendvpd %xmm7, %xmm6, %xmm5, %xmm2
268 ; AVX1-NEXT: vblendvpd %xmm9, %xmm0, %xmm5, %xmm0
269 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
272270 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
273 ; AVX1-NEXT: vmaskmovps %ymm0, %ymm2, (%rdi)
271 ; AVX1-NEXT: vmaskmovps %ymm0, %ymm8, (%rdi)
274272 ; AVX1-NEXT: vzeroupper
275273 ; AVX1-NEXT: retq
276274 ;
579577 ; AVX1-NEXT: vpxor %xmm8, %xmm8, %xmm8
580578 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm2, %xmm5
581579 ; AVX1-NEXT: vpcmpeqd %xmm9, %xmm9, %xmm9
582 ; AVX1-NEXT: vpxor %xmm9, %xmm5, %xmm5
583 ; AVX1-NEXT: vmovapd {{.*#+}} ymm10 = [65535,65535,65535,65535]
584 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
585 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
586 ; AVX1-NEXT: vpxor %xmm3, %xmm7, %xmm7
587 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854841343,9223372036854841343]
588 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm4, %xmm7
589 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm6
590 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm4, %xmm6
591 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm6, %ymm6
592 ; AVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm10, %ymm0
593 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
594 ; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm6
595 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm4, %xmm6
596 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
597 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
598 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm3, %ymm3
599 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm10, %ymm1
600 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
580 ; AVX1-NEXT: vpxor %xmm9, %xmm5, %xmm10
581 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [9223372036854775808,9223372036854775808]
582 ; AVX1-NEXT: vpxor %xmm6, %xmm0, %xmm7
583 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854841343,9223372036854841343]
584 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm11
585 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
586 ; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm5
587 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm12
588 ; AVX1-NEXT: vpxor %xmm6, %xmm1, %xmm7
589 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm7
590 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
591 ; AVX1-NEXT: vpxor %xmm6, %xmm5, %xmm6
592 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm3
593 ; AVX1-NEXT: vmovapd {{.*#+}} xmm6 = [65535,65535]
594 ; AVX1-NEXT: vblendvpd %xmm3, %xmm5, %xmm6, %xmm3
595 ; AVX1-NEXT: vblendvpd %xmm7, %xmm1, %xmm6, %xmm1
601596 ; AVX1-NEXT: vpackusdw %xmm3, %xmm1, %xmm1
602 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
597 ; AVX1-NEXT: vblendvpd %xmm12, %xmm4, %xmm6, %xmm3
598 ; AVX1-NEXT: vblendvpd %xmm11, %xmm0, %xmm6, %xmm0
603599 ; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0
604600 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
605 ; AVX1-NEXT: vpextrb $0, %xmm5, %eax
601 ; AVX1-NEXT: vpextrb $0, %xmm10, %eax
606602 ; AVX1-NEXT: testb $1, %al
607603 ; AVX1-NEXT: je .LBB1_2
608604 ; AVX1-NEXT: # %bb.1: # %cond.store
10911087 ; AVX1-NEXT: vpxor %xmm8, %xmm8, %xmm8
10921088 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm2, %xmm5
10931089 ; AVX1-NEXT: vpcmpeqd %xmm9, %xmm9, %xmm9
1094 ; AVX1-NEXT: vpxor %xmm9, %xmm5, %xmm5
1095 ; AVX1-NEXT: vmovapd {{.*#+}} ymm10 = [255,255,255,255]
1096 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
1097 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1098 ; AVX1-NEXT: vpxor %xmm3, %xmm7, %xmm7
1099 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854776063,9223372036854776063]
1100 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm4, %xmm7
1101 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm6
1102 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm4, %xmm6
1103 ; AVX1-NEXT: vinsertf128 $1, %xmm7, %ymm6, %ymm6
1104 ; AVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm10, %ymm0
1105 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
1106 ; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm6
1107 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm4, %xmm6
1108 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
1109 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1110 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm3, %ymm3
1111 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm10, %ymm1
1112 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1090 ; AVX1-NEXT: vpxor %xmm9, %xmm5, %xmm10
1091 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [9223372036854775808,9223372036854775808]
1092 ; AVX1-NEXT: vpxor %xmm6, %xmm0, %xmm7
1093 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854776063,9223372036854776063]
1094 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm11
1095 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1096 ; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm5
1097 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm12
1098 ; AVX1-NEXT: vpxor %xmm6, %xmm1, %xmm7
1099 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm7
1100 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1101 ; AVX1-NEXT: vpxor %xmm6, %xmm5, %xmm6
1102 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm3
1103 ; AVX1-NEXT: vmovapd {{.*#+}} xmm6 = [255,255]
1104 ; AVX1-NEXT: vblendvpd %xmm3, %xmm5, %xmm6, %xmm3
1105 ; AVX1-NEXT: vblendvpd %xmm7, %xmm1, %xmm6, %xmm1
11131106 ; AVX1-NEXT: vpackusdw %xmm3, %xmm1, %xmm1
1114 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1107 ; AVX1-NEXT: vblendvpd %xmm12, %xmm4, %xmm6, %xmm3
1108 ; AVX1-NEXT: vblendvpd %xmm11, %xmm0, %xmm6, %xmm0
11151109 ; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0
11161110 ; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1117 ; AVX1-NEXT: vpextrb $0, %xmm5, %eax
1111 ; AVX1-NEXT: vpextrb $0, %xmm10, %eax
11181112 ; AVX1-NEXT: testb $1, %al
11191113 ; AVX1-NEXT: je .LBB2_2
11201114 ; AVX1-NEXT: # %bb.1: # %cond.store
14911485 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
14921486 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
14931487 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
1494 ; AVX1-NEXT: vmovapd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]
1495 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1496 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
1497 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
1498 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372041149743103,9223372041149743103]
1499 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
1500 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm4
1501 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1502 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1503 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
1504 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1488 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
1489 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
1490 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372041149743103,9223372041149743103]
1491 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
1492 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
1493 ; AVX1-NEXT: vpxor %xmm2, %xmm5, %xmm2
1494 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1495 ; AVX1-NEXT: vmovapd {{.*#+}} xmm4 = [4294967295,4294967295]
1496 ; AVX1-NEXT: vblendvpd %xmm2, %xmm5, %xmm4, %xmm2
1497 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm4, %xmm0
15051498 ; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
15061499 ; AVX1-NEXT: vmaskmovps %xmm0, %xmm1, (%rdi)
15071500 ; AVX1-NEXT: vzeroupper
16971690 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm2
16981691 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
16991692 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1700 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [65535,65535,65535,65535]
1701 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1702 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
1703 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1704 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [9223372036854841343,9223372036854841343]
1705 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
1706 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
1707 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
1708 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1709 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1710 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1693 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1694 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
1695 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854841343,9223372036854841343]
1696 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1697 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1698 ; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm3
1699 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
1700 ; AVX1-NEXT: vmovapd {{.*#+}} xmm5 = [65535,65535]
1701 ; AVX1-NEXT: vblendvpd %xmm3, %xmm6, %xmm5, %xmm3
1702 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm5, %xmm0
17111703 ; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0
17121704 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
17131705 ; AVX1-NEXT: testb $1, %al
19851977 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm2
19861978 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
19871979 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1988 ; AVX1-NEXT: vmovapd {{.*#+}} ymm3 = [255,255,255,255]
1989 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1990 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
1991 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1992 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [9223372036854776063,9223372036854776063]
1993 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
1994 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
1995 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
1996 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1997 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm3, %ymm0
1998 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1980 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1981 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
1982 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854776063,9223372036854776063]
1983 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1984 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1985 ; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm3
1986 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
1987 ; AVX1-NEXT: vmovapd {{.*#+}} xmm5 = [255,255]
1988 ; AVX1-NEXT: vblendvpd %xmm3, %xmm6, %xmm5, %xmm3
1989 ; AVX1-NEXT: vblendvpd %xmm4, %xmm0, %xmm5, %xmm0
19991990 ; AVX1-NEXT: vpackusdw %xmm3, %xmm0, %xmm0
20001991 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
20011992 ; AVX1-NEXT: testb $1, %al
474474 define <4 x i64> @vec256_i64_signed_reg_reg(<4 x i64> %a1, <4 x i64> %a2) nounwind {
475475 ; AVX1-FALLBACK-LABEL: vec256_i64_signed_reg_reg:
476476 ; AVX1-FALLBACK: # %bb.0:
477 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm3
478 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm2
479 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm4
477 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm2
478 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm3
479 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
480480 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm5
481 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm6
482 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm3
481 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm6
483482 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm7
484 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm3, %ymm7, %ymm3
485 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm3
486 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm6, %ymm0, %ymm1, %ymm1
487 ; AVX1-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm6
488 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm3, %xmm3
489 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm1
490 ; AVX1-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm1
483 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
484 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
485 ; AVX1-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
486 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
487 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
488 ; AVX1-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
489 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
491490 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
492 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm6, %xmm3
493491 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
494492 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
495493 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
496 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
497 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm6
494 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
495 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
498496 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
499497 ; AVX1-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
500498 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
501 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
499 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
502500 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
503501 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
504 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm5
505 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm7
502 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
503 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
506504 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
507505 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
508506 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
509 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
510 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm5, %xmm2
511 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm1, %xmm1
507 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
508 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
509 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
512510 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
513 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
514 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
511 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
512 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
515513 ; AVX1-FALLBACK-NEXT: retq
516514 ;
517515 ; AVX2-LABEL: vec256_i64_signed_reg_reg:
537535 ;
538536 ; XOP-FALLBACK-LABEL: vec256_i64_signed_reg_reg:
539537 ; XOP-FALLBACK: # %bb.0:
540 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm3
541 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm2
542 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm3, %xmm2, %xmm4
538 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm2
539 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm3
540 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
543541 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm1, %xmm0, %xmm5
544 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm6
545 ; XOP-FALLBACK-NEXT: vpcomltq %xmm3, %xmm2, %xmm3
542 ; XOP-FALLBACK-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
546543 ; XOP-FALLBACK-NEXT: vpcomltq %xmm1, %xmm0, %xmm7
547 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm3, %ymm7, %ymm3
548 ; XOP-FALLBACK-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm3
549 ; XOP-FALLBACK-NEXT: vblendvpd %ymm6, %ymm0, %ymm1, %ymm1
550 ; XOP-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm6
551 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm3, %xmm3
552 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm1
553 ; XOP-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm1
544 ; XOP-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
545 ; XOP-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
546 ; XOP-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
547 ; XOP-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
548 ; XOP-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
549 ; XOP-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
550 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
554551 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
555 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm6, %xmm3
556552 ; XOP-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
557553 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
558554 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
559 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
560 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm6
555 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
556 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
561557 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
562558 ; XOP-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
563559 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
564 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
560 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
565561 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
566562 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
567 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm5
568 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm7
563 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
564 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
569565 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
570566 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
571567 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
572 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
573 ; XOP-FALLBACK-NEXT: vpaddq %xmm2, %xmm5, %xmm2
574 ; XOP-FALLBACK-NEXT: vpaddq %xmm2, %xmm1, %xmm1
568 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
569 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
570 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
575571 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
576 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
577 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
572 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
573 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
578574 ; XOP-FALLBACK-NEXT: retq
579575 ;
580576 ; XOPAVX1-LABEL: vec256_i64_signed_reg_reg:
581577 ; XOPAVX1: # %bb.0:
582 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
583 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
584 ; XOPAVX1-NEXT: vpcomgtq %xmm3, %xmm2, %xmm4
578 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
579 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
580 ; XOPAVX1-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
585581 ; XOPAVX1-NEXT: vpcomgtq %xmm1, %xmm0, %xmm5
586 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm6
587 ; XOPAVX1-NEXT: vpcomltq %xmm3, %xmm2, %xmm3
582 ; XOPAVX1-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
588583 ; XOPAVX1-NEXT: vpcomltq %xmm1, %xmm0, %xmm7
589 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm7, %ymm3
590 ; XOPAVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm3
591 ; XOPAVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm1, %ymm1
592 ; XOPAVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm6
593 ; XOPAVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
594 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
595 ; XOPAVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm1
584 ; XOPAVX1-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
585 ; XOPAVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
586 ; XOPAVX1-NEXT: vpsubq %xmm7, %xmm1, %xmm1
587 ; XOPAVX1-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
588 ; XOPAVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
589 ; XOPAVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm2
590 ; XOPAVX1-NEXT: vpsrlq $1, %xmm2, %xmm2
596591 ; XOPAVX1-NEXT: vpsrlq $1, %xmm1, %xmm1
597 ; XOPAVX1-NEXT: vpsrlq $1, %xmm6, %xmm3
598592 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
599593 ; XOPAVX1-NEXT: vpor %xmm8, %xmm5, %xmm5
600594 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm7
601 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
602 ; XOPAVX1-NEXT: vpsrlq $32, %xmm3, %xmm6
595 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
596 ; XOPAVX1-NEXT: vpsrlq $32, %xmm1, %xmm6
603597 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
604598 ; XOPAVX1-NEXT: vpaddq %xmm6, %xmm7, %xmm6
605599 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
606 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
600 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
607601 ; XOPAVX1-NEXT: vpor %xmm8, %xmm4, %xmm4
608602 ; XOPAVX1-NEXT: vpsrlq $32, %xmm4, %xmm5
609 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm5
610 ; XOPAVX1-NEXT: vpsrlq $32, %xmm1, %xmm7
603 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
604 ; XOPAVX1-NEXT: vpsrlq $32, %xmm2, %xmm7
611605 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
612606 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm5, %xmm5
613607 ; XOPAVX1-NEXT: vpsllq $32, %xmm5, %xmm5
614 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
615 ; XOPAVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
616 ; XOPAVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm1
608 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
609 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm5, %xmm3
610 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
617611 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm6, %xmm0
618 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm3, %xmm0
619 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
612 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm1, %xmm0
613 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
620614 ; XOPAVX1-NEXT: retq
621615 ;
622616 ; AVX512F-LABEL: vec256_i64_signed_reg_reg:
699693 define <4 x i64> @vec256_i64_unsigned_reg_reg(<4 x i64> %a1, <4 x i64> %a2) nounwind {
700694 ; AVX1-FALLBACK-LABEL: vec256_i64_unsigned_reg_reg:
701695 ; AVX1-FALLBACK: # %bb.0:
702 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm2
703 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
704 ; AVX1-FALLBACK-NEXT: vpxor %xmm3, %xmm2, %xmm4
696 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm3
697 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
698 ; AVX1-FALLBACK-NEXT: vpxor %xmm4, %xmm3, %xmm5
705699 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm2
706 ; AVX1-FALLBACK-NEXT: vpxor %xmm3, %xmm2, %xmm5
707 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm6
708 ; AVX1-FALLBACK-NEXT: vpxor %xmm3, %xmm1, %xmm7
709 ; AVX1-FALLBACK-NEXT: vpxor %xmm3, %xmm0, %xmm3
710 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm7, %xmm3, %xmm8
711 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm6, %ymm8, %ymm9
712 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm4
713 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm7, %xmm3
714 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
715 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm3
716 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm9, %ymm0, %ymm1, %ymm1
717 ; AVX1-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm4
718 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm3, %xmm3
719 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm1
720 ; AVX1-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm1
700 ; AVX1-FALLBACK-NEXT: vpxor %xmm4, %xmm2, %xmm6
701 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm8
702 ; AVX1-FALLBACK-NEXT: vpxor %xmm4, %xmm1, %xmm7
703 ; AVX1-FALLBACK-NEXT: vpxor %xmm4, %xmm0, %xmm4
704 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm7, %xmm4, %xmm9
705 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
706 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm4, %xmm7, %xmm4
707 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm4, %xmm0, %xmm1, %xmm4
708 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm9, %xmm0, %xmm1, %xmm1
709 ; AVX1-FALLBACK-NEXT: vpsubq %xmm4, %xmm1, %xmm1
710 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm5, %xmm2, %xmm3, %xmm4
711 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm8, %xmm2, %xmm3, %xmm3
712 ; AVX1-FALLBACK-NEXT: vpsubq %xmm4, %xmm3, %xmm3
713 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm3, %xmm3
721714 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
722 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm4, %xmm3
723 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm9 = [1,1]
724 ; AVX1-FALLBACK-NEXT: vpor %xmm9, %xmm8, %xmm5
725 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
726 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
727 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
728 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm4, %xmm4
729 ; AVX1-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
730 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
731 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
732 ; AVX1-FALLBACK-NEXT: vpor %xmm9, %xmm6, %xmm5
715 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm4 = [1,1]
716 ; AVX1-FALLBACK-NEXT: vpor %xmm4, %xmm9, %xmm5
733717 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
734718 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm1, %xmm6
735719 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm7
737721 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
738722 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
739723 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
740 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm6, %xmm2
741 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm1, %xmm1
742 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
743 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
744 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
724 ; AVX1-FALLBACK-NEXT: vpor %xmm4, %xmm8, %xmm4
725 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
726 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm5
727 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm7
728 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
729 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
730 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
731 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm3, %xmm3
732 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm5, %xmm2
733 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm3, %xmm2
734 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
735 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
736 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
745737 ; AVX1-FALLBACK-NEXT: retq
746738 ;
747739 ; AVX2-LABEL: vec256_i64_unsigned_reg_reg:
770762 ;
771763 ; XOP-FALLBACK-LABEL: vec256_i64_unsigned_reg_reg:
772764 ; XOP-FALLBACK: # %bb.0:
773 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm3
774 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm2
775 ; XOP-FALLBACK-NEXT: vpcomgtuq %xmm3, %xmm2, %xmm4
765 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm2
766 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm3
767 ; XOP-FALLBACK-NEXT: vpcomgtuq %xmm2, %xmm3, %xmm4
776768 ; XOP-FALLBACK-NEXT: vpcomgtuq %xmm1, %xmm0, %xmm5
777 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm6
778 ; XOP-FALLBACK-NEXT: vpcomltuq %xmm3, %xmm2, %xmm3
769 ; XOP-FALLBACK-NEXT: vpcomltuq %xmm2, %xmm3, %xmm6
779770 ; XOP-FALLBACK-NEXT: vpcomltuq %xmm1, %xmm0, %xmm7
780 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm3, %ymm7, %ymm3
781 ; XOP-FALLBACK-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm3
782 ; XOP-FALLBACK-NEXT: vblendvpd %ymm6, %ymm0, %ymm1, %ymm1
783 ; XOP-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm6
784 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm3, %xmm3
785 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm1, %xmm1
786 ; XOP-FALLBACK-NEXT: vpsubq %xmm3, %xmm1, %xmm1
771 ; XOP-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
772 ; XOP-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
773 ; XOP-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
774 ; XOP-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
775 ; XOP-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
776 ; XOP-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
777 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
787778 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
788 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm6, %xmm3
789779 ; XOP-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
790780 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
791781 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
792 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
793 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm6
782 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
783 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
794784 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
795785 ; XOP-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
796786 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
797 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
787 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
798788 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
799789 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
800 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm5
801 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm7
790 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
791 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
802792 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
803793 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
804794 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
805 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
806 ; XOP-FALLBACK-NEXT: vpaddq %xmm2, %xmm5, %xmm2
807 ; XOP-FALLBACK-NEXT: vpaddq %xmm2, %xmm1, %xmm1
795 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
796 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
797 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
808798 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
809 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
810 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
799 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
800 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
811801 ; XOP-FALLBACK-NEXT: retq
812802 ;
813803 ; XOPAVX1-LABEL: vec256_i64_unsigned_reg_reg:
814804 ; XOPAVX1: # %bb.0:
815 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
816 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
817 ; XOPAVX1-NEXT: vpcomgtuq %xmm3, %xmm2, %xmm4
805 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
806 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
807 ; XOPAVX1-NEXT: vpcomgtuq %xmm2, %xmm3, %xmm4
818808 ; XOPAVX1-NEXT: vpcomgtuq %xmm1, %xmm0, %xmm5
819 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm6
820 ; XOPAVX1-NEXT: vpcomltuq %xmm3, %xmm2, %xmm3
809 ; XOPAVX1-NEXT: vpcomltuq %xmm2, %xmm3, %xmm6
821810 ; XOPAVX1-NEXT: vpcomltuq %xmm1, %xmm0, %xmm7
822 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm7, %ymm3
823 ; XOPAVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm3
824 ; XOPAVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm1, %ymm1
825 ; XOPAVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm6
826 ; XOPAVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
827 ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
828 ; XOPAVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm1
811 ; XOPAVX1-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
812 ; XOPAVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
813 ; XOPAVX1-NEXT: vpsubq %xmm7, %xmm1, %xmm1
814 ; XOPAVX1-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
815 ; XOPAVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
816 ; XOPAVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm2
817 ; XOPAVX1-NEXT: vpsrlq $1, %xmm2, %xmm2
829818 ; XOPAVX1-NEXT: vpsrlq $1, %xmm1, %xmm1
830 ; XOPAVX1-NEXT: vpsrlq $1, %xmm6, %xmm3
831819 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
832820 ; XOPAVX1-NEXT: vpor %xmm8, %xmm5, %xmm5
833821 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm7
834 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
835 ; XOPAVX1-NEXT: vpsrlq $32, %xmm3, %xmm6
822 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
823 ; XOPAVX1-NEXT: vpsrlq $32, %xmm1, %xmm6
836824 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
837825 ; XOPAVX1-NEXT: vpaddq %xmm6, %xmm7, %xmm6
838826 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
839 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
827 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
840828 ; XOPAVX1-NEXT: vpor %xmm8, %xmm4, %xmm4
841829 ; XOPAVX1-NEXT: vpsrlq $32, %xmm4, %xmm5
842 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm5
843 ; XOPAVX1-NEXT: vpsrlq $32, %xmm1, %xmm7
830 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
831 ; XOPAVX1-NEXT: vpsrlq $32, %xmm2, %xmm7
844832 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
845833 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm5, %xmm5
846834 ; XOPAVX1-NEXT: vpsllq $32, %xmm5, %xmm5
847 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm1
848 ; XOPAVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
849 ; XOPAVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm1
835 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
836 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm5, %xmm3
837 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
850838 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm6, %xmm0
851 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm3, %xmm0
852 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
839 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm1, %xmm0
840 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
853841 ; XOPAVX1-NEXT: retq
854842 ;
855843 ; AVX512F-LABEL: vec256_i64_unsigned_reg_reg:
934922 define <4 x i64> @vec256_i64_signed_mem_reg(<4 x i64>* %a1_addr, <4 x i64> %a2) nounwind {
935923 ; AVX1-FALLBACK-LABEL: vec256_i64_signed_mem_reg:
936924 ; AVX1-FALLBACK: # %bb.0:
937 ; AVX1-FALLBACK-NEXT: vmovapd (%rdi), %ymm3
938 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm4
925 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm2
939926 ; AVX1-FALLBACK-NEXT: vmovdqa (%rdi), %xmm1
940 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm2
941 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm4, %xmm2, %xmm5
942 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm6
943 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm7
944 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm4
945 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm8
946 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm8, %ymm4
947 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm4, %ymm3, %ymm0, %ymm4
948 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm7, %ymm3, %ymm0, %ymm0
949 ; AVX1-FALLBACK-NEXT: vpsubq %xmm4, %xmm0, %xmm3
950 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm4, %xmm4
951 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm0
952 ; AVX1-FALLBACK-NEXT: vpsubq %xmm4, %xmm0, %xmm0
927 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm3
928 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
929 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm5
930 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm6
931 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm7
932 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm7, %xmm1, %xmm0, %xmm7
933 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm5, %xmm1, %xmm0, %xmm0
934 ; AVX1-FALLBACK-NEXT: vpsubq %xmm7, %xmm0, %xmm0
935 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
936 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
937 ; AVX1-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
938 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
953939 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm0, %xmm0
954 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm3, %xmm3
955940 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
956 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm6, %xmm6
957 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm6, %xmm7
958 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
959 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
960 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm4, %xmm4
961 ; AVX1-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
962 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
963 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm3, %xmm3
964941 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
965 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
966 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm0, %xmm6
967 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm0, %xmm7
968 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
969 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
942 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
943 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm0, %xmm7
944 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm0, %xmm6
945 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
946 ; AVX1-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
970947 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
971948 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
972 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm6, %xmm2
973 ; AVX1-FALLBACK-NEXT: vpaddq %xmm2, %xmm0, %xmm0
974 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm4, %xmm1
975 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm3, %xmm1
976 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
949 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
950 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
951 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
952 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
953 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
954 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
955 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
956 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
957 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
958 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
959 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm6, %xmm1
960 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm0, %xmm0
961 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
977962 ; AVX1-FALLBACK-NEXT: retq
978963 ;
979964 ; AVX2-LABEL: vec256_i64_signed_mem_reg:
1000985 ;
1001986 ; XOP-FALLBACK-LABEL: vec256_i64_signed_mem_reg:
1002987 ; XOP-FALLBACK: # %bb.0:
1003 ; XOP-FALLBACK-NEXT: vmovapd (%rdi), %ymm3
1004 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm4
988 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm2
1005989 ; XOP-FALLBACK-NEXT: vmovdqa (%rdi), %xmm1
1006 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm2
1007 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm4, %xmm2, %xmm5
1008 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm0, %xmm1, %xmm6
1009 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm7
1010 ; XOP-FALLBACK-NEXT: vpcomltq %xmm4, %xmm2, %xmm4
1011 ; XOP-FALLBACK-NEXT: vpcomltq %xmm0, %xmm1, %xmm8
1012 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm8, %ymm4
1013 ; XOP-FALLBACK-NEXT: vblendvpd %ymm4, %ymm3, %ymm0, %ymm4
1014 ; XOP-FALLBACK-NEXT: vblendvpd %ymm7, %ymm3, %ymm0, %ymm0
1015 ; XOP-FALLBACK-NEXT: vpsubq %xmm4, %xmm0, %xmm3
1016 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm4, %xmm4
1017 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm0
1018 ; XOP-FALLBACK-NEXT: vpsubq %xmm4, %xmm0, %xmm0
990 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm3
991 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
992 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm0, %xmm1, %xmm5
993 ; XOP-FALLBACK-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
994 ; XOP-FALLBACK-NEXT: vpcomltq %xmm0, %xmm1, %xmm7
995 ; XOP-FALLBACK-NEXT: vblendvpd %xmm7, %xmm1, %xmm0, %xmm7
996 ; XOP-FALLBACK-NEXT: vblendvpd %xmm5, %xmm1, %xmm0, %xmm0
997 ; XOP-FALLBACK-NEXT: vpsubq %xmm7, %xmm0, %xmm0
998 ; XOP-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
999 ; XOP-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1000 ; XOP-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
1001 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
10191002 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm0, %xmm0
1020 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm3, %xmm3
10211003 ; XOP-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1022 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm6, %xmm6
1023 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm6, %xmm7
1024 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1025 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
1026 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm4, %xmm4
1027 ; XOP-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1028 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
1029 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm3, %xmm3
10301004 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
1031 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
1032 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm0, %xmm6
1033 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm0, %xmm7
1034 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1035 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1005 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
1006 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm0, %xmm7
1007 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm0, %xmm6
1008 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1009 ; XOP-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
10361010 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
10371011 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
1038 ; XOP-FALLBACK-NEXT: vpaddq %xmm2, %xmm6, %xmm2
1039 ; XOP-FALLBACK-NEXT: vpaddq %xmm2, %xmm0, %xmm0
1040 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm4, %xmm1
1041 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm3, %xmm1
1042 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1012 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
1013 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
1014 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
1015 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
1016 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1017 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1018 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
1019 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1020 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1021 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1022 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1023 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1024 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
10431025 ; XOP-FALLBACK-NEXT: retq
10441026 ;
10451027 ; XOPAVX1-LABEL: vec256_i64_signed_mem_reg:
10461028 ; XOPAVX1: # %bb.0:
1047 ; XOPAVX1-NEXT: vmovapd (%rdi), %ymm3
1048 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1029 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
10491030 ; XOPAVX1-NEXT: vmovdqa (%rdi), %xmm1
1050 ; XOPAVX1-NEXT: vmovdqa 16(%rdi), %xmm2
1051 ; XOPAVX1-NEXT: vpcomgtq %xmm4, %xmm2, %xmm5
1052 ; XOPAVX1-NEXT: vpcomgtq %xmm0, %xmm1, %xmm6
1053 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm7
1054 ; XOPAVX1-NEXT: vpcomltq %xmm4, %xmm2, %xmm4
1055 ; XOPAVX1-NEXT: vpcomltq %xmm0, %xmm1, %xmm8
1056 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm8, %ymm4
1057 ; XOPAVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm0, %ymm4
1058 ; XOPAVX1-NEXT: vblendvpd %ymm7, %ymm3, %ymm0, %ymm0
1059 ; XOPAVX1-NEXT: vpsubq %xmm4, %xmm0, %xmm3
1060 ; XOPAVX1-NEXT: vextractf128 $1, %ymm4, %xmm4
1061 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
1062 ; XOPAVX1-NEXT: vpsubq %xmm4, %xmm0, %xmm0
1031 ; XOPAVX1-NEXT: vmovdqa 16(%rdi), %xmm3
1032 ; XOPAVX1-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
1033 ; XOPAVX1-NEXT: vpcomgtq %xmm0, %xmm1, %xmm5
1034 ; XOPAVX1-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
1035 ; XOPAVX1-NEXT: vpcomltq %xmm0, %xmm1, %xmm7
1036 ; XOPAVX1-NEXT: vblendvpd %xmm7, %xmm1, %xmm0, %xmm7
1037 ; XOPAVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm0, %xmm0
1038 ; XOPAVX1-NEXT: vpsubq %xmm7, %xmm0, %xmm0
1039 ; XOPAVX1-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1040 ; XOPAVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1041 ; XOPAVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm2
1042 ; XOPAVX1-NEXT: vpsrlq $1, %xmm2, %xmm2
10631043 ; XOPAVX1-NEXT: vpsrlq $1, %xmm0, %xmm0
1064 ; XOPAVX1-NEXT: vpsrlq $1, %xmm3, %xmm3
10651044 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1066 ; XOPAVX1-NEXT: vpor %xmm8, %xmm6, %xmm6
1067 ; XOPAVX1-NEXT: vpsrlq $32, %xmm6, %xmm7
1068 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1069 ; XOPAVX1-NEXT: vpsrlq $32, %xmm3, %xmm4
1070 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm4, %xmm4
1071 ; XOPAVX1-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1072 ; XOPAVX1-NEXT: vpsllq $32, %xmm4, %xmm4
1073 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm3, %xmm3
10741045 ; XOPAVX1-NEXT: vpor %xmm8, %xmm5, %xmm5
1075 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm6
1076 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm0, %xmm6
1077 ; XOPAVX1-NEXT: vpsrlq $32, %xmm0, %xmm7
1078 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1079 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1046 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm7
1047 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm0, %xmm7
1048 ; XOPAVX1-NEXT: vpsrlq $32, %xmm0, %xmm6
1049 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1050 ; XOPAVX1-NEXT: vpaddq %xmm6, %xmm7, %xmm6
10801051 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
10811052 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm0
1082 ; XOPAVX1-NEXT: vpaddq %xmm2, %xmm6, %xmm2
1083 ; XOPAVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm0
1084 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm4, %xmm1
1085 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm3, %xmm1
1086 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1053 ; XOPAVX1-NEXT: vpor %xmm8, %xmm4, %xmm4
1054 ; XOPAVX1-NEXT: vpsrlq $32, %xmm4, %xmm5
1055 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
1056 ; XOPAVX1-NEXT: vpsrlq $32, %xmm2, %xmm7
1057 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1058 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1059 ; XOPAVX1-NEXT: vpsllq $32, %xmm5, %xmm5
1060 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1061 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1062 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1063 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1064 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0
1065 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
10871066 ; XOPAVX1-NEXT: retq
10881067 ;
10891068 ; AVX512F-LABEL: vec256_i64_signed_mem_reg:
11681147 define <4 x i64> @vec256_i64_signed_reg_mem(<4 x i64> %a1, <4 x i64>* %a2_addr) nounwind {
11691148 ; AVX1-FALLBACK-LABEL: vec256_i64_signed_reg_mem:
11701149 ; AVX1-FALLBACK: # %bb.0:
1171 ; AVX1-FALLBACK-NEXT: vmovapd (%rdi), %ymm2
1172 ; AVX1-FALLBACK-NEXT: vmovdqa (%rdi), %xmm3
1173 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm4
1174 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm1
1175 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm4, %xmm1, %xmm5
1176 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm6
1177 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm7
1178 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm4
1179 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
1180 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1181 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm3
1182 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm7, %ymm0, %ymm2, %ymm2
1183 ; AVX1-FALLBACK-NEXT: vpsubq %xmm3, %xmm2, %xmm4
1184 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm3, %xmm3
1185 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm2, %xmm2
1186 ; AVX1-FALLBACK-NEXT: vpsubq %xmm3, %xmm2, %xmm2
1150 ; AVX1-FALLBACK-NEXT: vmovdqa (%rdi), %xmm1
1151 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm2
1152 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm3
1153 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
1154 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm5
1155 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm6
1156 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm7
1157 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
1158 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
1159 ; AVX1-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
1160 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1161 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1162 ; AVX1-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
11871163 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
1188 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm4, %xmm3
1164 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
11891165 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1190 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm6, %xmm6
1191 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm6, %xmm7
1192 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1193 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
1194 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm4, %xmm4
1195 ; AVX1-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1196 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
1197 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm3, %xmm3
11981166 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
1199 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
1200 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm2, %xmm6
1167 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
1168 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
1169 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
1170 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1171 ; AVX1-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
1172 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1173 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
1174 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
1175 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
1176 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
12011177 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
1202 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1203 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1204 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1205 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm2
1206 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1207 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm2, %xmm1
1208 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
1209 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
1210 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1178 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1179 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1180 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
1181 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1182 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1183 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1184 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
1185 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
1186 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
12111187 ; AVX1-FALLBACK-NEXT: retq
12121188 ;
12131189 ; AVX2-LABEL: vec256_i64_signed_reg_mem:
12341210 ;
12351211 ; XOP-FALLBACK-LABEL: vec256_i64_signed_reg_mem:
12361212 ; XOP-FALLBACK: # %bb.0:
1237 ; XOP-FALLBACK-NEXT: vmovapd (%rdi), %ymm2
1238 ; XOP-FALLBACK-NEXT: vmovdqa (%rdi), %xmm3
1239 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm4
1240 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm1
1241 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm4, %xmm1, %xmm5
1242 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm3, %xmm0, %xmm6
1243 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm7
1244 ; XOP-FALLBACK-NEXT: vpcomltq %xmm4, %xmm1, %xmm4
1245 ; XOP-FALLBACK-NEXT: vpcomltq %xmm3, %xmm0, %xmm3
1246 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1247 ; XOP-FALLBACK-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm3
1248 ; XOP-FALLBACK-NEXT: vblendvpd %ymm7, %ymm0, %ymm2, %ymm2
1249 ; XOP-FALLBACK-NEXT: vpsubq %xmm3, %xmm2, %xmm4
1250 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm3, %xmm3
1251 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm2, %xmm2
1252 ; XOP-FALLBACK-NEXT: vpsubq %xmm3, %xmm2, %xmm2
1213 ; XOP-FALLBACK-NEXT: vmovdqa (%rdi), %xmm1
1214 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm2
1215 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm0, %xmm3
1216 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
1217 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm1, %xmm0, %xmm5
1218 ; XOP-FALLBACK-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
1219 ; XOP-FALLBACK-NEXT: vpcomltq %xmm1, %xmm0, %xmm7
1220 ; XOP-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
1221 ; XOP-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
1222 ; XOP-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
1223 ; XOP-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1224 ; XOP-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1225 ; XOP-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
12531226 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
1254 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm4, %xmm3
1227 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
12551228 ; XOP-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1256 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm6, %xmm6
1257 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm6, %xmm7
1258 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1259 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
1260 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm4, %xmm4
1261 ; XOP-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1262 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
1263 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm3, %xmm3
12641229 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
1265 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
1266 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm2, %xmm6
1230 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
1231 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
1232 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
1233 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1234 ; XOP-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
1235 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1236 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
1237 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
1238 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
1239 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
12671240 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
1268 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1269 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1270 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1271 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm2
1272 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1273 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm2, %xmm1
1274 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
1275 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
1276 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1241 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1242 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1243 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
1244 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1245 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1246 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1247 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
1248 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
1249 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
12771250 ; XOP-FALLBACK-NEXT: retq
12781251 ;
12791252 ; XOPAVX1-LABEL: vec256_i64_signed_reg_mem:
12801253 ; XOPAVX1: # %bb.0:
1281 ; XOPAVX1-NEXT: vmovapd (%rdi), %ymm2
1282 ; XOPAVX1-NEXT: vmovdqa (%rdi), %xmm3
1283 ; XOPAVX1-NEXT: vmovdqa 16(%rdi), %xmm4
1284 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1285 ; XOPAVX1-NEXT: vpcomgtq %xmm4, %xmm1, %xmm5
1286 ; XOPAVX1-NEXT: vpcomgtq %xmm3, %xmm0, %xmm6
1287 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm7
1288 ; XOPAVX1-NEXT: vpcomltq %xmm4, %xmm1, %xmm4
1289 ; XOPAVX1-NEXT: vpcomltq %xmm3, %xmm0, %xmm3
1290 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1291 ; XOPAVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm3
1292 ; XOPAVX1-NEXT: vblendvpd %ymm7, %ymm0, %ymm2, %ymm2
1293 ; XOPAVX1-NEXT: vpsubq %xmm3, %xmm2, %xmm4
1294 ; XOPAVX1-NEXT: vextractf128 $1, %ymm3, %xmm3
1295 ; XOPAVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
1296 ; XOPAVX1-NEXT: vpsubq %xmm3, %xmm2, %xmm2
1254 ; XOPAVX1-NEXT: vmovdqa (%rdi), %xmm1
1255 ; XOPAVX1-NEXT: vmovdqa 16(%rdi), %xmm2
1256 ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1257 ; XOPAVX1-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
1258 ; XOPAVX1-NEXT: vpcomgtq %xmm1, %xmm0, %xmm5
1259 ; XOPAVX1-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
1260 ; XOPAVX1-NEXT: vpcomltq %xmm1, %xmm0, %xmm7
1261 ; XOPAVX1-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
1262 ; XOPAVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
1263 ; XOPAVX1-NEXT: vpsubq %xmm7, %xmm1, %xmm1
1264 ; XOPAVX1-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1265 ; XOPAVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1266 ; XOPAVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm2
12971267 ; XOPAVX1-NEXT: vpsrlq $1, %xmm2, %xmm2
1298 ; XOPAVX1-NEXT: vpsrlq $1, %xmm4, %xmm3
1268 ; XOPAVX1-NEXT: vpsrlq $1, %xmm1, %xmm1
12991269 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1300 ; XOPAVX1-NEXT: vpor %xmm8, %xmm6, %xmm6
1301 ; XOPAVX1-NEXT: vpsrlq $32, %xmm6, %xmm7
1302 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1303 ; XOPAVX1-NEXT: vpsrlq $32, %xmm3, %xmm4
1304 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm4, %xmm4
1305 ; XOPAVX1-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1306 ; XOPAVX1-NEXT: vpsllq $32, %xmm4, %xmm4
1307 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm3, %xmm3
13081270 ; XOPAVX1-NEXT: vpor %xmm8, %xmm5, %xmm5
1309 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm6
1310 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm6
1271 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm7
1272 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
1273 ; XOPAVX1-NEXT: vpsrlq $32, %xmm1, %xmm6
1274 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1275 ; XOPAVX1-NEXT: vpaddq %xmm6, %xmm7, %xmm6
1276 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
1277 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
1278 ; XOPAVX1-NEXT: vpor %xmm8, %xmm4, %xmm4
1279 ; XOPAVX1-NEXT: vpsrlq $32, %xmm4, %xmm5
1280 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
13111281 ; XOPAVX1-NEXT: vpsrlq $32, %xmm2, %xmm7
1312 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1313 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1314 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
1315 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm2
1316 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1317 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm2, %xmm1
1318 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0
1319 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm3, %xmm0
1320 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1282 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1283 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1284 ; XOPAVX1-NEXT: vpsllq $32, %xmm5, %xmm5
1285 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1286 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1287 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1288 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm6, %xmm0
1289 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm1, %xmm0
1290 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
13211291 ; XOPAVX1-NEXT: retq
13221292 ;
13231293 ; AVX512F-LABEL: vec256_i64_signed_reg_mem:
14021372 define <4 x i64> @vec256_i64_signed_mem_mem(<4 x i64>* %a1_addr, <4 x i64>* %a2_addr) nounwind {
14031373 ; AVX1-FALLBACK-LABEL: vec256_i64_signed_mem_mem:
14041374 ; AVX1-FALLBACK: # %bb.0:
1405 ; AVX1-FALLBACK-NEXT: vmovapd (%rdi), %ymm2
1406 ; AVX1-FALLBACK-NEXT: vmovapd (%rsi), %ymm3
1407 ; AVX1-FALLBACK-NEXT: vmovdqa (%rsi), %xmm4
1408 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rsi), %xmm5
1375 ; AVX1-FALLBACK-NEXT: vmovdqa (%rsi), %xmm1
1376 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rsi), %xmm2
14091377 ; AVX1-FALLBACK-NEXT: vmovdqa (%rdi), %xmm0
1410 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm1
1411 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm6
1412 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm7
1413 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm8
1414 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm5, %xmm5
1415 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm4, %xmm4
1416 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm5, %ymm4, %ymm4
1417 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm4, %ymm2, %ymm3, %ymm4
1418 ; AVX1-FALLBACK-NEXT: vblendvpd %ymm8, %ymm2, %ymm3, %ymm2
1419 ; AVX1-FALLBACK-NEXT: vpsubq %xmm4, %xmm2, %xmm3
1420 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm4, %xmm4
1421 ; AVX1-FALLBACK-NEXT: vextractf128 $1, %ymm2, %xmm2
1422 ; AVX1-FALLBACK-NEXT: vpsubq %xmm4, %xmm2, %xmm2
1378 ; AVX1-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm3
1379 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
1380 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm5
1381 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm6
1382 ; AVX1-FALLBACK-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm7
1383 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
1384 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
1385 ; AVX1-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
1386 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1387 ; AVX1-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1388 ; AVX1-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
14231389 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
1424 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm3, %xmm3
1390 ; AVX1-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
14251391 ; AVX1-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1426 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm7, %xmm5
1392 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
14271393 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
1428 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1429 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
1430 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm4, %xmm4
1431 ; AVX1-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1432 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
1433 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
1434 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm6, %xmm5
1435 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
1436 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm6, %xmm2, %xmm6
1394 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
1395 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
1396 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1397 ; AVX1-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
1398 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1399 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
1400 ; AVX1-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
1401 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
1402 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
14371403 ; AVX1-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
1438 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1439 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1440 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1441 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm2
1442 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1443 ; AVX1-FALLBACK-NEXT: vpaddq %xmm1, %xmm2, %xmm1
1444 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
1445 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
1446 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1404 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1405 ; AVX1-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1406 ; AVX1-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
1407 ; AVX1-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1408 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1409 ; AVX1-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1410 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
1411 ; AVX1-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
1412 ; AVX1-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
14471413 ; AVX1-FALLBACK-NEXT: retq
14481414 ;
14491415 ; AVX2-LABEL: vec256_i64_signed_mem_mem:
14711437 ;
14721438 ; XOP-FALLBACK-LABEL: vec256_i64_signed_mem_mem:
14731439 ; XOP-FALLBACK: # %bb.0:
1474 ; XOP-FALLBACK-NEXT: vmovapd (%rdi), %ymm2
1475 ; XOP-FALLBACK-NEXT: vmovapd (%rsi), %ymm3
1476 ; XOP-FALLBACK-NEXT: vmovdqa (%rsi), %xmm4
1477 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rsi), %xmm5
1440 ; XOP-FALLBACK-NEXT: vmovdqa (%rsi), %xmm1
1441 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rsi), %xmm2
14781442 ; XOP-FALLBACK-NEXT: vmovdqa (%rdi), %xmm0
1479 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm1
1480 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm5, %xmm1, %xmm6
1481 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm4, %xmm0, %xmm7
1482 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm8
1483 ; XOP-FALLBACK-NEXT: vpcomltq %xmm5, %xmm1, %xmm5
1484 ; XOP-FALLBACK-NEXT: vpcomltq %xmm4, %xmm0, %xmm4
1485 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm5, %ymm4, %ymm4
1486 ; XOP-FALLBACK-NEXT: vblendvpd %ymm4, %ymm2, %ymm3, %ymm4
1487 ; XOP-FALLBACK-NEXT: vblendvpd %ymm8, %ymm2, %ymm3, %ymm2
1488 ; XOP-FALLBACK-NEXT: vpsubq %xmm4, %xmm2, %xmm3
1489 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm4, %xmm4
1490 ; XOP-FALLBACK-NEXT: vextractf128 $1, %ymm2, %xmm2
1491 ; XOP-FALLBACK-NEXT: vpsubq %xmm4, %xmm2, %xmm2
1443 ; XOP-FALLBACK-NEXT: vmovdqa 16(%rdi), %xmm3
1444 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
1445 ; XOP-FALLBACK-NEXT: vpcomgtq %xmm1, %xmm0, %xmm5
1446 ; XOP-FALLBACK-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
1447 ; XOP-FALLBACK-NEXT: vpcomltq %xmm1, %xmm0, %xmm7
1448 ; XOP-FALLBACK-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
1449 ; XOP-FALLBACK-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
1450 ; XOP-FALLBACK-NEXT: vpsubq %xmm7, %xmm1, %xmm1
1451 ; XOP-FALLBACK-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1452 ; XOP-FALLBACK-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1453 ; XOP-FALLBACK-NEXT: vpsubq %xmm6, %xmm2, %xmm2
14921454 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm2, %xmm2
1493 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm3, %xmm3
1455 ; XOP-FALLBACK-NEXT: vpsrlq $1, %xmm1, %xmm1
14941456 ; XOP-FALLBACK-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1495 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm7, %xmm5
1457 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm5, %xmm5
14961458 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm7
1497 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1498 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm3, %xmm4
1499 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm4, %xmm4
1500 ; XOP-FALLBACK-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1501 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm4, %xmm4
1502 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
1503 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm6, %xmm5
1504 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm5, %xmm6
1505 ; XOP-FALLBACK-NEXT: vpmuludq %xmm6, %xmm2, %xmm6
1459 ; XOP-FALLBACK-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
1460 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm1, %xmm6
1461 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1462 ; XOP-FALLBACK-NEXT: vpaddq %xmm6, %xmm7, %xmm6
1463 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1464 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
1465 ; XOP-FALLBACK-NEXT: vpor %xmm8, %xmm4, %xmm4
1466 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm4, %xmm5
1467 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
15061468 ; XOP-FALLBACK-NEXT: vpsrlq $32, %xmm2, %xmm7
1507 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1508 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1509 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm6, %xmm6
1510 ; XOP-FALLBACK-NEXT: vpmuludq %xmm5, %xmm2, %xmm2
1511 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1512 ; XOP-FALLBACK-NEXT: vpaddq %xmm1, %xmm2, %xmm1
1513 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm4, %xmm0
1514 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm3, %xmm0
1515 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1469 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1470 ; XOP-FALLBACK-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1471 ; XOP-FALLBACK-NEXT: vpsllq $32, %xmm5, %xmm5
1472 ; XOP-FALLBACK-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1473 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1474 ; XOP-FALLBACK-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1475 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm6, %xmm0
1476 ; XOP-FALLBACK-NEXT: vpaddq %xmm0, %xmm1, %xmm0
1477 ; XOP-FALLBACK-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
15161478 ; XOP-FALLBACK-NEXT: retq
15171479 ;
15181480 ; XOPAVX1-LABEL: vec256_i64_signed_mem_mem:
15191481 ; XOPAVX1: # %bb.0:
1520 ; XOPAVX1-NEXT: vmovapd (%rdi), %ymm2
1521 ; XOPAVX1-NEXT: vmovapd (%rsi), %ymm3
1522 ; XOPAVX1-NEXT: vmovdqa (%rsi), %xmm4
1523 ; XOPAVX1-NEXT: vmovdqa 16(%rsi), %xmm5
1482 ; XOPAVX1-NEXT: vmovdqa (%rsi), %xmm1
1483 ; XOPAVX1-NEXT: vmovdqa 16(%rsi), %xmm2
15241484 ; XOPAVX1-NEXT: vmovdqa (%rdi), %xmm0
1525 ; XOPAVX1-NEXT: vmovdqa 16(%rdi), %xmm1
1526 ; XOPAVX1-NEXT: vpcomgtq %xmm5, %xmm1, %xmm6
1527 ; XOPAVX1-NEXT: vpcomgtq %xmm4, %xmm0, %xmm7
1528 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm8
1529 ; XOPAVX1-NEXT: vpcomltq %xmm5, %xmm1, %xmm5
1530 ; XOPAVX1-NEXT: vpcomltq %xmm4, %xmm0, %xmm4
1531 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm5, %ymm4, %ymm4
1532 ; XOPAVX1-NEXT: vblendvpd %ymm4, %ymm2, %ymm3, %ymm4
1533 ; XOPAVX1-NEXT: vblendvpd %ymm8, %ymm2, %ymm3, %ymm2
1534 ; XOPAVX1-NEXT: vpsubq %xmm4, %xmm2, %xmm3
1535 ; XOPAVX1-NEXT: vextractf128 $1, %ymm4, %xmm4
1536 ; XOPAVX1-NEXT: vextractf128 $1, %ymm2, %xmm2
1537 ; XOPAVX1-NEXT: vpsubq %xmm4, %xmm2, %xmm2
1485 ; XOPAVX1-NEXT: vmovdqa 16(%rdi), %xmm3
1486 ; XOPAVX1-NEXT: vpcomgtq %xmm2, %xmm3, %xmm4
1487 ; XOPAVX1-NEXT: vpcomgtq %xmm1, %xmm0, %xmm5
1488 ; XOPAVX1-NEXT: vpcomltq %xmm2, %xmm3, %xmm6
1489 ; XOPAVX1-NEXT: vpcomltq %xmm1, %xmm0, %xmm7
1490 ; XOPAVX1-NEXT: vblendvpd %xmm7, %xmm0, %xmm1, %xmm7
1491 ; XOPAVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm1
1492 ; XOPAVX1-NEXT: vpsubq %xmm7, %xmm1, %xmm1
1493 ; XOPAVX1-NEXT: vblendvpd %xmm6, %xmm3, %xmm2, %xmm6
1494 ; XOPAVX1-NEXT: vblendvpd %xmm4, %xmm3, %xmm2, %xmm2
1495 ; XOPAVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm2
15381496 ; XOPAVX1-NEXT: vpsrlq $1, %xmm2, %xmm2
1539 ; XOPAVX1-NEXT: vpsrlq $1, %xmm3, %xmm3
1497 ; XOPAVX1-NEXT: vpsrlq $1, %xmm1, %xmm1
15401498 ; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [1,1]
1541 ; XOPAVX1-NEXT: vpor %xmm8, %xmm7, %xmm5
1499 ; XOPAVX1-NEXT: vpor %xmm8, %xmm5, %xmm5
15421500 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm7
1543 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm7
1544 ; XOPAVX1-NEXT: vpsrlq $32, %xmm3, %xmm4
1545 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm4, %xmm4
1546 ; XOPAVX1-NEXT: vpaddq %xmm4, %xmm7, %xmm4
1547 ; XOPAVX1-NEXT: vpsllq $32, %xmm4, %xmm4
1548 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm3, %xmm3
1549 ; XOPAVX1-NEXT: vpor %xmm8, %xmm6, %xmm5
1550 ; XOPAVX1-NEXT: vpsrlq $32, %xmm5, %xmm6
1551 ; XOPAVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm6
1501 ; XOPAVX1-NEXT: vpmuludq %xmm7, %xmm1, %xmm7
1502 ; XOPAVX1-NEXT: vpsrlq $32, %xmm1, %xmm6
1503 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm6, %xmm6
1504 ; XOPAVX1-NEXT: vpaddq %xmm6, %xmm7, %xmm6
1505 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
1506 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm1
1507 ; XOPAVX1-NEXT: vpor %xmm8, %xmm4, %xmm4
1508 ; XOPAVX1-NEXT: vpsrlq $32, %xmm4, %xmm5
1509 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm5
15521510 ; XOPAVX1-NEXT: vpsrlq $32, %xmm2, %xmm7
1553 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm7
1554 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm6, %xmm6
1555 ; XOPAVX1-NEXT: vpsllq $32, %xmm6, %xmm6
1556 ; XOPAVX1-NEXT: vpmuludq %xmm5, %xmm2, %xmm2
1557 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm6, %xmm1
1558 ; XOPAVX1-NEXT: vpaddq %xmm1, %xmm2, %xmm1
1559 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0
1560 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm3, %xmm0
1561 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1511 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm7, %xmm7
1512 ; XOPAVX1-NEXT: vpaddq %xmm7, %xmm5, %xmm5
1513 ; XOPAVX1-NEXT: vpsllq $32, %xmm5, %xmm5
1514 ; XOPAVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm2
1515 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm5, %xmm3
1516 ; XOPAVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1517 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm6, %xmm0
1518 ; XOPAVX1-NEXT: vpaddq %xmm0, %xmm1, %xmm0
1519 ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
15621520 ; XOPAVX1-NEXT: retq
15631521 ;
15641522 ; AVX512F-LABEL: vec256_i64_signed_mem_mem:
17231723 ;
17241724 ; AVX1-LABEL: psubus_8i64_max:
17251725 ; AVX1: # %bb.0: # %vector.ph
1726 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
1727 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
1728 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
1729 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854841343,9223372036854841343]
1730 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
1731 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm6
1732 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm6
1733 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm6, %ymm3
1734 ; AVX1-NEXT: vmovapd {{.*#+}} ymm6 = [65535,65535,65535,65535]
1735 ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm6, %ymm2
1736 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm3
1737 ; AVX1-NEXT: vpackusdw %xmm3, %xmm2, %xmm2
1738 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1739 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
1740 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
1741 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm4
1742 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1743 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
1744 ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm6, %ymm1
1745 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1746 ; AVX1-NEXT: vpackusdw %xmm3, %xmm1, %xmm1
1726 ; AVX1-NEXT: vmovapd {{.*#+}} xmm3 = [65535,65535]
1727 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
1728 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
1729 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm6
1730 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [9223372036854841343,9223372036854841343]
1731 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1732 ; AVX1-NEXT: vblendvpd %xmm6, %xmm4, %xmm3, %xmm4
1733 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6
1734 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1735 ; AVX1-NEXT: vblendvpd %xmm6, %xmm2, %xmm3, %xmm2
1736 ; AVX1-NEXT: vpackusdw %xmm4, %xmm2, %xmm2
1737 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1738 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm6
1739 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1740 ; AVX1-NEXT: vblendvpd %xmm6, %xmm4, %xmm3, %xmm4
1741 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5
1742 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
1743 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
1744 ; AVX1-NEXT: vpackusdw %xmm4, %xmm1, %xmm1
17471745 ; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1
17481746 ; AVX1-NEXT: vpsubusw %xmm1, %xmm0, %xmm0
17491747 ; AVX1-NEXT: vzeroupper
11661166 ; AVX1: # %bb.0:
11671167 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
11681168 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1169 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1170 ; AVX1-NEXT: vxorps %xmm4, %xmm4, %xmm4
1171 ; AVX1-NEXT: vcmptrueps %ymm4, %ymm4, %ymm4
1172 ; AVX1-NEXT: vxorps %ymm4, %ymm1, %ymm4
1173 ; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm5
1174 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm5
1175 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm5, %xmm2
1176 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
1177 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm3
1178 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
1179 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1180 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm4, %ymm0
1181 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1182 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1183 ; AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
1169 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm4
1170 ; AVX1-NEXT: vxorps %xmm5, %xmm5, %xmm5
1171 ; AVX1-NEXT: vcmptrueps %ymm5, %ymm5, %ymm5
1172 ; AVX1-NEXT: vxorps %ymm5, %ymm1, %ymm5
1173 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm6
1174 ; AVX1-NEXT: vpxor %xmm3, %xmm6, %xmm7
1175 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm7, %xmm4
1176 ; AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm6, %xmm2
1177 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1178 ; AVX1-NEXT: vpaddq %xmm4, %xmm2, %xmm2
1179 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
1180 ; AVX1-NEXT: vxorps %xmm3, %xmm5, %xmm3
1181 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1182 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm5, %xmm0
11841183 ; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0
11851184 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
11861185 ; AVX1-NEXT: retq
13881387 ; AVX1: # %bb.0:
13891388 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
13901389 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
1391 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
1392 ; AVX1-NEXT: vxorps %xmm6, %xmm6, %xmm6
1393 ; AVX1-NEXT: vcmptrueps %ymm6, %ymm6, %ymm8
1394 ; AVX1-NEXT: vxorps %ymm8, %ymm2, %ymm7
1395 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm6
1396 ; AVX1-NEXT: vpxor %xmm4, %xmm6, %xmm6
1397 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm9
1398 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm6
1399 ; AVX1-NEXT: vxorps %xmm4, %xmm7, %xmm5
1400 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
1401 ; AVX1-NEXT: vinsertf128 $1, %xmm9, %ymm5, %ymm5
1402 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm7, %ymm0
1403 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
1390 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm9
1391 ; AVX1-NEXT: vxorps %xmm7, %xmm7, %xmm7
1392 ; AVX1-NEXT: vcmptrueps %ymm7, %ymm7, %ymm10
1393 ; AVX1-NEXT: vxorps %ymm10, %ymm2, %ymm8
1394 ; AVX1-NEXT: vextractf128 $1, %ymm8, %xmm6
1395 ; AVX1-NEXT: vpxor %xmm4, %xmm6, %xmm7
1396 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm7, %xmm7
1397 ; AVX1-NEXT: vblendvpd %xmm7, %xmm5, %xmm6, %xmm5
14041398 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
14051399 ; AVX1-NEXT: vpaddq %xmm6, %xmm5, %xmm5
1400 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm6
1401 ; AVX1-NEXT: vxorps %xmm4, %xmm8, %xmm7
1402 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1403 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm8, %xmm0
14061404 ; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm0
14071405 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm0, %ymm0
14081406 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1409 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
1410 ; AVX1-NEXT: vxorps %ymm8, %ymm3, %ymm5
1411 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm6
1412 ; AVX1-NEXT: vpxor %xmm4, %xmm6, %xmm6
1413 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm6, %xmm2
1414 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm6
1415 ; AVX1-NEXT: vxorps %xmm4, %xmm5, %xmm4
1416 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm4, %xmm4
1417 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
1418 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm5, %ymm1
1419 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1420 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
1421 ; AVX1-NEXT: vpaddq %xmm4, %xmm2, %xmm2
1407 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm8
1408 ; AVX1-NEXT: vxorps %ymm10, %ymm3, %ymm6
1409 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm7
1410 ; AVX1-NEXT: vpxor %xmm4, %xmm7, %xmm5
1411 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm5, %xmm5
1412 ; AVX1-NEXT: vblendvpd %xmm5, %xmm2, %xmm7, %xmm2
1413 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
1414 ; AVX1-NEXT: vpaddq %xmm5, %xmm2, %xmm2
1415 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm5
1416 ; AVX1-NEXT: vxorps %xmm4, %xmm6, %xmm4
1417 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm4
1418 ; AVX1-NEXT: vblendvpd %xmm4, %xmm1, %xmm6, %xmm1
14221419 ; AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm1
14231420 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
14241421 ; AVX1-NEXT: retq
11291129 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
11301130 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm4
11311131 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
1132 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm5
1133 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1134 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
1132 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm6
1133 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
1134 ; AVX1-NEXT: vblendvpd %xmm4, %xmm5, %xmm2, %xmm4
1135 ; AVX1-NEXT: vpsubq %xmm2, %xmm4, %xmm2
1136 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
11351137 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
1136 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
1137 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1138 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
1139 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1140 ; AVX1-NEXT: vpsubq %xmm2, %xmm3, %xmm2
1138 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1139 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
11411140 ; AVX1-NEXT: vpsubq %xmm1, %xmm0, %xmm0
11421141 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
11431142 ; AVX1-NEXT: retq
13421341 ; AVX1: # %bb.0:
13431342 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
13441343 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
1345 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm6
1344 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm8
13461345 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
1347 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
1348 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm8
1349 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
1350 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6
1351 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
1352 ; AVX1-NEXT: vinsertf128 $1, %xmm8, %ymm6, %ymm6
1353 ; AVX1-NEXT: vblendvpd %ymm6, %ymm0, %ymm2, %ymm0
1354 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1346 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm6
1347 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm6, %xmm6
1348 ; AVX1-NEXT: vblendvpd %xmm6, %xmm7, %xmm4, %xmm6
13551349 ; AVX1-NEXT: vpsubq %xmm4, %xmm6, %xmm4
1350 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6
1351 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
1352 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1353 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm2, %xmm0
13561354 ; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm0
13571355 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
13581356 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
13591357 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm4
13601358 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
1361 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
1362 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
1363 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
1359 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm7
1360 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm7, %xmm4
1361 ; AVX1-NEXT: vblendvpd %xmm4, %xmm6, %xmm2, %xmm4
1362 ; AVX1-NEXT: vpsubq %xmm2, %xmm4, %xmm2
1363 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4
13641364 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5
1365 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
1366 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1367 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
1368 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1369 ; AVX1-NEXT: vpsubq %xmm2, %xmm4, %xmm2
1365 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
1366 ; AVX1-NEXT: vblendvpd %xmm4, %xmm1, %xmm3, %xmm1
13701367 ; AVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm1
13711368 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
13721369 ; AVX1-NEXT: retq
148148 ; AVX1-LABEL: test_v4i64:
149149 ; AVX1: # %bb.0:
150150 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
151 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
152 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
153 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
154 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
151 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
152 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
155153 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
156154 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
157 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
155 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
158156 ; AVX1-NEXT: vmovq %xmm0, %rax
159157 ; AVX1-NEXT: vzeroupper
160158 ; AVX1-NEXT: retq
319317 ;
320318 ; AVX1-LABEL: test_v8i64:
321319 ; AVX1: # %bb.0:
322 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
323 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
324 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
325 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
326 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
327 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
328 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
329320 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
330 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
331 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
332 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
321 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
322 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
323 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
324 ; AVX1-NEXT: vblendvpd %xmm5, %xmm4, %xmm3, %xmm3
325 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
326 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm1
327 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
333328 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
334329 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
335 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
330 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
336331 ; AVX1-NEXT: vmovq %xmm0, %rax
337332 ; AVX1-NEXT: vzeroupper
338333 ; AVX1-NEXT: retq
610605 ;
611606 ; AVX1-LABEL: test_v16i64:
612607 ; AVX1: # %bb.0:
613 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
608 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm11
614609 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
615 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
616 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5
617 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
618 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
619 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
620 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
621 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
610 ; AVX1-NEXT: vpcmpgtq %xmm11, %xmm5, %xmm8
611 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7
612 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
613 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm9
614 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm10
622615 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
623 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
624 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
625 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
626 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
627 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
628 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
629 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
630 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
631 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
616 ; AVX1-NEXT: vblendvpd %xmm4, %xmm1, %xmm3, %xmm1
617 ; AVX1-NEXT: vblendvpd %xmm10, %xmm0, %xmm2, %xmm0
632618 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
633 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
634 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
635 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
619 ; AVX1-NEXT: vblendvpd %xmm9, %xmm6, %xmm7, %xmm3
620 ; AVX1-NEXT: vblendvpd %xmm8, %xmm5, %xmm11, %xmm4
621 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
622 ; AVX1-NEXT: vblendvpd %xmm5, %xmm4, %xmm3, %xmm3
623 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
624 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm1
625 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
636626 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
637627 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
638 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
628 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
639629 ; AVX1-NEXT: vmovq %xmm0, %rax
640630 ; AVX1-NEXT: vzeroupper
641631 ; AVX1-NEXT: retq
148148 ; AVX1-LABEL: test_v4i64:
149149 ; AVX1: # %bb.0:
150150 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
151 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
152 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
153 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
154 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
151 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
152 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
155153 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
156154 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
157 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
155 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
158156 ; AVX1-NEXT: vmovq %xmm0, %rax
159157 ; AVX1-NEXT: vzeroupper
160158 ; AVX1-NEXT: retq
319317 ;
320318 ; AVX1-LABEL: test_v8i64:
321319 ; AVX1: # %bb.0:
322 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
323 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
324 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
325 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
326 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
327 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
328 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
329320 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
330 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
331 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
332 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
321 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
322 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
323 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
324 ; AVX1-NEXT: vblendvpd %xmm5, %xmm4, %xmm3, %xmm3
325 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
326 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm1
327 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
333328 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
334329 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
335 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
330 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
336331 ; AVX1-NEXT: vmovq %xmm0, %rax
337332 ; AVX1-NEXT: vzeroupper
338333 ; AVX1-NEXT: retq
610605 ;
611606 ; AVX1-LABEL: test_v16i64:
612607 ; AVX1: # %bb.0:
613 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
608 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm11
614609 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
615 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
616 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5
617 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
618 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
619 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
620 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
621 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
610 ; AVX1-NEXT: vpcmpgtq %xmm11, %xmm5, %xmm8
611 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7
612 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
613 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm9
614 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm10
622615 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
623 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
624 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
625 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
626 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
627 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
628 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
629 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
630 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
631 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
616 ; AVX1-NEXT: vblendvpd %xmm4, %xmm1, %xmm3, %xmm1
617 ; AVX1-NEXT: vblendvpd %xmm10, %xmm0, %xmm2, %xmm0
632618 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
633 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
634 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
635 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
619 ; AVX1-NEXT: vblendvpd %xmm9, %xmm6, %xmm7, %xmm3
620 ; AVX1-NEXT: vblendvpd %xmm8, %xmm5, %xmm11, %xmm4
621 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm5
622 ; AVX1-NEXT: vblendvpd %xmm5, %xmm4, %xmm3, %xmm3
623 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
624 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm1
625 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
636626 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
637627 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
638 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
628 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
639629 ; AVX1-NEXT: vmovq %xmm0, %rax
640630 ; AVX1-NEXT: vzeroupper
641631 ; AVX1-NEXT: retq
147147 ; AVX1-LABEL: test_v4i64:
148148 ; AVX1: # %bb.0:
149149 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
150 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
151 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
152 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
153 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
150 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
151 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
154152 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
155153 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
156 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
154 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
157155 ; AVX1-NEXT: vmovq %xmm0, %rax
158156 ; AVX1-NEXT: vzeroupper
159157 ; AVX1-NEXT: retq
320318 ; AVX1: # %bb.0:
321319 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
322320 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
323 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
324 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
325 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
326 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
327 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
321 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
322 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm5
323 ; AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm0
324 ; AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm3, %xmm1
328325 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
329 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
330 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
331 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
326 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
332327 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
333328 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
334 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
329 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
335330 ; AVX1-NEXT: vmovq %xmm0, %rax
336331 ; AVX1-NEXT: vzeroupper
337332 ; AVX1-NEXT: retq
609604 ;
610605 ; AVX1-LABEL: test_v16i64:
611606 ; AVX1: # %bb.0:
612 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
613 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
614 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
615 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
616 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
617 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
618 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
607 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm8
608 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm9
609 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm11
610 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7
611 ; AVX1-NEXT: vpcmpgtq %xmm11, %xmm7, %xmm10
612 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
619613 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
620 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
621 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm4
622 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
623 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
624 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
625 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
626 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
627 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
628 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
629 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
630 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
614 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm6
615 ; AVX1-NEXT: vblendvpd %xmm6, %xmm5, %xmm4, %xmm4
616 ; AVX1-NEXT: vblendvpd %xmm10, %xmm11, %xmm7, %xmm5
617 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm6
618 ; AVX1-NEXT: vblendvpd %xmm9, %xmm0, %xmm2, %xmm0
619 ; AVX1-NEXT: vblendvpd %xmm8, %xmm1, %xmm3, %xmm1
631620 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
632 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
633 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
634 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
621 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
622 ; AVX1-NEXT: vblendvpd %xmm6, %xmm4, %xmm5, %xmm1
623 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
624 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
635625 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
636626 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
637 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
627 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
638628 ; AVX1-NEXT: vmovq %xmm0, %rax
639629 ; AVX1-NEXT: vzeroupper
640630 ; AVX1-NEXT: retq
147147 ; AVX1-LABEL: test_v4i64:
148148 ; AVX1: # %bb.0:
149149 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
150 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
151 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
152 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
153 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
150 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
151 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
154152 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
155153 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
156 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
154 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
157155 ; AVX1-NEXT: vmovq %xmm0, %rax
158156 ; AVX1-NEXT: vzeroupper
159157 ; AVX1-NEXT: retq
320318 ; AVX1: # %bb.0:
321319 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
322320 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
323 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
324 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
325 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
326 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
327 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
321 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm4
322 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm5
323 ; AVX1-NEXT: vblendvpd %xmm5, %xmm0, %xmm1, %xmm0
324 ; AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm3, %xmm1
328325 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
329 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
330 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
331 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
326 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
332327 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
333328 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
334 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
329 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
335330 ; AVX1-NEXT: vmovq %xmm0, %rax
336331 ; AVX1-NEXT: vzeroupper
337332 ; AVX1-NEXT: retq
609604 ;
610605 ; AVX1-LABEL: test_v16i64:
611606 ; AVX1: # %bb.0:
612 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
613 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
614 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
615 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
616 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
617 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
618 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
607 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm8
608 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm9
609 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm11
610 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7
611 ; AVX1-NEXT: vpcmpgtq %xmm11, %xmm7, %xmm10
612 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
619613 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
620 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
621 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm4
622 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
623 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
624 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
625 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
626 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
627 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
628 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
629 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
630 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
614 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm4, %xmm6
615 ; AVX1-NEXT: vblendvpd %xmm6, %xmm5, %xmm4, %xmm4
616 ; AVX1-NEXT: vblendvpd %xmm10, %xmm11, %xmm7, %xmm5
617 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm6
618 ; AVX1-NEXT: vblendvpd %xmm9, %xmm0, %xmm2, %xmm0
619 ; AVX1-NEXT: vblendvpd %xmm8, %xmm1, %xmm3, %xmm1
631620 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
632 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
633 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
634 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
621 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
622 ; AVX1-NEXT: vblendvpd %xmm6, %xmm4, %xmm5, %xmm1
623 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
624 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
635625 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
636626 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
637 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
627 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
638628 ; AVX1-NEXT: vmovq %xmm0, %rax
639629 ; AVX1-NEXT: vzeroupper
640630 ; AVX1-NEXT: retq
154154 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
155155 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
156156 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm4
157 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm4
158 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
159 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
160 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
157 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
158 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
161159 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
162160 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
163161 ; AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
164162 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
165 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
163 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
166164 ; AVX1-NEXT: vmovq %xmm0, %rax
167165 ; AVX1-NEXT: vzeroupper
168166 ; AVX1-NEXT: retq
332330 ;
333331 ; AVX1-LABEL: test_v8i64:
334332 ; AVX1: # %bb.0:
335 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
336 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
337 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
338 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
339 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
340 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
341 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
342 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
343 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
344 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
345 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
346 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
347 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm2
348 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm4
349 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm4
350 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm2
351 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
352 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
333 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
334 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
335 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm4
336 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
337 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
338 ; AVX1-NEXT: vpxor %xmm2, %xmm4, %xmm5
339 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
340 ; AVX1-NEXT: vpxor %xmm2, %xmm6, %xmm7
341 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
342 ; AVX1-NEXT: vblendvpd %xmm5, %xmm6, %xmm4, %xmm4
343 ; AVX1-NEXT: vxorpd %xmm2, %xmm4, %xmm5
344 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
345 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm1
346 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1
347 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm4, %xmm0
353348 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
354 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
355 ; AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
356 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
357 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
349 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
350 ; AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
351 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
352 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
358353 ; AVX1-NEXT: vmovq %xmm0, %rax
359354 ; AVX1-NEXT: vzeroupper
360355 ; AVX1-NEXT: retq
639634 ;
640635 ; AVX1-LABEL: test_v16i64:
641636 ; AVX1: # %bb.0:
642 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
637 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm8
643638 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
644 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
645 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
646 ; AVX1-NEXT: vpxor %xmm4, %xmm6, %xmm6
647 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
639 ; AVX1-NEXT: vpxor %xmm4, %xmm8, %xmm6
640 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm10
641 ; AVX1-NEXT: vpxor %xmm4, %xmm10, %xmm5
642 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm9
643 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm11
644 ; AVX1-NEXT: vpxor %xmm4, %xmm11, %xmm5
645 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7
646 ; AVX1-NEXT: vpxor %xmm4, %xmm7, %xmm6
647 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm12
648648 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm6
649 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm7
650 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
651 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
652 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
653 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
654 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
655 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
656 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
657 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm5, %xmm2
658 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm5
659 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm6
660 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
661 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm5, %ymm2
662 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
663 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
664 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
665 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
666 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
667 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
649 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm5
650 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm13
651 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm6
652 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm5
653 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
654 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
668655 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm3
669 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm5
670 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
671 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
672 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
673 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
674 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm2
675 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm3
676 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm3
677 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm2
678 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
679 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
656 ; AVX1-NEXT: vblendvpd %xmm13, %xmm0, %xmm2, %xmm0
657 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
658 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
659 ; AVX1-NEXT: vblendvpd %xmm12, %xmm7, %xmm11, %xmm3
660 ; AVX1-NEXT: vxorpd %xmm4, %xmm3, %xmm5
661 ; AVX1-NEXT: vblendvpd %xmm9, %xmm10, %xmm8, %xmm6
662 ; AVX1-NEXT: vxorpd %xmm4, %xmm6, %xmm7
663 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
664 ; AVX1-NEXT: vblendvpd %xmm5, %xmm6, %xmm3, %xmm3
665 ; AVX1-NEXT: vxorpd %xmm4, %xmm3, %xmm5
666 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
667 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm1
668 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1
669 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
680670 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
681671 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
682672 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm3
683673 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
684 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
674 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
685675 ; AVX1-NEXT: vmovq %xmm0, %rax
686676 ; AVX1-NEXT: vzeroupper
687677 ; AVX1-NEXT: retq
154154 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
155155 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
156156 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm4
157 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm4
158 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm3, %xmm3
159 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
160 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
157 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
158 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
161159 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
162160 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
163161 ; AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
164162 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
165 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
163 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
166164 ; AVX1-NEXT: vmovq %xmm0, %rax
167165 ; AVX1-NEXT: vzeroupper
168166 ; AVX1-NEXT: retq
332330 ;
333331 ; AVX1-LABEL: test_v8i64:
334332 ; AVX1: # %bb.0:
335 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
336 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
337 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
338 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
339 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
340 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
341 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
342 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
343 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
344 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
345 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
346 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
347 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm2
348 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm4
349 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm4
350 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm2
351 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
352 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
333 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
334 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
335 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm4
336 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
337 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
338 ; AVX1-NEXT: vpxor %xmm2, %xmm4, %xmm5
339 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
340 ; AVX1-NEXT: vpxor %xmm2, %xmm6, %xmm7
341 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
342 ; AVX1-NEXT: vblendvpd %xmm5, %xmm6, %xmm4, %xmm4
343 ; AVX1-NEXT: vxorpd %xmm2, %xmm4, %xmm5
344 ; AVX1-NEXT: vblendvpd %xmm3, %xmm0, %xmm1, %xmm0
345 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm1
346 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1
347 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm4, %xmm0
353348 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
354 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
355 ; AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
356 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
357 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
349 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
350 ; AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
351 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
352 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
358353 ; AVX1-NEXT: vmovq %xmm0, %rax
359354 ; AVX1-NEXT: vzeroupper
360355 ; AVX1-NEXT: retq
639634 ;
640635 ; AVX1-LABEL: test_v16i64:
641636 ; AVX1: # %bb.0:
642 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
637 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm8
643638 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
644 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
645 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
646 ; AVX1-NEXT: vpxor %xmm4, %xmm6, %xmm6
647 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
639 ; AVX1-NEXT: vpxor %xmm4, %xmm8, %xmm6
640 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm10
641 ; AVX1-NEXT: vpxor %xmm4, %xmm10, %xmm5
642 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm9
643 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm11
644 ; AVX1-NEXT: vpxor %xmm4, %xmm11, %xmm5
645 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm7
646 ; AVX1-NEXT: vpxor %xmm4, %xmm7, %xmm6
647 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm12
648648 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm6
649 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm7
650 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
651 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
652 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
653 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
654 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
655 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
656 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
657 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm5, %xmm2
658 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm5
659 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm6
660 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
661 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm5, %ymm2
662 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
663 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
664 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
665 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
666 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
667 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
649 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm5
650 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm13
651 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm6
652 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm5
653 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm5, %xmm5
654 ; AVX1-NEXT: vblendvpd %xmm5, %xmm1, %xmm3, %xmm1
668655 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm3
669 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm5
670 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
671 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
672 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
673 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
674 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm2
675 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm3
676 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm3
677 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm2
678 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
679 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
656 ; AVX1-NEXT: vblendvpd %xmm13, %xmm0, %xmm2, %xmm0
657 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
658 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
659 ; AVX1-NEXT: vblendvpd %xmm12, %xmm7, %xmm11, %xmm3
660 ; AVX1-NEXT: vxorpd %xmm4, %xmm3, %xmm5
661 ; AVX1-NEXT: vblendvpd %xmm9, %xmm10, %xmm8, %xmm6
662 ; AVX1-NEXT: vxorpd %xmm4, %xmm6, %xmm7
663 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
664 ; AVX1-NEXT: vblendvpd %xmm5, %xmm6, %xmm3, %xmm3
665 ; AVX1-NEXT: vxorpd %xmm4, %xmm3, %xmm5
666 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
667 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm1
668 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm1, %xmm1
669 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm3, %xmm0
680670 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
681671 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
682672 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm3
683673 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
684 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
674 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
685675 ; AVX1-NEXT: vmovq %xmm0, %rax
686676 ; AVX1-NEXT: vzeroupper
687677 ; AVX1-NEXT: retq
149149 ;
150150 ; AVX1-LABEL: test_v4i64:
151151 ; AVX1: # %bb.0:
152 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
153 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
154 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
155 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm4
156 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
157 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
158 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
159 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
160 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
161 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
162 ; AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
163 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
164 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
152 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
153 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm2
154 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
155 ; AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm4
156 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
157 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm3, %xmm0
158 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[2,3,0,1]
159 ; AVX1-NEXT: vxorpd %xmm1, %xmm0, %xmm3
160 ; AVX1-NEXT: vxorpd %xmm1, %xmm2, %xmm1
161 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1
162 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
165163 ; AVX1-NEXT: vmovq %xmm0, %rax
166164 ; AVX1-NEXT: vzeroupper
167165 ; AVX1-NEXT: retq
333331 ; AVX1: # %bb.0:
334332 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
335333 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
336 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
337 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
338 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
339 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
340 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
341 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
342 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
343 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
344 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
345 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
346 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
347 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
348 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
349 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
350 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm2, %ymm2
351 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
334 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm4
335 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
336 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm6
337 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
338 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm6
339 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm7
340 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
341 ; AVX1-NEXT: vblendvpd %xmm6, %xmm0, %xmm1, %xmm0
342 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm1
343 ; AVX1-NEXT: vblendvpd %xmm4, %xmm2, %xmm5, %xmm2
344 ; AVX1-NEXT: vxorpd %xmm3, %xmm2, %xmm4
345 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm4, %xmm1
346 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
352347 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
353348 ; AVX1-NEXT: vxorpd %xmm3, %xmm0, %xmm2
354349 ; AVX1-NEXT: vxorpd %xmm3, %xmm1, %xmm3
355350 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
356 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
351 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
357352 ; AVX1-NEXT: vmovq %xmm0, %rax
358353 ; AVX1-NEXT: vzeroupper
359354 ; AVX1-NEXT: retq
638633 ;
639634 ; AVX1-LABEL: test_v16i64:
640635 ; AVX1: # %bb.0:
641 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
642636 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [9223372036854775808,9223372036854775808]
643 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
644 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
645 ; AVX1-NEXT: vpxor %xmm4, %xmm6, %xmm6
646 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
647 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm6
648 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm7
649 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
650 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
651 ; AVX1-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
652 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
653 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
654 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
655 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm5
656 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
657 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm5
658 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm6
659 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
660 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3
661 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
662 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
663 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
664 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
665 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
637 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm5
638 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm6
639 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm8
640 ; AVX1-NEXT: vpxor %xmm4, %xmm0, %xmm6
641 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm7
642 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm9
643 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm12
644 ; AVX1-NEXT: vpxor %xmm4, %xmm12, %xmm10
645 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm13
646 ; AVX1-NEXT: vpxor %xmm4, %xmm13, %xmm5
647 ; AVX1-NEXT: vpcmpgtq %xmm10, %xmm5, %xmm10
648 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
649 ; AVX1-NEXT: vpxor %xmm4, %xmm5, %xmm11
650 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
651 ; AVX1-NEXT: vpxor %xmm4, %xmm7, %xmm6
652 ; AVX1-NEXT: vpcmpgtq %xmm11, %xmm6, %xmm6
653 ; AVX1-NEXT: vblendvpd %xmm6, %xmm5, %xmm7, %xmm5
654 ; AVX1-NEXT: vxorpd %xmm4, %xmm5, %xmm11
655 ; AVX1-NEXT: vblendvpd %xmm10, %xmm12, %xmm13, %xmm7
656 ; AVX1-NEXT: vxorpd %xmm4, %xmm7, %xmm6
657 ; AVX1-NEXT: vpcmpgtq %xmm11, %xmm6, %xmm6
658 ; AVX1-NEXT: vblendvpd %xmm9, %xmm0, %xmm2, %xmm0
659 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
660 ; AVX1-NEXT: vblendvpd %xmm8, %xmm1, %xmm3, %xmm1
661 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm3
666662 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
667 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm3
668 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm5
669 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
670 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
671 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
672 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
673 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
674 ; AVX1-NEXT: vpxor %xmm4, %xmm1, %xmm3
675 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
676 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm0, %xmm3
677 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
678 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
663 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
664 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm1
665 ; AVX1-NEXT: vblendvpd %xmm6, %xmm5, %xmm7, %xmm2
666 ; AVX1-NEXT: vxorpd %xmm4, %xmm2, %xmm3
667 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm1
668 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
679669 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
680670 ; AVX1-NEXT: vxorpd %xmm4, %xmm0, %xmm2
681671 ; AVX1-NEXT: vxorpd %xmm4, %xmm1, %xmm3
682672 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
683 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
673 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
684674 ; AVX1-NEXT: vmovq %xmm0, %rax
685675 ; AVX1-NEXT: vzeroupper
686676 ; AVX1-NEXT: retq
149149 ;
150150 ; AVX1-LABEL: test_v4i64:
151151 ; AVX1: # %bb.0:
152 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
153 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
154 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
155 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm4
156 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm4, %xmm3
157 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm0, %xmm4
158 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
159 ; AVX1-NEXT: vblendvpd %ymm3, %ymm0, %ymm1, %ymm0
160 ; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,0,1]
161 ; AVX1-NEXT: vxorpd %xmm2, %xmm0, %xmm3
162 ; AVX1-NEXT: vxorpd %xmm2, %xmm1, %xmm2
163 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
164 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
152 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [9223372036854775808,9223372036854775808]
153 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm2
154 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
155 ; AVX1-NEXT: vpxor %xmm1, %xmm3, %xmm4
156 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
157 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm3, %xmm0
158 ; AVX1-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[2,3,0,1]
159 ; AVX1-NEXT: vxorpd %xmm1, %xmm0, %xmm3
160 ; AVX1-NEXT: vxorpd %xmm1, %xmm2, %xmm1
161 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm1
162 ; AVX1-NEXT: vblendvpd %xmm1, %xmm0, %xmm2, %xmm0
165163 ; AVX1-NEXT: vmovq %xmm0, %rax
166164 ; AVX1-NEXT: vzeroupper
167165 ; AVX1-NEXT: retq