llvm.org GIT mirror llvm / c4a28d7
[MIR] Add simple PRE pass to MachineCSE This is the second part of the commit fixing PR38917 (hoisting partitially redundant machine instruction). Most of PRE (partitial redundancy elimination) and CSE work is done on LLVM IR, but some of redundancy arises during DAG legalization. Machine CSE is not enough to deal with it. This simple PRE implementation works a little bit intricately: it passes before CSE, looking for partitial redundancy and transforming it to fully redundancy, anticipating that the next CSE step will eliminate this created redundancy. If CSE doesn't eliminate this, than created instruction will remain dead and eliminated later by Remove Dead Machine Instructions pass. The third part of the commit is supposed to refactor MachineCSE, to make it more clear and to merge MachinePRE with MachineCSE, so one need no rely on further Remove Dead pass to clear instrs not eliminated by CSE. First step: https://reviews.llvm.org/D54839 Fixes llvm.org/PR38917 This is fixed recommit of r361356 after PowerPC64 multistage build failure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362901 91177308-0d34-0410-b5e6-96231b3b80d8 Anton Afanasyev 4 months ago
8 changed file(s) with 1538 addition(s) and 2105 deletion(s). Raw diff Collapse all Expand all
1818 #include "llvm/ADT/SmallVector.h"
1919 #include "llvm/ADT/Statistic.h"
2020 #include "llvm/Analysis/AliasAnalysis.h"
21 #include "llvm/Analysis/CFG.h"
2122 #include "llvm/CodeGen/MachineBasicBlock.h"
2223 #include "llvm/CodeGen/MachineDominators.h"
2324 #include "llvm/CodeGen/MachineFunction.h"
4849
4950 STATISTIC(NumCoalesces, "Number of copies coalesced");
5051 STATISTIC(NumCSEs, "Number of common subexpression eliminated");
52 STATISTIC(NumPREs, "Number of partial redundant expression"
53 " transformed to fully redundant");
5154 STATISTIC(NumPhysCSEs,
5255 "Number of physreg referencing common subexpr eliminated");
5356 STATISTIC(NumCrossBBCSEs,
8386
8487 void releaseMemory() override {
8588 ScopeMap.clear();
89 PREMap.clear();
8690 Exps.clear();
8791 }
8892
97101
98102 unsigned LookAheadLimit = 0;
99103 DenseMap ScopeMap;
104 DenseMap
105 PREMap;
100106 ScopedHTType VNT;
101107 SmallVector Exps;
102108 unsigned CurrVN = 0;
115121 PhysDefVector &PhysDefs, bool &NonLocal) const;
116122 bool isCSECandidate(MachineInstr *MI);
117123 bool isProfitableToCSE(unsigned CSReg, unsigned Reg,
118 MachineInstr *CSMI, MachineInstr *MI);
124 MachineBasicBlock *CSBB, MachineInstr *MI);
119125 void EnterScope(MachineBasicBlock *MBB);
120126 void ExitScope(MachineBasicBlock *MBB);
121 bool ProcessBlock(MachineBasicBlock *MBB);
127 bool ProcessBlockCSE(MachineBasicBlock *MBB);
122128 void ExitScopeIfDone(MachineDomTreeNode *Node,
123129 DenseMap &OpenChildren);
124130 bool PerformCSE(MachineDomTreeNode *Node);
131
132 bool isPRECandidate(MachineInstr *MI);
133 bool ProcessBlockPRE(MachineDominatorTree *MDT, MachineBasicBlock *MBB);
134 bool PerformSimplePRE(MachineDominatorTree *DT);
125135 };
126136
127137 } // end anonymous namespace
404414 }
405415
406416 /// isProfitableToCSE - Return true if it's profitable to eliminate MI with a
407 /// common expression that defines Reg.
417 /// common expression that defines Reg. CSBB is basic block where CSReg is
418 /// defined.
408419 bool MachineCSE::isProfitableToCSE(unsigned CSReg, unsigned Reg,
409 MachineInstr *CSMI, MachineInstr *MI) {
420 MachineBasicBlock *CSBB, MachineInstr *MI) {
410421 // FIXME: Heuristics that works around the lack the live range splitting.
411422
412423 // If CSReg is used at all uses of Reg, CSE should not increase register
432443 // an immediate predecessor. We don't want to increase register pressure and
433444 // end up causing other computation to be spilled.
434445 if (TII->isAsCheapAsAMove(*MI)) {
435 MachineBasicBlock *CSBB = CSMI->getParent();
436446 MachineBasicBlock *BB = MI->getParent();
437447 if (CSBB != BB && !CSBB->isSuccessor(BB))
438448 return false;
487497 ScopeMap.erase(SI);
488498 }
489499
490 bool MachineCSE::ProcessBlock(MachineBasicBlock *MBB) {
500 bool MachineCSE::ProcessBlockCSE(MachineBasicBlock *MBB) {
491501 bool Changed = false;
492502
493503 SmallVector, 8> CSEPairs;
597607 TargetRegisterInfo::isVirtualRegister(NewReg) &&
598608 "Do not CSE physical register defs!");
599609
600 if (!isProfitableToCSE(NewReg, OldReg, CSMI, MI)) {
610 if (!isProfitableToCSE(NewReg, OldReg, CSMI->getParent(), MI)) {
601611 LLVM_DEBUG(dbgs() << "*** Not profitable, avoid CSE!\n");
602612 DoCSE = false;
603613 break;
737747 for (MachineDomTreeNode *Node : Scopes) {
738748 MachineBasicBlock *MBB = Node->getBlock();
739749 EnterScope(MBB);
740 Changed |= ProcessBlock(MBB);
750 Changed |= ProcessBlockCSE(MBB);
741751 // If it's a leaf node, it's done. Traverse upwards to pop ancestors.
742752 ExitScopeIfDone(Node, OpenChildren);
743753 }
754
755 return Changed;
756 }
757
758 // We use stronger checks for PRE candidate rather than for CSE ones to embrace
759 // checks inside ProcessBlockCSE(), not only inside isCSECandidate(). This helps
760 // to exclude instrs created by PRE that won't be CSEed later.
761 bool MachineCSE::isPRECandidate(MachineInstr *MI) {
762 if (!isCSECandidate(MI) ||
763 MI->isNotDuplicable() ||
764 MI->mayLoad() ||
765 MI->isAsCheapAsAMove() ||
766 MI->getNumDefs() != 1 ||
767 MI->getNumExplicitDefs() != 1)
768 return false;
769
770 for (auto def : MI->defs())
771 if (!TRI->isVirtualRegister(def.getReg()))
772 return false;
773
774 for (auto use : MI->uses())
775 if (use.isReg() && !TRI->isVirtualRegister(use.getReg()))
776 return false;
777
778 return true;
779 }
780
781 bool MachineCSE::ProcessBlockPRE(MachineDominatorTree *DT,
782 MachineBasicBlock *MBB) {
783 bool Changed = false;
784 for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end(); I != E;) {
785 MachineInstr *MI = &*I;
786 ++I;
787
788 if (!isPRECandidate(MI))
789 continue;
790
791 if (!PREMap.count(MI)) {
792 PREMap[MI] = MBB;
793 continue;
794 }
795
796 auto MBB1 = PREMap[MI];
797 assert(
798 !DT->properlyDominates(MBB, MBB1) &&
799 "MBB cannot properly dominate MBB1 while DFS through dominators tree!");
800 auto CMBB = DT->findNearestCommonDominator(MBB, MBB1);
801
802 // Two instrs are partial redundant if their basic blocks are reachable
803 // from one to another but one doesn't dominate another.
804 if (CMBB != MBB1) {
805 auto BB = MBB->getBasicBlock(), BB1 = MBB1->getBasicBlock();
806 if (BB != nullptr && BB1 != nullptr &&
807 (isPotentiallyReachable(BB1, BB) ||
808 isPotentiallyReachable(BB, BB1))) {
809
810 assert(MI->getOperand(0).isDef() &&
811 "First operand of instr with one explicit def must be this def");
812 unsigned VReg = MI->getOperand(0).getReg();
813 unsigned NewReg = MRI->cloneVirtualRegister(VReg);
814 if (!isProfitableToCSE(NewReg, VReg, CMBB, MI))
815 continue;
816 MachineInstr &NewMI =
817 TII->duplicate(*CMBB, CMBB->getFirstTerminator(), *MI);
818 NewMI.getOperand(0).setReg(NewReg);
819
820 PREMap[MI] = CMBB;
821 ++NumPREs;
822 Changed = true;
823 }
824 }
825 }
826 return Changed;
827 }
828
829 // This simple PRE (partial redundancy elimination) pass doesn't actually
830 // eliminate partial redundancy but transforms it to full redundancy,
831 // anticipating that the next CSE step will eliminate this created redundancy.
832 // If CSE doesn't eliminate this, than created instruction will remain dead
833 // and eliminated later by Remove Dead Machine Instructions pass.
834 bool MachineCSE::PerformSimplePRE(MachineDominatorTree *DT) {
835 SmallVector BBs;
836
837 PREMap.clear();
838 bool Changed = false;
839 BBs.push_back(DT->getRootNode());
840 do {
841 auto Node = BBs.pop_back_val();
842 const std::vector &Children = Node->getChildren();
843 for (MachineDomTreeNode *Child : Children)
844 BBs.push_back(Child);
845
846 MachineBasicBlock *MBB = Node->getBlock();
847 Changed |= ProcessBlockPRE(DT, MBB);
848
849 } while (!BBs.empty());
744850
745851 return Changed;
746852 }
755861 AA = &getAnalysis().getAAResults();
756862 DT = &getAnalysis();
757863 LookAheadLimit = TII->getMachineCSELookAheadLimit();
758 return PerformCSE(DT->getRootNode());
759 }
864 bool ChangedPRE, ChangedCSE;
865 ChangedPRE = PerformSimplePRE(DT);
866 ChangedCSE = PerformCSE(DT->getRootNode());
867 return ChangedPRE || ChangedCSE;
868 }
235235 ; NOGATHER-NEXT: vpinsrd $1, (%rax), %xmm2, %xmm2
236236 ; NOGATHER-NEXT: .LBB4_4: # %else2
237237 ; NOGATHER-NEXT: vpextrb $8, %xmm1, %eax
238 ; NOGATHER-NEXT: vextractf128 $1, %ymm0, %xmm0
238239 ; NOGATHER-NEXT: testb $1, %al
239240 ; NOGATHER-NEXT: je .LBB4_6
240241 ; NOGATHER-NEXT: # %bb.5: # %cond.load4
241 ; NOGATHER-NEXT: vextractf128 $1, %ymm0, %xmm3
242 ; NOGATHER-NEXT: vmovq %xmm3, %rax
242 ; NOGATHER-NEXT: vmovq %xmm0, %rax
243243 ; NOGATHER-NEXT: vpinsrd $2, (%rax), %xmm2, %xmm2
244244 ; NOGATHER-NEXT: .LBB4_6: # %else5
245245 ; NOGATHER-NEXT: vpextrb $12, %xmm1, %eax
246246 ; NOGATHER-NEXT: testb $1, %al
247247 ; NOGATHER-NEXT: je .LBB4_8
248248 ; NOGATHER-NEXT: # %bb.7: # %cond.load7
249 ; NOGATHER-NEXT: vextractf128 $1, %ymm0, %xmm0
250249 ; NOGATHER-NEXT: vpextrq $1, %xmm0, %rax
251250 ; NOGATHER-NEXT: vpinsrd $3, (%rax), %xmm2, %xmm2
252251 ; NOGATHER-NEXT: .LBB4_8: # %else8
294293 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
295294 ; NOGATHER-NEXT: .LBB5_4: # %else2
296295 ; NOGATHER-NEXT: vpextrb $8, %xmm1, %eax
296 ; NOGATHER-NEXT: vextractf128 $1, %ymm0, %xmm0
297297 ; NOGATHER-NEXT: testb $1, %al
298298 ; NOGATHER-NEXT: je .LBB5_6
299299 ; NOGATHER-NEXT: # %bb.5: # %cond.load4
300 ; NOGATHER-NEXT: vextractf128 $1, %ymm0, %xmm3
301 ; NOGATHER-NEXT: vmovq %xmm3, %rax
300 ; NOGATHER-NEXT: vmovq %xmm0, %rax
302301 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
303302 ; NOGATHER-NEXT: .LBB5_6: # %else5
304303 ; NOGATHER-NEXT: vpextrb $12, %xmm1, %eax
305304 ; NOGATHER-NEXT: testb $1, %al
306305 ; NOGATHER-NEXT: je .LBB5_8
307306 ; NOGATHER-NEXT: # %bb.7: # %cond.load7
308 ; NOGATHER-NEXT: vextractf128 $1, %ymm0, %xmm0
309307 ; NOGATHER-NEXT: vpextrq $1, %xmm0, %rax
310308 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
311309 ; NOGATHER-NEXT: .LBB5_8: # %else8
365363 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
366364 ; NOGATHER-NEXT: .LBB6_4: # %else2
367365 ; NOGATHER-NEXT: vpextrb $4, %xmm0, %eax
366 ; NOGATHER-NEXT: vextractf128 $1, %ymm3, %xmm3
368367 ; NOGATHER-NEXT: testb $1, %al
369368 ; NOGATHER-NEXT: je .LBB6_6
370369 ; NOGATHER-NEXT: # %bb.5: # %cond.load4
371 ; NOGATHER-NEXT: vextractf128 $1, %ymm3, %xmm4
372 ; NOGATHER-NEXT: vmovq %xmm4, %rax
370 ; NOGATHER-NEXT: vmovq %xmm3, %rax
373371 ; NOGATHER-NEXT: vpinsrd $2, (%rax), %xmm1, %xmm4
374372 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
375373 ; NOGATHER-NEXT: .LBB6_6: # %else5
377375 ; NOGATHER-NEXT: testb $1, %al
378376 ; NOGATHER-NEXT: je .LBB6_8
379377 ; NOGATHER-NEXT: # %bb.7: # %cond.load7
380 ; NOGATHER-NEXT: vextractf128 $1, %ymm3, %xmm3
381378 ; NOGATHER-NEXT: vpextrq $1, %xmm3, %rax
382379 ; NOGATHER-NEXT: vpinsrd $3, (%rax), %xmm1, %xmm3
383380 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
401398 ; NOGATHER-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
402399 ; NOGATHER-NEXT: .LBB6_12: # %else14
403400 ; NOGATHER-NEXT: vpextrb $12, %xmm0, %eax
401 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm2
404402 ; NOGATHER-NEXT: testb $1, %al
405403 ; NOGATHER-NEXT: je .LBB6_14
406404 ; NOGATHER-NEXT: # %bb.13: # %cond.load16
407 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm3
408 ; NOGATHER-NEXT: vmovq %xmm3, %rax
405 ; NOGATHER-NEXT: vmovq %xmm2, %rax
409406 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm3
410407 ; NOGATHER-NEXT: vpinsrd $2, (%rax), %xmm3, %xmm3
411408 ; NOGATHER-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
414411 ; NOGATHER-NEXT: testb $1, %al
415412 ; NOGATHER-NEXT: je .LBB6_16
416413 ; NOGATHER-NEXT: # %bb.15: # %cond.load19
417 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm0
418 ; NOGATHER-NEXT: vpextrq $1, %xmm0, %rax
414 ; NOGATHER-NEXT: vpextrq $1, %xmm2, %rax
419415 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm0
420416 ; NOGATHER-NEXT: vpinsrd $3, (%rax), %xmm0, %xmm0
421417 ; NOGATHER-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm1
476472 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
477473 ; NOGATHER-NEXT: .LBB7_4: # %else2
478474 ; NOGATHER-NEXT: vpextrb $4, %xmm0, %eax
475 ; NOGATHER-NEXT: vextractf128 $1, %ymm3, %xmm3
479476 ; NOGATHER-NEXT: testb $1, %al
480477 ; NOGATHER-NEXT: je .LBB7_6
481478 ; NOGATHER-NEXT: # %bb.5: # %cond.load4
482 ; NOGATHER-NEXT: vextractf128 $1, %ymm3, %xmm4
483 ; NOGATHER-NEXT: vmovq %xmm4, %rax
479 ; NOGATHER-NEXT: vmovq %xmm3, %rax
484480 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm4 = xmm1[0,1],mem[0],xmm1[3]
485481 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
486482 ; NOGATHER-NEXT: .LBB7_6: # %else5
488484 ; NOGATHER-NEXT: testb $1, %al
489485 ; NOGATHER-NEXT: je .LBB7_8
490486 ; NOGATHER-NEXT: # %bb.7: # %cond.load7
491 ; NOGATHER-NEXT: vextractf128 $1, %ymm3, %xmm3
492487 ; NOGATHER-NEXT: vpextrq $1, %xmm3, %rax
493488 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm3 = xmm1[0,1,2],mem[0]
494489 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
513508 ; NOGATHER-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
514509 ; NOGATHER-NEXT: .LBB7_12: # %else14
515510 ; NOGATHER-NEXT: vpextrb $12, %xmm0, %eax
511 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm2
516512 ; NOGATHER-NEXT: testb $1, %al
517513 ; NOGATHER-NEXT: je .LBB7_14
518514 ; NOGATHER-NEXT: # %bb.13: # %cond.load16
519 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm3
520 ; NOGATHER-NEXT: vmovq %xmm3, %rax
515 ; NOGATHER-NEXT: vmovq %xmm2, %rax
521516 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm3
522517 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]
523518 ; NOGATHER-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
526521 ; NOGATHER-NEXT: testb $1, %al
527522 ; NOGATHER-NEXT: je .LBB7_16
528523 ; NOGATHER-NEXT: # %bb.15: # %cond.load19
529 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm0
530 ; NOGATHER-NEXT: vpextrq $1, %xmm0, %rax
524 ; NOGATHER-NEXT: vpextrq $1, %xmm2, %rax
531525 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm0
532526 ; NOGATHER-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]
533527 ; NOGATHER-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm1
582576 ; NOGATHER-NEXT: vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
583577 ; NOGATHER-NEXT: .LBB8_4: # %else2
584578 ; NOGATHER-NEXT: vpextrb $8, %xmm0, %eax
579 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm2
585580 ; NOGATHER-NEXT: testb $1, %al
586581 ; NOGATHER-NEXT: je .LBB8_6
587582 ; NOGATHER-NEXT: # %bb.5: # %cond.load4
588 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm3
589 ; NOGATHER-NEXT: vmovq %xmm3, %rax
583 ; NOGATHER-NEXT: vmovq %xmm2, %rax
590584 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm3
591585 ; NOGATHER-NEXT: vpinsrq $0, (%rax), %xmm3, %xmm3
592586 ; NOGATHER-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
595589 ; NOGATHER-NEXT: testb $1, %al
596590 ; NOGATHER-NEXT: je .LBB8_8
597591 ; NOGATHER-NEXT: # %bb.7: # %cond.load7
598 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm0
599 ; NOGATHER-NEXT: vpextrq $1, %xmm0, %rax
592 ; NOGATHER-NEXT: vpextrq $1, %xmm2, %rax
600593 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm0
601594 ; NOGATHER-NEXT: vpinsrq $1, (%rax), %xmm0, %xmm0
602595 ; NOGATHER-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm1
651644 ; NOGATHER-NEXT: vblendpd {{.*#+}} ymm1 = ymm3[0,1],ymm1[2,3]
652645 ; NOGATHER-NEXT: .LBB9_4: # %else2
653646 ; NOGATHER-NEXT: vpextrb $8, %xmm0, %eax
647 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm2
654648 ; NOGATHER-NEXT: testb $1, %al
655649 ; NOGATHER-NEXT: je .LBB9_6
656650 ; NOGATHER-NEXT: # %bb.5: # %cond.load4
657 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm3
658 ; NOGATHER-NEXT: vmovq %xmm3, %rax
651 ; NOGATHER-NEXT: vmovq %xmm2, %rax
659652 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm3
660653 ; NOGATHER-NEXT: vmovlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
661654 ; NOGATHER-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
664657 ; NOGATHER-NEXT: testb $1, %al
665658 ; NOGATHER-NEXT: je .LBB9_8
666659 ; NOGATHER-NEXT: # %bb.7: # %cond.load7
667 ; NOGATHER-NEXT: vextractf128 $1, %ymm2, %xmm0
668 ; NOGATHER-NEXT: vpextrq $1, %xmm0, %rax
660 ; NOGATHER-NEXT: vpextrq $1, %xmm2, %rax
669661 ; NOGATHER-NEXT: vextractf128 $1, %ymm1, %xmm0
670662 ; NOGATHER-NEXT: vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
671663 ; NOGATHER-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm1
129129 ; SSE42-NEXT: LBB0_16: ## %else20
130130 ; SSE42-NEXT: retq
131131 ;
132 ; AVX1-LABEL: compressstore_v8f64_v8i1:
133 ; AVX1: ## %bb.0:
134 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
135 ; AVX1-NEXT: testb $1, %al
136 ; AVX1-NEXT: je LBB0_2
137 ; AVX1-NEXT: ## %bb.1: ## %cond.store
138 ; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
139 ; AVX1-NEXT: addq $8, %rdi
140 ; AVX1-NEXT: LBB0_2: ## %else
141 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax
142 ; AVX1-NEXT: testb $1, %al
143 ; AVX1-NEXT: je LBB0_4
144 ; AVX1-NEXT: ## %bb.3: ## %cond.store1
145 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
146 ; AVX1-NEXT: addq $8, %rdi
147 ; AVX1-NEXT: LBB0_4: ## %else2
148 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
149 ; AVX1-NEXT: testb $1, %al
150 ; AVX1-NEXT: je LBB0_6
151 ; AVX1-NEXT: ## %bb.5: ## %cond.store4
152 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
153 ; AVX1-NEXT: vmovlps %xmm3, (%rdi)
154 ; AVX1-NEXT: addq $8, %rdi
155 ; AVX1-NEXT: LBB0_6: ## %else5
156 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
157 ; AVX1-NEXT: testb $1, %al
158 ; AVX1-NEXT: je LBB0_8
159 ; AVX1-NEXT: ## %bb.7: ## %cond.store7
160 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
161 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
162 ; AVX1-NEXT: addq $8, %rdi
163 ; AVX1-NEXT: LBB0_8: ## %else8
164 ; AVX1-NEXT: vpextrb $8, %xmm2, %eax
165 ; AVX1-NEXT: testb $1, %al
166 ; AVX1-NEXT: je LBB0_10
167 ; AVX1-NEXT: ## %bb.9: ## %cond.store10
168 ; AVX1-NEXT: vmovlpd %xmm1, (%rdi)
169 ; AVX1-NEXT: addq $8, %rdi
170 ; AVX1-NEXT: LBB0_10: ## %else11
171 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax
172 ; AVX1-NEXT: testb $1, %al
173 ; AVX1-NEXT: je LBB0_12
174 ; AVX1-NEXT: ## %bb.11: ## %cond.store13
175 ; AVX1-NEXT: vmovhpd %xmm1, (%rdi)
176 ; AVX1-NEXT: addq $8, %rdi
177 ; AVX1-NEXT: LBB0_12: ## %else14
178 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
179 ; AVX1-NEXT: testb $1, %al
180 ; AVX1-NEXT: je LBB0_14
181 ; AVX1-NEXT: ## %bb.13: ## %cond.store16
182 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
183 ; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
184 ; AVX1-NEXT: addq $8, %rdi
185 ; AVX1-NEXT: LBB0_14: ## %else17
186 ; AVX1-NEXT: vpextrb $14, %xmm2, %eax
187 ; AVX1-NEXT: testb $1, %al
188 ; AVX1-NEXT: je LBB0_16
189 ; AVX1-NEXT: ## %bb.15: ## %cond.store19
190 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
191 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
192 ; AVX1-NEXT: LBB0_16: ## %else20
193 ; AVX1-NEXT: vzeroupper
194 ; AVX1-NEXT: retq
195 ;
196 ; AVX2-LABEL: compressstore_v8f64_v8i1:
197 ; AVX2: ## %bb.0:
198 ; AVX2-NEXT: vpextrb $0, %xmm2, %eax
199 ; AVX2-NEXT: testb $1, %al
200 ; AVX2-NEXT: je LBB0_2
201 ; AVX2-NEXT: ## %bb.1: ## %cond.store
202 ; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
203 ; AVX2-NEXT: addq $8, %rdi
204 ; AVX2-NEXT: LBB0_2: ## %else
205 ; AVX2-NEXT: vpextrb $2, %xmm2, %eax
206 ; AVX2-NEXT: testb $1, %al
207 ; AVX2-NEXT: je LBB0_4
208 ; AVX2-NEXT: ## %bb.3: ## %cond.store1
209 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
210 ; AVX2-NEXT: addq $8, %rdi
211 ; AVX2-NEXT: LBB0_4: ## %else2
212 ; AVX2-NEXT: vpextrb $4, %xmm2, %eax
213 ; AVX2-NEXT: testb $1, %al
214 ; AVX2-NEXT: je LBB0_6
215 ; AVX2-NEXT: ## %bb.5: ## %cond.store4
216 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm3
217 ; AVX2-NEXT: vmovlpd %xmm3, (%rdi)
218 ; AVX2-NEXT: addq $8, %rdi
219 ; AVX2-NEXT: LBB0_6: ## %else5
220 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
221 ; AVX2-NEXT: testb $1, %al
222 ; AVX2-NEXT: je LBB0_8
223 ; AVX2-NEXT: ## %bb.7: ## %cond.store7
224 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
225 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
226 ; AVX2-NEXT: addq $8, %rdi
227 ; AVX2-NEXT: LBB0_8: ## %else8
228 ; AVX2-NEXT: vpextrb $8, %xmm2, %eax
229 ; AVX2-NEXT: testb $1, %al
230 ; AVX2-NEXT: je LBB0_10
231 ; AVX2-NEXT: ## %bb.9: ## %cond.store10
232 ; AVX2-NEXT: vmovlpd %xmm1, (%rdi)
233 ; AVX2-NEXT: addq $8, %rdi
234 ; AVX2-NEXT: LBB0_10: ## %else11
235 ; AVX2-NEXT: vpextrb $10, %xmm2, %eax
236 ; AVX2-NEXT: testb $1, %al
237 ; AVX2-NEXT: je LBB0_12
238 ; AVX2-NEXT: ## %bb.11: ## %cond.store13
239 ; AVX2-NEXT: vmovhpd %xmm1, (%rdi)
240 ; AVX2-NEXT: addq $8, %rdi
241 ; AVX2-NEXT: LBB0_12: ## %else14
242 ; AVX2-NEXT: vpextrb $12, %xmm2, %eax
243 ; AVX2-NEXT: testb $1, %al
244 ; AVX2-NEXT: je LBB0_14
245 ; AVX2-NEXT: ## %bb.13: ## %cond.store16
246 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
247 ; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
248 ; AVX2-NEXT: addq $8, %rdi
249 ; AVX2-NEXT: LBB0_14: ## %else17
250 ; AVX2-NEXT: vpextrb $14, %xmm2, %eax
251 ; AVX2-NEXT: testb $1, %al
252 ; AVX2-NEXT: je LBB0_16
253 ; AVX2-NEXT: ## %bb.15: ## %cond.store19
254 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
255 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
256 ; AVX2-NEXT: LBB0_16: ## %else20
257 ; AVX2-NEXT: vzeroupper
258 ; AVX2-NEXT: retq
132 ; AVX1OR2-LABEL: compressstore_v8f64_v8i1:
133 ; AVX1OR2: ## %bb.0:
134 ; AVX1OR2-NEXT: vpextrb $0, %xmm2, %eax
135 ; AVX1OR2-NEXT: testb $1, %al
136 ; AVX1OR2-NEXT: je LBB0_2
137 ; AVX1OR2-NEXT: ## %bb.1: ## %cond.store
138 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
139 ; AVX1OR2-NEXT: addq $8, %rdi
140 ; AVX1OR2-NEXT: LBB0_2: ## %else
141 ; AVX1OR2-NEXT: vpextrb $2, %xmm2, %eax
142 ; AVX1OR2-NEXT: testb $1, %al
143 ; AVX1OR2-NEXT: je LBB0_4
144 ; AVX1OR2-NEXT: ## %bb.3: ## %cond.store1
145 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
146 ; AVX1OR2-NEXT: addq $8, %rdi
147 ; AVX1OR2-NEXT: LBB0_4: ## %else2
148 ; AVX1OR2-NEXT: vpextrb $4, %xmm2, %eax
149 ; AVX1OR2-NEXT: testb $1, %al
150 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
151 ; AVX1OR2-NEXT: je LBB0_6
152 ; AVX1OR2-NEXT: ## %bb.5: ## %cond.store4
153 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
154 ; AVX1OR2-NEXT: addq $8, %rdi
155 ; AVX1OR2-NEXT: LBB0_6: ## %else5
156 ; AVX1OR2-NEXT: vpextrb $6, %xmm2, %eax
157 ; AVX1OR2-NEXT: testb $1, %al
158 ; AVX1OR2-NEXT: je LBB0_8
159 ; AVX1OR2-NEXT: ## %bb.7: ## %cond.store7
160 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
161 ; AVX1OR2-NEXT: addq $8, %rdi
162 ; AVX1OR2-NEXT: LBB0_8: ## %else8
163 ; AVX1OR2-NEXT: vpextrb $8, %xmm2, %eax
164 ; AVX1OR2-NEXT: testb $1, %al
165 ; AVX1OR2-NEXT: je LBB0_10
166 ; AVX1OR2-NEXT: ## %bb.9: ## %cond.store10
167 ; AVX1OR2-NEXT: vmovlpd %xmm1, (%rdi)
168 ; AVX1OR2-NEXT: addq $8, %rdi
169 ; AVX1OR2-NEXT: LBB0_10: ## %else11
170 ; AVX1OR2-NEXT: vpextrb $10, %xmm2, %eax
171 ; AVX1OR2-NEXT: testb $1, %al
172 ; AVX1OR2-NEXT: je LBB0_12
173 ; AVX1OR2-NEXT: ## %bb.11: ## %cond.store13
174 ; AVX1OR2-NEXT: vmovhpd %xmm1, (%rdi)
175 ; AVX1OR2-NEXT: addq $8, %rdi
176 ; AVX1OR2-NEXT: LBB0_12: ## %else14
177 ; AVX1OR2-NEXT: vpextrb $12, %xmm2, %eax
178 ; AVX1OR2-NEXT: testb $1, %al
179 ; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0
180 ; AVX1OR2-NEXT: je LBB0_14
181 ; AVX1OR2-NEXT: ## %bb.13: ## %cond.store16
182 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
183 ; AVX1OR2-NEXT: addq $8, %rdi
184 ; AVX1OR2-NEXT: LBB0_14: ## %else17
185 ; AVX1OR2-NEXT: vpextrb $14, %xmm2, %eax
186 ; AVX1OR2-NEXT: testb $1, %al
187 ; AVX1OR2-NEXT: je LBB0_16
188 ; AVX1OR2-NEXT: ## %bb.15: ## %cond.store19
189 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
190 ; AVX1OR2-NEXT: LBB0_16: ## %else20
191 ; AVX1OR2-NEXT: vzeroupper
192 ; AVX1OR2-NEXT: retq
259193 ;
260194 ; AVX512F-LABEL: compressstore_v8f64_v8i1:
261195 ; AVX512F: ## %bb.0:
522456 ; SSE42-NEXT: LBB1_32: ## %else44
523457 ; SSE42-NEXT: retq
524458 ;
525 ; AVX1-LABEL: compressstore_v16f64_v16i1:
526 ; AVX1: ## %bb.0:
527 ; AVX1-NEXT: vpextrb $0, %xmm4, %eax
528 ; AVX1-NEXT: testb $1, %al
529 ; AVX1-NEXT: je LBB1_2
530 ; AVX1-NEXT: ## %bb.1: ## %cond.store
531 ; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
532 ; AVX1-NEXT: addq $8, %rdi
533 ; AVX1-NEXT: LBB1_2: ## %else
534 ; AVX1-NEXT: vpextrb $1, %xmm4, %eax
535 ; AVX1-NEXT: testb $1, %al
536 ; AVX1-NEXT: je LBB1_4
537 ; AVX1-NEXT: ## %bb.3: ## %cond.store1
538 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
539 ; AVX1-NEXT: addq $8, %rdi
540 ; AVX1-NEXT: LBB1_4: ## %else2
541 ; AVX1-NEXT: vpextrb $2, %xmm4, %eax
542 ; AVX1-NEXT: testb $1, %al
543 ; AVX1-NEXT: je LBB1_6
544 ; AVX1-NEXT: ## %bb.5: ## %cond.store4
545 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
546 ; AVX1-NEXT: vmovlps %xmm5, (%rdi)
547 ; AVX1-NEXT: addq $8, %rdi
548 ; AVX1-NEXT: LBB1_6: ## %else5
549 ; AVX1-NEXT: vpextrb $3, %xmm4, %eax
550 ; AVX1-NEXT: testb $1, %al
551 ; AVX1-NEXT: je LBB1_8
552 ; AVX1-NEXT: ## %bb.7: ## %cond.store7
553 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
554 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
555 ; AVX1-NEXT: addq $8, %rdi
556 ; AVX1-NEXT: LBB1_8: ## %else8
557 ; AVX1-NEXT: vpextrb $4, %xmm4, %eax
558 ; AVX1-NEXT: testb $1, %al
559 ; AVX1-NEXT: je LBB1_10
560 ; AVX1-NEXT: ## %bb.9: ## %cond.store10
561 ; AVX1-NEXT: vmovlpd %xmm1, (%rdi)
562 ; AVX1-NEXT: addq $8, %rdi
563 ; AVX1-NEXT: LBB1_10: ## %else11
564 ; AVX1-NEXT: vpextrb $5, %xmm4, %eax
565 ; AVX1-NEXT: testb $1, %al
566 ; AVX1-NEXT: je LBB1_12
567 ; AVX1-NEXT: ## %bb.11: ## %cond.store13
568 ; AVX1-NEXT: vmovhpd %xmm1, (%rdi)
569 ; AVX1-NEXT: addq $8, %rdi
570 ; AVX1-NEXT: LBB1_12: ## %else14
571 ; AVX1-NEXT: vpextrb $6, %xmm4, %eax
572 ; AVX1-NEXT: testb $1, %al
573 ; AVX1-NEXT: je LBB1_14
574 ; AVX1-NEXT: ## %bb.13: ## %cond.store16
575 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
576 ; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
577 ; AVX1-NEXT: addq $8, %rdi
578 ; AVX1-NEXT: LBB1_14: ## %else17
579 ; AVX1-NEXT: vpextrb $7, %xmm4, %eax
580 ; AVX1-NEXT: testb $1, %al
581 ; AVX1-NEXT: je LBB1_16
582 ; AVX1-NEXT: ## %bb.15: ## %cond.store19
583 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
584 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
585 ; AVX1-NEXT: addq $8, %rdi
586 ; AVX1-NEXT: LBB1_16: ## %else20
587 ; AVX1-NEXT: vpextrb $8, %xmm4, %eax
588 ; AVX1-NEXT: testb $1, %al
589 ; AVX1-NEXT: je LBB1_18
590 ; AVX1-NEXT: ## %bb.17: ## %cond.store22
591 ; AVX1-NEXT: vmovlpd %xmm2, (%rdi)
592 ; AVX1-NEXT: addq $8, %rdi
593 ; AVX1-NEXT: LBB1_18: ## %else23
594 ; AVX1-NEXT: vpextrb $9, %xmm4, %eax
595 ; AVX1-NEXT: testb $1, %al
596 ; AVX1-NEXT: je LBB1_20
597 ; AVX1-NEXT: ## %bb.19: ## %cond.store25
598 ; AVX1-NEXT: vmovhpd %xmm2, (%rdi)
599 ; AVX1-NEXT: addq $8, %rdi
600 ; AVX1-NEXT: LBB1_20: ## %else26
601 ; AVX1-NEXT: vpextrb $10, %xmm4, %eax
602 ; AVX1-NEXT: testb $1, %al
603 ; AVX1-NEXT: je LBB1_22
604 ; AVX1-NEXT: ## %bb.21: ## %cond.store28
605 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
606 ; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
607 ; AVX1-NEXT: addq $8, %rdi
608 ; AVX1-NEXT: LBB1_22: ## %else29
609 ; AVX1-NEXT: vpextrb $11, %xmm4, %eax
610 ; AVX1-NEXT: testb $1, %al
611 ; AVX1-NEXT: je LBB1_24
612 ; AVX1-NEXT: ## %bb.23: ## %cond.store31
613 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
614 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
615 ; AVX1-NEXT: addq $8, %rdi
616 ; AVX1-NEXT: LBB1_24: ## %else32
617 ; AVX1-NEXT: vpextrb $12, %xmm4, %eax
618 ; AVX1-NEXT: testb $1, %al
619 ; AVX1-NEXT: je LBB1_26
620 ; AVX1-NEXT: ## %bb.25: ## %cond.store34
621 ; AVX1-NEXT: vmovlpd %xmm3, (%rdi)
622 ; AVX1-NEXT: addq $8, %rdi
623 ; AVX1-NEXT: LBB1_26: ## %else35
624 ; AVX1-NEXT: vpextrb $13, %xmm4, %eax
625 ; AVX1-NEXT: testb $1, %al
626 ; AVX1-NEXT: je LBB1_28
627 ; AVX1-NEXT: ## %bb.27: ## %cond.store37
628 ; AVX1-NEXT: vmovhpd %xmm3, (%rdi)
629 ; AVX1-NEXT: addq $8, %rdi
630 ; AVX1-NEXT: LBB1_28: ## %else38
631 ; AVX1-NEXT: vpextrb $14, %xmm4, %eax
632 ; AVX1-NEXT: testb $1, %al
633 ; AVX1-NEXT: je LBB1_30
634 ; AVX1-NEXT: ## %bb.29: ## %cond.store40
635 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
636 ; AVX1-NEXT: vmovlpd %xmm0, (%rdi)
637 ; AVX1-NEXT: addq $8, %rdi
638 ; AVX1-NEXT: LBB1_30: ## %else41
639 ; AVX1-NEXT: vpextrb $15, %xmm4, %eax
640 ; AVX1-NEXT: testb $1, %al
641 ; AVX1-NEXT: je LBB1_32
642 ; AVX1-NEXT: ## %bb.31: ## %cond.store43
643 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
644 ; AVX1-NEXT: vmovhpd %xmm0, (%rdi)
645 ; AVX1-NEXT: LBB1_32: ## %else44
646 ; AVX1-NEXT: vzeroupper
647 ; AVX1-NEXT: retq
648 ;
649 ; AVX2-LABEL: compressstore_v16f64_v16i1:
650 ; AVX2: ## %bb.0:
651 ; AVX2-NEXT: vpextrb $0, %xmm4, %eax
652 ; AVX2-NEXT: testb $1, %al
653 ; AVX2-NEXT: je LBB1_2
654 ; AVX2-NEXT: ## %bb.1: ## %cond.store
655 ; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
656 ; AVX2-NEXT: addq $8, %rdi
657 ; AVX2-NEXT: LBB1_2: ## %else
658 ; AVX2-NEXT: vpextrb $1, %xmm4, %eax
659 ; AVX2-NEXT: testb $1, %al
660 ; AVX2-NEXT: je LBB1_4
661 ; AVX2-NEXT: ## %bb.3: ## %cond.store1
662 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
663 ; AVX2-NEXT: addq $8, %rdi
664 ; AVX2-NEXT: LBB1_4: ## %else2
665 ; AVX2-NEXT: vpextrb $2, %xmm4, %eax
666 ; AVX2-NEXT: testb $1, %al
667 ; AVX2-NEXT: je LBB1_6
668 ; AVX2-NEXT: ## %bb.5: ## %cond.store4
669 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm5
670 ; AVX2-NEXT: vmovlpd %xmm5, (%rdi)
671 ; AVX2-NEXT: addq $8, %rdi
672 ; AVX2-NEXT: LBB1_6: ## %else5
673 ; AVX2-NEXT: vpextrb $3, %xmm4, %eax
674 ; AVX2-NEXT: testb $1, %al
675 ; AVX2-NEXT: je LBB1_8
676 ; AVX2-NEXT: ## %bb.7: ## %cond.store7
677 ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0
678 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
679 ; AVX2-NEXT: addq $8, %rdi
680 ; AVX2-NEXT: LBB1_8: ## %else8
681 ; AVX2-NEXT: vpextrb $4, %xmm4, %eax
682 ; AVX2-NEXT: testb $1, %al
683 ; AVX2-NEXT: je LBB1_10
684 ; AVX2-NEXT: ## %bb.9: ## %cond.store10
685 ; AVX2-NEXT: vmovlpd %xmm1, (%rdi)
686 ; AVX2-NEXT: addq $8, %rdi
687 ; AVX2-NEXT: LBB1_10: ## %else11
688 ; AVX2-NEXT: vpextrb $5, %xmm4, %eax
689 ; AVX2-NEXT: testb $1, %al
690 ; AVX2-NEXT: je LBB1_12
691 ; AVX2-NEXT: ## %bb.11: ## %cond.store13
692 ; AVX2-NEXT: vmovhpd %xmm1, (%rdi)
693 ; AVX2-NEXT: addq $8, %rdi
694 ; AVX2-NEXT: LBB1_12: ## %else14
695 ; AVX2-NEXT: vpextrb $6, %xmm4, %eax
696 ; AVX2-NEXT: testb $1, %al
697 ; AVX2-NEXT: je LBB1_14
698 ; AVX2-NEXT: ## %bb.13: ## %cond.store16
699 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
700 ; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
701 ; AVX2-NEXT: addq $8, %rdi
702 ; AVX2-NEXT: LBB1_14: ## %else17
703 ; AVX2-NEXT: vpextrb $7, %xmm4, %eax
704 ; AVX2-NEXT: testb $1, %al
705 ; AVX2-NEXT: je LBB1_16
706 ; AVX2-NEXT: ## %bb.15: ## %cond.store19
707 ; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0
708 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
709 ; AVX2-NEXT: addq $8, %rdi
710 ; AVX2-NEXT: LBB1_16: ## %else20
711 ; AVX2-NEXT: vpextrb $8, %xmm4, %eax
712 ; AVX2-NEXT: testb $1, %al
713 ; AVX2-NEXT: je LBB1_18
714 ; AVX2-NEXT: ## %bb.17: ## %cond.store22
715 ; AVX2-NEXT: vmovlpd %xmm2, (%rdi)
716 ; AVX2-NEXT: addq $8, %rdi
717 ; AVX2-NEXT: LBB1_18: ## %else23
718 ; AVX2-NEXT: vpextrb $9, %xmm4, %eax
719 ; AVX2-NEXT: testb $1, %al
720 ; AVX2-NEXT: je LBB1_20
721 ; AVX2-NEXT: ## %bb.19: ## %cond.store25
722 ; AVX2-NEXT: vmovhpd %xmm2, (%rdi)
723 ; AVX2-NEXT: addq $8, %rdi
724 ; AVX2-NEXT: LBB1_20: ## %else26
725 ; AVX2-NEXT: vpextrb $10, %xmm4, %eax
726 ; AVX2-NEXT: testb $1, %al
727 ; AVX2-NEXT: je LBB1_22
728 ; AVX2-NEXT: ## %bb.21: ## %cond.store28
729 ; AVX2-NEXT: vextractf128 $1, %ymm2, %xmm0
730 ; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
731 ; AVX2-NEXT: addq $8, %rdi
732 ; AVX2-NEXT: LBB1_22: ## %else29
733 ; AVX2-NEXT: vpextrb $11, %xmm4, %eax
734 ; AVX2-NEXT: testb $1, %al
735 ; AVX2-NEXT: je LBB1_24
736 ; AVX2-NEXT: ## %bb.23: ## %cond.store31
737 ; AVX2-NEXT: vextractf128 $1, %ymm2, %xmm0
738 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
739 ; AVX2-NEXT: addq $8, %rdi
740 ; AVX2-NEXT: LBB1_24: ## %else32
741 ; AVX2-NEXT: vpextrb $12, %xmm4, %eax
742 ; AVX2-NEXT: testb $1, %al
743 ; AVX2-NEXT: je LBB1_26
744 ; AVX2-NEXT: ## %bb.25: ## %cond.store34
745 ; AVX2-NEXT: vmovlpd %xmm3, (%rdi)
746 ; AVX2-NEXT: addq $8, %rdi
747 ; AVX2-NEXT: LBB1_26: ## %else35
748 ; AVX2-NEXT: vpextrb $13, %xmm4, %eax
749 ; AVX2-NEXT: testb $1, %al
750 ; AVX2-NEXT: je LBB1_28
751 ; AVX2-NEXT: ## %bb.27: ## %cond.store37
752 ; AVX2-NEXT: vmovhpd %xmm3, (%rdi)
753 ; AVX2-NEXT: addq $8, %rdi
754 ; AVX2-NEXT: LBB1_28: ## %else38
755 ; AVX2-NEXT: vpextrb $14, %xmm4, %eax
756 ; AVX2-NEXT: testb $1, %al
757 ; AVX2-NEXT: je LBB1_30
758 ; AVX2-NEXT: ## %bb.29: ## %cond.store40
759 ; AVX2-NEXT: vextractf128 $1, %ymm3, %xmm0
760 ; AVX2-NEXT: vmovlpd %xmm0, (%rdi)
761 ; AVX2-NEXT: addq $8, %rdi
762 ; AVX2-NEXT: LBB1_30: ## %else41
763 ; AVX2-NEXT: vpextrb $15, %xmm4, %eax
764 ; AVX2-NEXT: testb $1, %al
765 ; AVX2-NEXT: je LBB1_32
766 ; AVX2-NEXT: ## %bb.31: ## %cond.store43
767 ; AVX2-NEXT: vextractf128 $1, %ymm3, %xmm0
768 ; AVX2-NEXT: vmovhpd %xmm0, (%rdi)
769 ; AVX2-NEXT: LBB1_32: ## %else44
770 ; AVX2-NEXT: vzeroupper
771 ; AVX2-NEXT: retq
459 ; AVX1OR2-LABEL: compressstore_v16f64_v16i1:
460 ; AVX1OR2: ## %bb.0:
461 ; AVX1OR2-NEXT: vpextrb $0, %xmm4, %eax
462 ; AVX1OR2-NEXT: testb $1, %al
463 ; AVX1OR2-NEXT: je LBB1_2
464 ; AVX1OR2-NEXT: ## %bb.1: ## %cond.store
465 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
466 ; AVX1OR2-NEXT: addq $8, %rdi
467 ; AVX1OR2-NEXT: LBB1_2: ## %else
468 ; AVX1OR2-NEXT: vpextrb $1, %xmm4, %eax
469 ; AVX1OR2-NEXT: testb $1, %al
470 ; AVX1OR2-NEXT: je LBB1_4
471 ; AVX1OR2-NEXT: ## %bb.3: ## %cond.store1
472 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
473 ; AVX1OR2-NEXT: addq $8, %rdi
474 ; AVX1OR2-NEXT: LBB1_4: ## %else2
475 ; AVX1OR2-NEXT: vpextrb $2, %xmm4, %eax
476 ; AVX1OR2-NEXT: testb $1, %al
477 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
478 ; AVX1OR2-NEXT: je LBB1_6
479 ; AVX1OR2-NEXT: ## %bb.5: ## %cond.store4
480 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
481 ; AVX1OR2-NEXT: addq $8, %rdi
482 ; AVX1OR2-NEXT: LBB1_6: ## %else5
483 ; AVX1OR2-NEXT: vpextrb $3, %xmm4, %eax
484 ; AVX1OR2-NEXT: testb $1, %al
485 ; AVX1OR2-NEXT: je LBB1_8
486 ; AVX1OR2-NEXT: ## %bb.7: ## %cond.store7
487 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
488 ; AVX1OR2-NEXT: addq $8, %rdi
489 ; AVX1OR2-NEXT: LBB1_8: ## %else8
490 ; AVX1OR2-NEXT: vpextrb $4, %xmm4, %eax
491 ; AVX1OR2-NEXT: testb $1, %al
492 ; AVX1OR2-NEXT: je LBB1_10
493 ; AVX1OR2-NEXT: ## %bb.9: ## %cond.store10
494 ; AVX1OR2-NEXT: vmovlpd %xmm1, (%rdi)
495 ; AVX1OR2-NEXT: addq $8, %rdi
496 ; AVX1OR2-NEXT: LBB1_10: ## %else11
497 ; AVX1OR2-NEXT: vpextrb $5, %xmm4, %eax
498 ; AVX1OR2-NEXT: testb $1, %al
499 ; AVX1OR2-NEXT: je LBB1_12
500 ; AVX1OR2-NEXT: ## %bb.11: ## %cond.store13
501 ; AVX1OR2-NEXT: vmovhpd %xmm1, (%rdi)
502 ; AVX1OR2-NEXT: addq $8, %rdi
503 ; AVX1OR2-NEXT: LBB1_12: ## %else14
504 ; AVX1OR2-NEXT: vpextrb $6, %xmm4, %eax
505 ; AVX1OR2-NEXT: testb $1, %al
506 ; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0
507 ; AVX1OR2-NEXT: je LBB1_14
508 ; AVX1OR2-NEXT: ## %bb.13: ## %cond.store16
509 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
510 ; AVX1OR2-NEXT: addq $8, %rdi
511 ; AVX1OR2-NEXT: LBB1_14: ## %else17
512 ; AVX1OR2-NEXT: vpextrb $7, %xmm4, %eax
513 ; AVX1OR2-NEXT: testb $1, %al
514 ; AVX1OR2-NEXT: je LBB1_16
515 ; AVX1OR2-NEXT: ## %bb.15: ## %cond.store19
516 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
517 ; AVX1OR2-NEXT: addq $8, %rdi
518 ; AVX1OR2-NEXT: LBB1_16: ## %else20
519 ; AVX1OR2-NEXT: vpextrb $8, %xmm4, %eax
520 ; AVX1OR2-NEXT: testb $1, %al
521 ; AVX1OR2-NEXT: je LBB1_18
522 ; AVX1OR2-NEXT: ## %bb.17: ## %cond.store22
523 ; AVX1OR2-NEXT: vmovlpd %xmm2, (%rdi)
524 ; AVX1OR2-NEXT: addq $8, %rdi
525 ; AVX1OR2-NEXT: LBB1_18: ## %else23
526 ; AVX1OR2-NEXT: vpextrb $9, %xmm4, %eax
527 ; AVX1OR2-NEXT: testb $1, %al
528 ; AVX1OR2-NEXT: je LBB1_20
529 ; AVX1OR2-NEXT: ## %bb.19: ## %cond.store25
530 ; AVX1OR2-NEXT: vmovhpd %xmm2, (%rdi)
531 ; AVX1OR2-NEXT: addq $8, %rdi
532 ; AVX1OR2-NEXT: LBB1_20: ## %else26
533 ; AVX1OR2-NEXT: vpextrb $10, %xmm4, %eax
534 ; AVX1OR2-NEXT: testb $1, %al
535 ; AVX1OR2-NEXT: vextractf128 $1, %ymm2, %xmm0
536 ; AVX1OR2-NEXT: je LBB1_22
537 ; AVX1OR2-NEXT: ## %bb.21: ## %cond.store28
538 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
539 ; AVX1OR2-NEXT: addq $8, %rdi
540 ; AVX1OR2-NEXT: LBB1_22: ## %else29
541 ; AVX1OR2-NEXT: vpextrb $11, %xmm4, %eax
542 ; AVX1OR2-NEXT: testb $1, %al
543 ; AVX1OR2-NEXT: je LBB1_24
544 ; AVX1OR2-NEXT: ## %bb.23: ## %cond.store31
545 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
546 ; AVX1OR2-NEXT: addq $8, %rdi
547 ; AVX1OR2-NEXT: LBB1_24: ## %else32
548 ; AVX1OR2-NEXT: vpextrb $12, %xmm4, %eax
549 ; AVX1OR2-NEXT: testb $1, %al
550 ; AVX1OR2-NEXT: je LBB1_26
551 ; AVX1OR2-NEXT: ## %bb.25: ## %cond.store34
552 ; AVX1OR2-NEXT: vmovlpd %xmm3, (%rdi)
553 ; AVX1OR2-NEXT: addq $8, %rdi
554 ; AVX1OR2-NEXT: LBB1_26: ## %else35
555 ; AVX1OR2-NEXT: vpextrb $13, %xmm4, %eax
556 ; AVX1OR2-NEXT: testb $1, %al
557 ; AVX1OR2-NEXT: je LBB1_28
558 ; AVX1OR2-NEXT: ## %bb.27: ## %cond.store37
559 ; AVX1OR2-NEXT: vmovhpd %xmm3, (%rdi)
560 ; AVX1OR2-NEXT: addq $8, %rdi
561 ; AVX1OR2-NEXT: LBB1_28: ## %else38
562 ; AVX1OR2-NEXT: vpextrb $14, %xmm4, %eax
563 ; AVX1OR2-NEXT: testb $1, %al
564 ; AVX1OR2-NEXT: vextractf128 $1, %ymm3, %xmm0
565 ; AVX1OR2-NEXT: je LBB1_30
566 ; AVX1OR2-NEXT: ## %bb.29: ## %cond.store40
567 ; AVX1OR2-NEXT: vmovlpd %xmm0, (%rdi)
568 ; AVX1OR2-NEXT: addq $8, %rdi
569 ; AVX1OR2-NEXT: LBB1_30: ## %else41
570 ; AVX1OR2-NEXT: vpextrb $15, %xmm4, %eax
571 ; AVX1OR2-NEXT: testb $1, %al
572 ; AVX1OR2-NEXT: je LBB1_32
573 ; AVX1OR2-NEXT: ## %bb.31: ## %cond.store43
574 ; AVX1OR2-NEXT: vmovhpd %xmm0, (%rdi)
575 ; AVX1OR2-NEXT: LBB1_32: ## %else44
576 ; AVX1OR2-NEXT: vzeroupper
577 ; AVX1OR2-NEXT: retq
772578 ;
773579 ; AVX512F-LABEL: compressstore_v16f64_v16i1:
774580 ; AVX512F: ## %bb.0:
12551061 ; AVX1OR2-NEXT: LBB4_8: ## %else8
12561062 ; AVX1OR2-NEXT: vpextrb $8, %xmm1, %eax
12571063 ; AVX1OR2-NEXT: testb $1, %al
1064 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
12581065 ; AVX1OR2-NEXT: je LBB4_10
12591066 ; AVX1OR2-NEXT: ## %bb.9: ## %cond.store10
1260 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm2
1261 ; AVX1OR2-NEXT: vmovss %xmm2, (%rdi)
1067 ; AVX1OR2-NEXT: vmovss %xmm0, (%rdi)
12621068 ; AVX1OR2-NEXT: addq $4, %rdi
12631069 ; AVX1OR2-NEXT: LBB4_10: ## %else11
12641070 ; AVX1OR2-NEXT: vpextrb $10, %xmm1, %eax
12651071 ; AVX1OR2-NEXT: testb $1, %al
12661072 ; AVX1OR2-NEXT: je LBB4_12
12671073 ; AVX1OR2-NEXT: ## %bb.11: ## %cond.store13
1268 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm2
1269 ; AVX1OR2-NEXT: vextractps $1, %xmm2, (%rdi)
1074 ; AVX1OR2-NEXT: vextractps $1, %xmm0, (%rdi)
12701075 ; AVX1OR2-NEXT: addq $4, %rdi
12711076 ; AVX1OR2-NEXT: LBB4_12: ## %else14
12721077 ; AVX1OR2-NEXT: vpextrb $12, %xmm1, %eax
12731078 ; AVX1OR2-NEXT: testb $1, %al
12741079 ; AVX1OR2-NEXT: je LBB4_14
12751080 ; AVX1OR2-NEXT: ## %bb.13: ## %cond.store16
1276 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm2
1277 ; AVX1OR2-NEXT: vextractps $2, %xmm2, (%rdi)
1081 ; AVX1OR2-NEXT: vextractps $2, %xmm0, (%rdi)
12781082 ; AVX1OR2-NEXT: addq $4, %rdi
12791083 ; AVX1OR2-NEXT: LBB4_14: ## %else17
12801084 ; AVX1OR2-NEXT: vpextrb $14, %xmm1, %eax
12811085 ; AVX1OR2-NEXT: testb $1, %al
12821086 ; AVX1OR2-NEXT: je LBB4_16
12831087 ; AVX1OR2-NEXT: ## %bb.15: ## %cond.store19
1284 ; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0
12851088 ; AVX1OR2-NEXT: vextractps $3, %xmm0, (%rdi)
12861089 ; AVX1OR2-NEXT: LBB4_16: ## %else20
12871090 ; AVX1OR2-NEXT: vzeroupper
20441847 ; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
20451848 ; AVX1-NEXT: vpextrb $4, %xmm4, %eax
20461849 ; AVX1-NEXT: testb $1, %al
1850 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm10
20471851 ; AVX1-NEXT: je LBB6_10
20481852 ; AVX1-NEXT: ## %bb.9: ## %cond.store10
2049 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
2050 ; AVX1-NEXT: vmovd %xmm4, (%rdi)
1853 ; AVX1-NEXT: vmovss %xmm10, (%rdi)
20511854 ; AVX1-NEXT: addq $4, %rdi
20521855 ; AVX1-NEXT: LBB6_10: ## %else11
20531856 ; AVX1-NEXT: vpackssdw %xmm9, %xmm0, %xmm4
20561859 ; AVX1-NEXT: testb $1, %al
20571860 ; AVX1-NEXT: je LBB6_12
20581861 ; AVX1-NEXT: ## %bb.11: ## %cond.store13
2059 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
2060 ; AVX1-NEXT: vpextrd $1, %xmm4, (%rdi)
1862 ; AVX1-NEXT: vextractps $1, %xmm10, (%rdi)
20611863 ; AVX1-NEXT: addq $4, %rdi
20621864 ; AVX1-NEXT: LBB6_12: ## %else14
20631865 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
2064 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm8, %xmm8
2065 ; AVX1-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
2066 ; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
2067 ; AVX1-NEXT: vpextrb $6, %xmm4, %eax
1866 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm8, %xmm4
1867 ; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
1868 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
1869 ; AVX1-NEXT: vpextrb $6, %xmm0, %eax
20681870 ; AVX1-NEXT: testb $1, %al
20691871 ; AVX1-NEXT: je LBB6_14
20701872 ; AVX1-NEXT: ## %bb.13: ## %cond.store16
2071 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
2072 ; AVX1-NEXT: vpextrd $2, %xmm4, (%rdi)
1873 ; AVX1-NEXT: vextractps $2, %xmm10, (%rdi)
20731874 ; AVX1-NEXT: addq $4, %rdi
20741875 ; AVX1-NEXT: LBB6_14: ## %else17
2075 ; AVX1-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
2076 ; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
2077 ; AVX1-NEXT: vpextrb $7, %xmm4, %eax
1876 ; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
1877 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
1878 ; AVX1-NEXT: vpextrb $7, %xmm0, %eax
20781879 ; AVX1-NEXT: testb $1, %al
20791880 ; AVX1-NEXT: je LBB6_16
20801881 ; AVX1-NEXT: ## %bb.15: ## %cond.store19
2081 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
2082 ; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
1882 ; AVX1-NEXT: vextractps $3, %xmm10, (%rdi)
20831883 ; AVX1-NEXT: addq $4, %rdi
20841884 ; AVX1-NEXT: LBB6_16: ## %else20
20851885 ; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
21241924 ; AVX1-NEXT: vextractps $3, %xmm1, (%rdi)
21251925 ; AVX1-NEXT: addq $4, %rdi
21261926 ; AVX1-NEXT: LBB6_24: ## %else32
2127 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm0
2128 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
2129 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm0, %xmm4
2130 ; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm5
2131 ; AVX1-NEXT: vpacksswb %xmm5, %xmm0, %xmm5
2132 ; AVX1-NEXT: vpextrb $12, %xmm5, %eax
1927 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm4
1928 ; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
1929 ; AVX1-NEXT: vpcmpeqd %xmm0, %xmm4, %xmm5
1930 ; AVX1-NEXT: vpackssdw %xmm5, %xmm0, %xmm0
1931 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
1932 ; AVX1-NEXT: vpextrb $12, %xmm0, %eax
21331933 ; AVX1-NEXT: testb $1, %al
1934 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
21341935 ; AVX1-NEXT: je LBB6_26
21351936 ; AVX1-NEXT: ## %bb.25: ## %cond.store34
2136 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
2137 ; AVX1-NEXT: vmovd %xmm5, (%rdi)
1937 ; AVX1-NEXT: vmovd %xmm0, (%rdi)
21381938 ; AVX1-NEXT: addq $4, %rdi
21391939 ; AVX1-NEXT: LBB6_26: ## %else35
2140 ; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm4
2141 ; AVX1-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
2142 ; AVX1-NEXT: vpextrb $13, %xmm4, %eax
1940 ; AVX1-NEXT: vpackssdw %xmm5, %xmm0, %xmm1
1941 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
1942 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
21431943 ; AVX1-NEXT: testb $1, %al
21441944 ; AVX1-NEXT: je LBB6_28
21451945 ; AVX1-NEXT: ## %bb.27: ## %cond.store37
2146 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
2147 ; AVX1-NEXT: vpextrd $1, %xmm4, (%rdi)
1946 ; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi)
21481947 ; AVX1-NEXT: addq $4, %rdi
21491948 ; AVX1-NEXT: LBB6_28: ## %else38
2150 ; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4
2151 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm0, %xmm0
2152 ; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm4
1949 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
1950 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm4, %xmm1
1951 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm4
21531952 ; AVX1-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
21541953 ; AVX1-NEXT: vpextrb $14, %xmm4, %eax
21551954 ; AVX1-NEXT: testb $1, %al
21561955 ; AVX1-NEXT: je LBB6_30
21571956 ; AVX1-NEXT: ## %bb.29: ## %cond.store40
2158 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
2159 ; AVX1-NEXT: vpextrd $2, %xmm4, (%rdi)
1957 ; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi)
21601958 ; AVX1-NEXT: addq $4, %rdi
21611959 ; AVX1-NEXT: LBB6_30: ## %else41
2162 ; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2163 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2164 ; AVX1-NEXT: vpextrb $15, %xmm0, %eax
1960 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
1961 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
1962 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
21651963 ; AVX1-NEXT: testb $1, %al
21661964 ; AVX1-NEXT: je LBB6_32
21671965 ; AVX1-NEXT: ## %bb.31: ## %cond.store43
2168 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
21691966 ; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
21701967 ; AVX1-NEXT: addq $4, %rdi
21711968 ; AVX1-NEXT: LBB6_32: ## %else44
22112008 ; AVX1-NEXT: vextractps $3, %xmm2, (%rdi)
22122009 ; AVX1-NEXT: addq $4, %rdi
22132010 ; AVX1-NEXT: LBB6_40: ## %else56
2214 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm0
2215 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2216 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
2217 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm4
2218 ; AVX1-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
2219 ; AVX1-NEXT: vpextrb $4, %xmm4, %eax
2011 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm1
2012 ; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
2013 ; AVX1-NEXT: vpcmpeqd %xmm0, %xmm1, %xmm4
2014 ; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
2015 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2016 ; AVX1-NEXT: vpextrb $4, %xmm0, %eax
22202017 ; AVX1-NEXT: testb $1, %al
2018 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
22212019 ; AVX1-NEXT: je LBB6_42
22222020 ; AVX1-NEXT: ## %bb.41: ## %cond.store58
2223 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
2224 ; AVX1-NEXT: vmovd %xmm4, (%rdi)
2021 ; AVX1-NEXT: vmovd %xmm0, (%rdi)
22252022 ; AVX1-NEXT: addq $4, %rdi
22262023 ; AVX1-NEXT: LBB6_42: ## %else59
2227 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2228 ; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2229 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax
2024 ; AVX1-NEXT: vpackssdw %xmm4, %xmm0, %xmm2
2025 ; AVX1-NEXT: vpacksswb %xmm0, %xmm2, %xmm2
2026 ; AVX1-NEXT: vpextrb $5, %xmm2, %eax
22302027 ; AVX1-NEXT: testb $1, %al
22312028 ; AVX1-NEXT: je LBB6_44
22322029 ; AVX1-NEXT: ## %bb.43: ## %cond.store61
2233 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1
2234 ; AVX1-NEXT: vpextrd $1, %xmm1, (%rdi)
2030 ; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi)
22352031 ; AVX1-NEXT: addq $4, %rdi
22362032 ; AVX1-NEXT: LBB6_44: ## %else62
2237 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2238 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
2239 ; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
2240 ; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2241 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
2033 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
2034 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
2035 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
2036 ; AVX1-NEXT: vpacksswb %xmm0, %xmm2, %xmm2
2037 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
22422038 ; AVX1-NEXT: testb $1, %al
22432039 ; AVX1-NEXT: je LBB6_46
22442040 ; AVX1-NEXT: ## %bb.45: ## %cond.store64
2245 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm1
2246 ; AVX1-NEXT: vpextrd $2, %xmm1, (%rdi)
2041 ; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi)
22472042 ; AVX1-NEXT: addq $4, %rdi
22482043 ; AVX1-NEXT: LBB6_46: ## %else65
2249 ; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2250 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2251 ; AVX1-NEXT: vpextrb $7, %xmm0, %eax
2044 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2045 ; AVX1-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2046 ; AVX1-NEXT: vpextrb $7, %xmm1, %eax
22522047 ; AVX1-NEXT: testb $1, %al
22532048 ; AVX1-NEXT: je LBB6_48
22542049 ; AVX1-NEXT: ## %bb.47: ## %cond.store67
2255 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0
22562050 ; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
22572051 ; AVX1-NEXT: addq $4, %rdi
22582052 ; AVX1-NEXT: LBB6_48: ## %else68
22982092 ; AVX1-NEXT: vextractps $3, %xmm3, (%rdi)
22992093 ; AVX1-NEXT: addq $4, %rdi
23002094 ; AVX1-NEXT: LBB6_56: ## %else80
2301 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm0
2302 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2303 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
2304 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
2305 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
2306 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
2095 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm1
2096 ; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
2097 ; AVX1-NEXT: vpcmpeqd %xmm0, %xmm1, %xmm2
2098 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm0
2099 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2100 ; AVX1-NEXT: vpextrb $12, %xmm0, %eax
23072101 ; AVX1-NEXT: testb $1, %al
2102 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
23082103 ; AVX1-NEXT: je LBB6_58
23092104 ; AVX1-NEXT: ## %bb.57: ## %cond.store82
2310 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
2311 ; AVX1-NEXT: vmovd %xmm2, (%rdi)
2105 ; AVX1-NEXT: vmovd %xmm0, (%rdi)
23122106 ; AVX1-NEXT: addq $4, %rdi
23132107 ; AVX1-NEXT: LBB6_58: ## %else83
2314 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2315 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2316 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
2108 ; AVX1-NEXT: vpackssdw %xmm2, %xmm0, %xmm2
2109 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
2110 ; AVX1-NEXT: vpextrb $13, %xmm2, %eax
23172111 ; AVX1-NEXT: testb $1, %al
23182112 ; AVX1-NEXT: je LBB6_60
23192113 ; AVX1-NEXT: ## %bb.59: ## %cond.store85
2320 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm1
2321 ; AVX1-NEXT: vpextrd $1, %xmm1, (%rdi)
2114 ; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi)
23222115 ; AVX1-NEXT: addq $4, %rdi
23232116 ; AVX1-NEXT: LBB6_60: ## %else86
2324 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2325 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
2326 ; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
2327 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2328 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
2117 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
2118 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1
2119 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
2120 ; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
2121 ; AVX1-NEXT: vpextrb $14, %xmm2, %eax
23292122 ; AVX1-NEXT: testb $1, %al
23302123 ; AVX1-NEXT: je LBB6_62
23312124 ; AVX1-NEXT: ## %bb.61: ## %cond.store88
2332 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm1
2333 ; AVX1-NEXT: vpextrd $2, %xmm1, (%rdi)
2125 ; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi)
23342126 ; AVX1-NEXT: addq $4, %rdi
23352127 ; AVX1-NEXT: LBB6_62: ## %else89
2336 ; AVX1-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2337 ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2338 ; AVX1-NEXT: vpextrb $15, %xmm0, %eax
2128 ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2129 ; AVX1-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2130 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
23392131 ; AVX1-NEXT: testb $1, %al
23402132 ; AVX1-NEXT: je LBB6_64
23412133 ; AVX1-NEXT: ## %bb.63: ## %cond.store91
2342 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0
23432134 ; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi)
23442135 ; AVX1-NEXT: LBB6_64: ## %else92
23452136 ; AVX1-NEXT: vzeroupper
23942185 ; AVX2-NEXT: vpacksswb %xmm0, %xmm9, %xmm9
23952186 ; AVX2-NEXT: vpextrb $4, %xmm9, %eax
23962187 ; AVX2-NEXT: testb $1, %al
2188 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm9
23972189 ; AVX2-NEXT: je LBB6_10
23982190 ; AVX2-NEXT: ## %bb.9: ## %cond.store10
2399 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm9
24002191 ; AVX2-NEXT: vmovd %xmm9, (%rdi)
24012192 ; AVX2-NEXT: addq $4, %rdi
24022193 ; AVX2-NEXT: LBB6_10: ## %else11
2403 ; AVX2-NEXT: vpackssdw %xmm8, %xmm0, %xmm8
2404 ; AVX2-NEXT: vpacksswb %xmm0, %xmm8, %xmm8
2405 ; AVX2-NEXT: vpextrb $5, %xmm8, %eax
2194 ; AVX2-NEXT: vpackssdw %xmm8, %xmm0, %xmm0
2195 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2196 ; AVX2-NEXT: vpextrb $5, %xmm0, %eax
24062197 ; AVX2-NEXT: testb $1, %al
24072198 ; AVX2-NEXT: je LBB6_12
24082199 ; AVX2-NEXT: ## %bb.11: ## %cond.store13
2409 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm8
2410 ; AVX2-NEXT: vpextrd $1, %xmm8, (%rdi)
2200 ; AVX2-NEXT: vpextrd $1, %xmm9, (%rdi)
24112201 ; AVX2-NEXT: addq $4, %rdi
24122202 ; AVX2-NEXT: LBB6_12: ## %else14
2413 ; AVX2-NEXT: vpxor %xmm8, %xmm8, %xmm8
2414 ; AVX2-NEXT: vpcmpeqd %ymm8, %ymm4, %ymm4
2415 ; AVX2-NEXT: vextracti128 $1, %ymm4, %xmm8
2416 ; AVX2-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
2417 ; AVX2-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
2418 ; AVX2-NEXT: vpextrb $6, %xmm4, %eax
2203 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
2204 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm4, %ymm0
2205 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4
2206 ; AVX2-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
2207 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2208 ; AVX2-NEXT: vpextrb $6, %xmm0, %eax
24192209 ; AVX2-NEXT: testb $1, %al
24202210 ; AVX2-NEXT: je LBB6_14
24212211 ; AVX2-NEXT: ## %bb.13: ## %cond.store16
2422 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4
2423 ; AVX2-NEXT: vpextrd $2, %xmm4, (%rdi)
2212 ; AVX2-NEXT: vpextrd $2, %xmm9, (%rdi)
24242213 ; AVX2-NEXT: addq $4, %rdi
24252214 ; AVX2-NEXT: LBB6_14: ## %else17
2426 ; AVX2-NEXT: vpackssdw %xmm8, %xmm0, %xmm4
2427 ; AVX2-NEXT: vpacksswb %xmm0, %xmm4, %xmm4
2428 ; AVX2-NEXT: vpextrb $7, %xmm4, %eax
2215 ; AVX2-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
2216 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2217 ; AVX2-NEXT: vpextrb $7, %xmm0, %eax
24292218 ; AVX2-NEXT: testb $1, %al
24302219 ; AVX2-NEXT: je LBB6_16
24312220 ; AVX2-NEXT: ## %bb.15: ## %cond.store19
2432 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2433 ; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
2221 ; AVX2-NEXT: vpextrd $3, %xmm9, (%rdi)
24342222 ; AVX2-NEXT: addq $4, %rdi
24352223 ; AVX2-NEXT: LBB6_16: ## %else20
24362224 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
24752263 ; AVX2-NEXT: LBB6_24: ## %else32
24762264 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
24772265 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm5, %ymm0
2478 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2479 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm4
2480 ; AVX2-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
2481 ; AVX2-NEXT: vpextrb $12, %xmm4, %eax
2266 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm4
2267 ; AVX2-NEXT: vpackssdw %xmm4, %xmm0, %xmm0
2268 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2269 ; AVX2-NEXT: vpextrb $12, %xmm0, %eax
24822270 ; AVX2-NEXT: testb $1, %al
2271 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
24832272 ; AVX2-NEXT: je LBB6_26
24842273 ; AVX2-NEXT: ## %bb.25: ## %cond.store34
2485 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm4
2486 ; AVX2-NEXT: vmovd %xmm4, (%rdi)
2274 ; AVX2-NEXT: vmovd %xmm0, (%rdi)
24872275 ; AVX2-NEXT: addq $4, %rdi
24882276 ; AVX2-NEXT: LBB6_26: ## %else35
2489 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2490 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2491 ; AVX2-NEXT: vpextrb $13, %xmm0, %eax
2277 ; AVX2-NEXT: vpackssdw %xmm4, %xmm0, %xmm1
2278 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2279 ; AVX2-NEXT: vpextrb $13, %xmm1, %eax
24922280 ; AVX2-NEXT: testb $1, %al
24932281 ; AVX2-NEXT: je LBB6_28
24942282 ; AVX2-NEXT: ## %bb.27: ## %cond.store37
2495 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
24962283 ; AVX2-NEXT: vpextrd $1, %xmm0, (%rdi)
24972284 ; AVX2-NEXT: addq $4, %rdi
24982285 ; AVX2-NEXT: LBB6_28: ## %else38
2499 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
2500 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm5, %ymm0
2501 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2502 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm4
2286 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
2287 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm5, %ymm1
2288 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1
2289 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm4
25032290 ; AVX2-NEXT: vpacksswb %xmm4, %xmm0, %xmm4
25042291 ; AVX2-NEXT: vpextrb $14, %xmm4, %eax
25052292 ; AVX2-NEXT: testb $1, %al
25062293 ; AVX2-NEXT: je LBB6_30
25072294 ; AVX2-NEXT: ## %bb.29: ## %cond.store40
2508 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm4
2509 ; AVX2-NEXT: vpextrd $2, %xmm4, (%rdi)
2295 ; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi)
25102296 ; AVX2-NEXT: addq $4, %rdi
25112297 ; AVX2-NEXT: LBB6_30: ## %else41
2512 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2513 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2514 ; AVX2-NEXT: vpextrb $15, %xmm0, %eax
2298 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2299 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2300 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
25152301 ; AVX2-NEXT: testb $1, %al
25162302 ; AVX2-NEXT: je LBB6_32
25172303 ; AVX2-NEXT: ## %bb.31: ## %cond.store43
2518 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
25192304 ; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
25202305 ; AVX2-NEXT: addq $4, %rdi
25212306 ; AVX2-NEXT: LBB6_32: ## %else44
25612346 ; AVX2-NEXT: LBB6_40: ## %else56
25622347 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
25632348 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm6, %ymm0
2564 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2565 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
2566 ; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2567 ; AVX2-NEXT: vpextrb $4, %xmm1, %eax
2349 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2350 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2351 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2352 ; AVX2-NEXT: vpextrb $4, %xmm0, %eax
25682353 ; AVX2-NEXT: testb $1, %al
2354 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm0
25692355 ; AVX2-NEXT: je LBB6_42
25702356 ; AVX2-NEXT: ## %bb.41: ## %cond.store58
2571 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm1
2572 ; AVX2-NEXT: vmovd %xmm1, (%rdi)
2357 ; AVX2-NEXT: vmovd %xmm0, (%rdi)
25732358 ; AVX2-NEXT: addq $4, %rdi
25742359 ; AVX2-NEXT: LBB6_42: ## %else59
2575 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2576 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2577 ; AVX2-NEXT: vpextrb $5, %xmm0, %eax
2360 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2361 ; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2362 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax
25782363 ; AVX2-NEXT: testb $1, %al
25792364 ; AVX2-NEXT: je LBB6_44
25802365 ; AVX2-NEXT: ## %bb.43: ## %cond.store61
2581 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm0
25822366 ; AVX2-NEXT: vpextrd $1, %xmm0, (%rdi)
25832367 ; AVX2-NEXT: addq $4, %rdi
25842368 ; AVX2-NEXT: LBB6_44: ## %else62
2585 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
2586 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm6, %ymm0
2587 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2588 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
2589 ; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2590 ; AVX2-NEXT: vpextrb $6, %xmm1, %eax
2369 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
2370 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm6, %ymm1
2371 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1
2372 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
2373 ; AVX2-NEXT: vpacksswb %xmm0, %xmm2, %xmm2
2374 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
25912375 ; AVX2-NEXT: testb $1, %al
25922376 ; AVX2-NEXT: je LBB6_46
25932377 ; AVX2-NEXT: ## %bb.45: ## %cond.store64
2594 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm1
2595 ; AVX2-NEXT: vpextrd $2, %xmm1, (%rdi)
2378 ; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi)
25962379 ; AVX2-NEXT: addq $4, %rdi
25972380 ; AVX2-NEXT: LBB6_46: ## %else65
2598 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2599 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2600 ; AVX2-NEXT: vpextrb $7, %xmm0, %eax
2381 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2382 ; AVX2-NEXT: vpacksswb %xmm0, %xmm1, %xmm1
2383 ; AVX2-NEXT: vpextrb $7, %xmm1, %eax
26012384 ; AVX2-NEXT: testb $1, %al
26022385 ; AVX2-NEXT: je LBB6_48
26032386 ; AVX2-NEXT: ## %bb.47: ## %cond.store67
2604 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm0
26052387 ; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
26062388 ; AVX2-NEXT: addq $4, %rdi
26072389 ; AVX2-NEXT: LBB6_48: ## %else68
26472429 ; AVX2-NEXT: LBB6_56: ## %else80
26482430 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
26492431 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm7, %ymm0
2650 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2651 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
2652 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2653 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
2432 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2433 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
2434 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2435 ; AVX2-NEXT: vpextrb $12, %xmm0, %eax
26542436 ; AVX2-NEXT: testb $1, %al
2437 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm0
26552438 ; AVX2-NEXT: je LBB6_58
26562439 ; AVX2-NEXT: ## %bb.57: ## %cond.store82
2657 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm1
2658 ; AVX2-NEXT: vmovd %xmm1, (%rdi)
2440 ; AVX2-NEXT: vmovd %xmm0, (%rdi)
26592441 ; AVX2-NEXT: addq $4, %rdi
26602442 ; AVX2-NEXT: LBB6_58: ## %else83
2661 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2662 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2663 ; AVX2-NEXT: vpextrb $13, %xmm0, %eax
2443 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2444 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2445 ; AVX2-NEXT: vpextrb $13, %xmm1, %eax
26642446 ; AVX2-NEXT: testb $1, %al
26652447 ; AVX2-NEXT: je LBB6_60
26662448 ; AVX2-NEXT: ## %bb.59: ## %cond.store85
2667 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm0
26682449 ; AVX2-NEXT: vpextrd $1, %xmm0, (%rdi)
26692450 ; AVX2-NEXT: addq $4, %rdi
26702451 ; AVX2-NEXT: LBB6_60: ## %else86
2671 ; AVX2-NEXT: vpxor %xmm0, %xmm0, %xmm0
2672 ; AVX2-NEXT: vpcmpeqd %ymm0, %ymm7, %ymm0
2673 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
2674 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm1
2675 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2676 ; AVX2-NEXT: vpextrb $14, %xmm1, %eax
2452 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
2453 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm7, %ymm1
2454 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1
2455 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm2
2456 ; AVX2-NEXT: vpacksswb %xmm2, %xmm0, %xmm2
2457 ; AVX2-NEXT: vpextrb $14, %xmm2, %eax
26772458 ; AVX2-NEXT: testb $1, %al
26782459 ; AVX2-NEXT: je LBB6_62
26792460 ; AVX2-NEXT: ## %bb.61: ## %cond.store88
2680 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm1
2681 ; AVX2-NEXT: vpextrd $2, %xmm1, (%rdi)
2461 ; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi)
26822462 ; AVX2-NEXT: addq $4, %rdi
26832463 ; AVX2-NEXT: LBB6_62: ## %else89
2684 ; AVX2-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
2685 ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
2686 ; AVX2-NEXT: vpextrb $15, %xmm0, %eax
2464 ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm1
2465 ; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm1
2466 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
26872467 ; AVX2-NEXT: testb $1, %al
26882468 ; AVX2-NEXT: je LBB6_64
26892469 ; AVX2-NEXT: ## %bb.63: ## %cond.store91
2690 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm0
26912470 ; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi)
26922471 ; AVX2-NEXT: LBB6_64: ## %else92
26932472 ; AVX2-NEXT: vzeroupper
28902669 ; AVX1-NEXT: LBB8_4: ## %else2
28912670 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
28922671 ; AVX1-NEXT: testb $1, %al
2672 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
28932673 ; AVX1-NEXT: je LBB8_6
28942674 ; AVX1-NEXT: ## %bb.5: ## %cond.store4
2895 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
2896 ; AVX1-NEXT: vmovlps %xmm2, (%rdi)
2675 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
28972676 ; AVX1-NEXT: addq $8, %rdi
28982677 ; AVX1-NEXT: LBB8_6: ## %else5
28992678 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
29002679 ; AVX1-NEXT: testb $1, %al
29012680 ; AVX1-NEXT: je LBB8_8
29022681 ; AVX1-NEXT: ## %bb.7: ## %cond.store7
2903 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
29042682 ; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi)
29052683 ; AVX1-NEXT: LBB8_8: ## %else8
29062684 ; AVX1-NEXT: vzeroupper
29242702 ; AVX2-NEXT: LBB8_4: ## %else2
29252703 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
29262704 ; AVX2-NEXT: testb $1, %al
2705 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
29272706 ; AVX2-NEXT: je LBB8_6
29282707 ; AVX2-NEXT: ## %bb.5: ## %cond.store4
2929 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
2930 ; AVX2-NEXT: vmovq %xmm2, (%rdi)
2708 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
29312709 ; AVX2-NEXT: addq $8, %rdi
29322710 ; AVX2-NEXT: LBB8_6: ## %else5
29332711 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
29342712 ; AVX2-NEXT: testb $1, %al
29352713 ; AVX2-NEXT: je LBB8_8
29362714 ; AVX2-NEXT: ## %bb.7: ## %cond.store7
2937 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
29382715 ; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi)
29392716 ; AVX2-NEXT: LBB8_8: ## %else8
29402717 ; AVX2-NEXT: vzeroupper
31112888 ; AVX1-NEXT: LBB9_4: ## %else2
31122889 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
31132890 ; AVX1-NEXT: testb $1, %al
2891 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
31142892 ; AVX1-NEXT: je LBB9_6
31152893 ; AVX1-NEXT: ## %bb.5: ## %cond.store4
3116 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3117 ; AVX1-NEXT: vmovlps %xmm3, (%rdi)
2894 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
31182895 ; AVX1-NEXT: addq $8, %rdi
31192896 ; AVX1-NEXT: LBB9_6: ## %else5
31202897 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
31212898 ; AVX1-NEXT: testb $1, %al
31222899 ; AVX1-NEXT: je LBB9_8
31232900 ; AVX1-NEXT: ## %bb.7: ## %cond.store7
3124 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
31252901 ; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi)
31262902 ; AVX1-NEXT: addq $8, %rdi
31272903 ; AVX1-NEXT: LBB9_8: ## %else8
31412917 ; AVX1-NEXT: LBB9_12: ## %else14
31422918 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
31432919 ; AVX1-NEXT: testb $1, %al
2920 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
31442921 ; AVX1-NEXT: je LBB9_14
31452922 ; AVX1-NEXT: ## %bb.13: ## %cond.store16
3146 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
31472923 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
31482924 ; AVX1-NEXT: addq $8, %rdi
31492925 ; AVX1-NEXT: LBB9_14: ## %else17
31512927 ; AVX1-NEXT: testb $1, %al
31522928 ; AVX1-NEXT: je LBB9_16
31532929 ; AVX1-NEXT: ## %bb.15: ## %cond.store19
3154 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
31552930 ; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi)
31562931 ; AVX1-NEXT: LBB9_16: ## %else20
31572932 ; AVX1-NEXT: vzeroupper
31752950 ; AVX2-NEXT: LBB9_4: ## %else2
31762951 ; AVX2-NEXT: vpextrb $4, %xmm2, %eax
31772952 ; AVX2-NEXT: testb $1, %al
2953 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
31782954 ; AVX2-NEXT: je LBB9_6
31792955 ; AVX2-NEXT: ## %bb.5: ## %cond.store4
3180 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
3181 ; AVX2-NEXT: vmovq %xmm3, (%rdi)
2956 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
31822957 ; AVX2-NEXT: addq $8, %rdi
31832958 ; AVX2-NEXT: LBB9_6: ## %else5
31842959 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
31852960 ; AVX2-NEXT: testb $1, %al
31862961 ; AVX2-NEXT: je LBB9_8
31872962 ; AVX2-NEXT: ## %bb.7: ## %cond.store7
3188 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
31892963 ; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi)
31902964 ; AVX2-NEXT: addq $8, %rdi
31912965 ; AVX2-NEXT: LBB9_8: ## %else8
32052979 ; AVX2-NEXT: LBB9_12: ## %else14
32062980 ; AVX2-NEXT: vpextrb $12, %xmm2, %eax
32072981 ; AVX2-NEXT: testb $1, %al
2982 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
32082983 ; AVX2-NEXT: je LBB9_14
32092984 ; AVX2-NEXT: ## %bb.13: ## %cond.store16
3210 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
32112985 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
32122986 ; AVX2-NEXT: addq $8, %rdi
32132987 ; AVX2-NEXT: LBB9_14: ## %else17
32152989 ; AVX2-NEXT: testb $1, %al
32162990 ; AVX2-NEXT: je LBB9_16
32172991 ; AVX2-NEXT: ## %bb.15: ## %cond.store19
3218 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
32192992 ; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi)
32202993 ; AVX2-NEXT: LBB9_16: ## %else20
32212994 ; AVX2-NEXT: vzeroupper
38443617 ; SSE2: ## %bb.0:
38453618 ; SSE2-NEXT: pxor %xmm2, %xmm2
38463619 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3847 ; SSE2-NEXT: movd %xmm2, %eax
3848 ; SSE2-NEXT: testb $1, %al
3620 ; SSE2-NEXT: movd %xmm2, %ecx
3621 ; SSE2-NEXT: testb $1, %cl
3622 ; SSE2-NEXT: movd %xmm0, %eax
38493623 ; SSE2-NEXT: je LBB12_2
38503624 ; SSE2-NEXT: ## %bb.1: ## %cond.store
3851 ; SSE2-NEXT: movd %xmm0, %ecx
3852 ; SSE2-NEXT: movb %cl, (%rdi)
3625 ; SSE2-NEXT: movb %al, (%rdi)
38533626 ; SSE2-NEXT: incq %rdi
38543627 ; SSE2-NEXT: LBB12_2: ## %else
3855 ; SSE2-NEXT: shrl $8, %eax
3856 ; SSE2-NEXT: testb $1, %al
3628 ; SSE2-NEXT: shrl $8, %ecx
3629 ; SSE2-NEXT: testb $1, %cl
38573630 ; SSE2-NEXT: je LBB12_4
38583631 ; SSE2-NEXT: ## %bb.3: ## %cond.store1
3859 ; SSE2-NEXT: movd %xmm0, %eax
38603632 ; SSE2-NEXT: movb %ah, (%rdi)
38613633 ; SSE2-NEXT: incq %rdi
38623634 ; SSE2-NEXT: LBB12_4: ## %else2
38633635 ; SSE2-NEXT: pxor %xmm2, %xmm2
38643636 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3865 ; SSE2-NEXT: movd %xmm2, %eax
3866 ; SSE2-NEXT: movl %eax, %ecx
3867 ; SSE2-NEXT: shrl $16, %ecx
3868 ; SSE2-NEXT: testb $1, %cl
3637 ; SSE2-NEXT: movd %xmm2, %ecx
3638 ; SSE2-NEXT: movl %ecx, %edx
3639 ; SSE2-NEXT: shrl $16, %edx
3640 ; SSE2-NEXT: testb $1, %dl
38693641 ; SSE2-NEXT: je LBB12_6
38703642 ; SSE2-NEXT: ## %bb.5: ## %cond.store4
3871 ; SSE2-NEXT: movd %xmm0, %ecx
3872 ; SSE2-NEXT: shrl $16, %ecx
3873 ; SSE2-NEXT: movb %cl, (%rdi)
3643 ; SSE2-NEXT: movl %eax, %edx
3644 ; SSE2-NEXT: shrl $16, %edx
3645 ; SSE2-NEXT: movb %dl, (%rdi)
38743646 ; SSE2-NEXT: incq %rdi
38753647 ; SSE2-NEXT: LBB12_6: ## %else5
3876 ; SSE2-NEXT: shrl $24, %eax
3877 ; SSE2-NEXT: testb $1, %al
3648 ; SSE2-NEXT: shrl $24, %ecx
3649 ; SSE2-NEXT: testb $1, %cl
38783650 ; SSE2-NEXT: je LBB12_8
38793651 ; SSE2-NEXT: ## %bb.7: ## %cond.store7
3880 ; SSE2-NEXT: movd %xmm0, %eax
38813652 ; SSE2-NEXT: shrl $24, %eax
38823653 ; SSE2-NEXT: movb %al, (%rdi)
38833654 ; SSE2-NEXT: incq %rdi
38843655 ; SSE2-NEXT: LBB12_8: ## %else8
38853656 ; SSE2-NEXT: pxor %xmm2, %xmm2
38863657 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3887 ; SSE2-NEXT: pextrw $2, %xmm2, %eax
3888 ; SSE2-NEXT: testb $1, %al
3658 ; SSE2-NEXT: pextrw $2, %xmm2, %ecx
3659 ; SSE2-NEXT: testb $1, %cl
3660 ; SSE2-NEXT: pextrw $2, %xmm0, %eax
38893661 ; SSE2-NEXT: je LBB12_10
38903662 ; SSE2-NEXT: ## %bb.9: ## %cond.store10
3891 ; SSE2-NEXT: pextrw $2, %xmm0, %ecx
3892 ; SSE2-NEXT: movb %cl, (%rdi)
3663 ; SSE2-NEXT: movb %al, (%rdi)
38933664 ; SSE2-NEXT: incq %rdi
38943665 ; SSE2-NEXT: LBB12_10: ## %else11
3895 ; SSE2-NEXT: shrl $8, %eax
3896 ; SSE2-NEXT: testb $1, %al
3666 ; SSE2-NEXT: shrl $8, %ecx
3667 ; SSE2-NEXT: testb $1, %cl
38973668 ; SSE2-NEXT: je LBB12_12
38983669 ; SSE2-NEXT: ## %bb.11: ## %cond.store13
3899 ; SSE2-NEXT: pextrw $2, %xmm0, %eax
39003670 ; SSE2-NEXT: movb %ah, (%rdi)
39013671 ; SSE2-NEXT: incq %rdi
39023672 ; SSE2-NEXT: LBB12_12: ## %else14
39033673 ; SSE2-NEXT: pxor %xmm2, %xmm2
39043674 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3905 ; SSE2-NEXT: pextrw $3, %xmm2, %eax
3906 ; SSE2-NEXT: testb $1, %al
3675 ; SSE2-NEXT: pextrw $3, %xmm2, %ecx
3676 ; SSE2-NEXT: testb $1, %cl
3677 ; SSE2-NEXT: pextrw $3, %xmm0, %eax
39073678 ; SSE2-NEXT: je LBB12_14
39083679 ; SSE2-NEXT: ## %bb.13: ## %cond.store16
3909 ; SSE2-NEXT: pextrw $3, %xmm0, %ecx
3910 ; SSE2-NEXT: movb %cl, (%rdi)
3680 ; SSE2-NEXT: movb %al, (%rdi)
39113681 ; SSE2-NEXT: incq %rdi
39123682 ; SSE2-NEXT: LBB12_14: ## %else17
3913 ; SSE2-NEXT: shrl $8, %eax
3914 ; SSE2-NEXT: testb $1, %al
3683 ; SSE2-NEXT: shrl $8, %ecx
3684 ; SSE2-NEXT: testb $1, %cl
39153685 ; SSE2-NEXT: je LBB12_16
39163686 ; SSE2-NEXT: ## %bb.15: ## %cond.store19
3917 ; SSE2-NEXT: pextrw $3, %xmm0, %eax
39183687 ; SSE2-NEXT: movb %ah, (%rdi)
39193688 ; SSE2-NEXT: incq %rdi
39203689 ; SSE2-NEXT: LBB12_16: ## %else20
39213690 ; SSE2-NEXT: pxor %xmm2, %xmm2
39223691 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3923 ; SSE2-NEXT: pextrw $4, %xmm2, %eax
3924 ; SSE2-NEXT: testb $1, %al
3692 ; SSE2-NEXT: pextrw $4, %xmm2, %ecx
3693 ; SSE2-NEXT: testb $1, %cl
3694 ; SSE2-NEXT: pextrw $4, %xmm0, %eax
39253695 ; SSE2-NEXT: je LBB12_18
39263696 ; SSE2-NEXT: ## %bb.17: ## %cond.store22
3927 ; SSE2-NEXT: pextrw $4, %xmm0, %ecx
3928 ; SSE2-NEXT: movb %cl, (%rdi)
3697 ; SSE2-NEXT: movb %al, (%rdi)
39293698 ; SSE2-NEXT: incq %rdi
39303699 ; SSE2-NEXT: LBB12_18: ## %else23
3931 ; SSE2-NEXT: shrl $8, %eax
3932 ; SSE2-NEXT: testb $1, %al
3700 ; SSE2-NEXT: shrl $8, %ecx
3701 ; SSE2-NEXT: testb $1, %cl
39333702 ; SSE2-NEXT: je LBB12_20
39343703 ; SSE2-NEXT: ## %bb.19: ## %cond.store25
3935 ; SSE2-NEXT: pextrw $4, %xmm0, %eax
39363704 ; SSE2-NEXT: movb %ah, (%rdi)
39373705 ; SSE2-NEXT: incq %rdi
39383706 ; SSE2-NEXT: LBB12_20: ## %else26
39393707 ; SSE2-NEXT: pxor %xmm2, %xmm2
39403708 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3941 ; SSE2-NEXT: pextrw $5, %xmm2, %eax
3942 ; SSE2-NEXT: testb $1, %al
3709 ; SSE2-NEXT: pextrw $5, %xmm2, %ecx
3710 ; SSE2-NEXT: testb $1, %cl
3711 ; SSE2-NEXT: pextrw $5, %xmm0, %eax
39433712 ; SSE2-NEXT: je LBB12_22
39443713 ; SSE2-NEXT: ## %bb.21: ## %cond.store28
3945 ; SSE2-NEXT: pextrw $5, %xmm0, %ecx
3946 ; SSE2-NEXT: movb %cl, (%rdi)
3714 ; SSE2-NEXT: movb %al, (%rdi)
39473715 ; SSE2-NEXT: incq %rdi
39483716 ; SSE2-NEXT: LBB12_22: ## %else29
3949 ; SSE2-NEXT: shrl $8, %eax
3950 ; SSE2-NEXT: testb $1, %al
3717 ; SSE2-NEXT: shrl $8, %ecx
3718 ; SSE2-NEXT: testb $1, %cl
39513719 ; SSE2-NEXT: je LBB12_24
39523720 ; SSE2-NEXT: ## %bb.23: ## %cond.store31
3953 ; SSE2-NEXT: pextrw $5, %xmm0, %eax
39543721 ; SSE2-NEXT: movb %ah, (%rdi)
39553722 ; SSE2-NEXT: incq %rdi
39563723 ; SSE2-NEXT: LBB12_24: ## %else32
39573724 ; SSE2-NEXT: pxor %xmm2, %xmm2
39583725 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm2
3959 ; SSE2-NEXT: pextrw $6, %xmm2, %eax
3960 ; SSE2-NEXT: testb $1, %al
3726 ; SSE2-NEXT: pextrw $6, %xmm2, %ecx
3727 ; SSE2-NEXT: testb $1, %cl
3728 ; SSE2-NEXT: pextrw $6, %xmm0, %eax
39613729 ; SSE2-NEXT: je LBB12_26
39623730 ; SSE2-NEXT: ## %bb.25: ## %cond.store34
3963 ; SSE2-NEXT: pextrw $6, %xmm0, %ecx
3964 ; SSE2-NEXT: movb %cl, (%rdi)
3731 ; SSE2-NEXT: movb %al, (%rdi)
39653732 ; SSE2-NEXT: incq %rdi
39663733 ; SSE2-NEXT: LBB12_26: ## %else35
3967 ; SSE2-NEXT: shrl $8, %eax
3968 ; SSE2-NEXT: testb $1, %al
3734 ; SSE2-NEXT: shrl $8, %ecx
3735 ; SSE2-NEXT: testb $1, %cl
39693736 ; SSE2-NEXT: je LBB12_28
39703737 ; SSE2-NEXT: ## %bb.27: ## %cond.store37
3971 ; SSE2-NEXT: pextrw $6, %xmm0, %eax
39723738 ; SSE2-NEXT: movb %ah, (%rdi)
39733739 ; SSE2-NEXT: incq %rdi
39743740 ; SSE2-NEXT: LBB12_28: ## %else38
39753741 ; SSE2-NEXT: pxor %xmm2, %xmm2
39763742 ; SSE2-NEXT: pcmpeqb %xmm2, %xmm1
3977 ; SSE2-NEXT: pextrw $7, %xmm1, %eax
3978 ; SSE2-NEXT: testb $1, %al
3743 ; SSE2-NEXT: pextrw $7, %xmm1, %ecx
3744 ; SSE2-NEXT: testb $1, %cl
3745 ; SSE2-NEXT: pextrw $7, %xmm0, %eax
39793746 ; SSE2-NEXT: je LBB12_30
39803747 ; SSE2-NEXT: ## %bb.29: ## %cond.store40
3981 ; SSE2-NEXT: pextrw $7, %xmm0, %ecx
3982 ; SSE2-NEXT: movb %cl, (%rdi)
3748 ; SSE2-NEXT: movb %al, (%rdi)
39833749 ; SSE2-NEXT: incq %rdi
39843750 ; SSE2-NEXT: LBB12_30: ## %else41
3985 ; SSE2-NEXT: shrl $8, %eax
3986 ; SSE2-NEXT: testb $1, %al
3751 ; SSE2-NEXT: shrl $8, %ecx
3752 ; SSE2-NEXT: testb $1, %cl
39873753 ; SSE2-NEXT: je LBB12_32
39883754 ; SSE2-NEXT: ## %bb.31: ## %cond.store43
3989 ; SSE2-NEXT: pextrw $7, %xmm0, %eax
39903755 ; SSE2-NEXT: movb %ah, (%rdi)
39913756 ; SSE2-NEXT: LBB12_32: ## %else44
39923757 ; SSE2-NEXT: retq
6969 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
7070 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
7171 ; AVX1-NEXT: testb $1, %al
72 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
7273 ; AVX1-NEXT: je .LBB0_6
7374 ; AVX1-NEXT: # %bb.5: # %cond.load4
74 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
75 ; AVX1-NEXT: vmovq %xmm3, %rax
75 ; AVX1-NEXT: vmovq %xmm0, %rax
7676 ; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
7777 ; AVX1-NEXT: .LBB0_6: # %else5
7878 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
7979 ; AVX1-NEXT: testb $1, %al
8080 ; AVX1-NEXT: je .LBB0_8
8181 ; AVX1-NEXT: # %bb.7: # %cond.load7
82 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
8382 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
8483 ; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
8584 ; AVX1-NEXT: .LBB0_8: # %else8
110109 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
111110 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
112111 ; AVX2-NEXT: testb $1, %al
112 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
113113 ; AVX2-NEXT: je .LBB0_6
114114 ; AVX2-NEXT: # %bb.5: # %cond.load4
115 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
116 ; AVX2-NEXT: vmovq %xmm3, %rax
115 ; AVX2-NEXT: vmovq %xmm0, %rax
117116 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
118117 ; AVX2-NEXT: .LBB0_6: # %else5
119118 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
120119 ; AVX2-NEXT: testb $1, %al
121120 ; AVX2-NEXT: je .LBB0_8
122121 ; AVX2-NEXT: # %bb.7: # %cond.load7
123 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
124122 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
125123 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
126124 ; AVX2-NEXT: .LBB0_8: # %else8
226224 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
227225 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
228226 ; AVX1-NEXT: testb $1, %al
227 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
229228 ; AVX1-NEXT: je .LBB1_6
230229 ; AVX1-NEXT: # %bb.5: # %cond.load4
231 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
232 ; AVX1-NEXT: vmovq %xmm3, %rax
230 ; AVX1-NEXT: vmovq %xmm0, %rax
233231 ; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
234232 ; AVX1-NEXT: .LBB1_6: # %else5
235233 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
236234 ; AVX1-NEXT: testb $1, %al
237235 ; AVX1-NEXT: je .LBB1_8
238236 ; AVX1-NEXT: # %bb.7: # %cond.load7
239 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
240237 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
241238 ; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
242239 ; AVX1-NEXT: .LBB1_8: # %else8
272269 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
273270 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
274271 ; AVX2-NEXT: testb $1, %al
272 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
275273 ; AVX2-NEXT: je .LBB1_6
276274 ; AVX2-NEXT: # %bb.5: # %cond.load4
277 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
278 ; AVX2-NEXT: vmovq %xmm3, %rax
275 ; AVX2-NEXT: vmovq %xmm0, %rax
279276 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
280277 ; AVX2-NEXT: .LBB1_6: # %else5
281278 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
282279 ; AVX2-NEXT: testb $1, %al
283280 ; AVX2-NEXT: je .LBB1_8
284281 ; AVX2-NEXT: # %bb.7: # %cond.load7
285 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
286282 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
287283 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
288284 ; AVX2-NEXT: .LBB1_8: # %else8
387383 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
388384 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
389385 ; AVX1-NEXT: testb $1, %al
386 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
390387 ; AVX1-NEXT: je .LBB2_6
391388 ; AVX1-NEXT: # %bb.5: # %cond.load4
392 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
393 ; AVX1-NEXT: vmovq %xmm3, %rax
389 ; AVX1-NEXT: vmovq %xmm0, %rax
394390 ; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
395391 ; AVX1-NEXT: .LBB2_6: # %else5
396392 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
397393 ; AVX1-NEXT: testb $1, %al
398394 ; AVX1-NEXT: je .LBB2_8
399395 ; AVX1-NEXT: # %bb.7: # %cond.load7
400 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
401396 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
402397 ; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
403398 ; AVX1-NEXT: .LBB2_8: # %else8
432427 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
433428 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
434429 ; AVX2-NEXT: testb $1, %al
430 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
435431 ; AVX2-NEXT: je .LBB2_6
436432 ; AVX2-NEXT: # %bb.5: # %cond.load4
437 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
438 ; AVX2-NEXT: vmovq %xmm3, %rax
433 ; AVX2-NEXT: vmovq %xmm0, %rax
439434 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
440435 ; AVX2-NEXT: .LBB2_6: # %else5
441436 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
442437 ; AVX2-NEXT: testb $1, %al
443438 ; AVX2-NEXT: je .LBB2_8
444439 ; AVX2-NEXT: # %bb.7: # %cond.load7
445 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
446440 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
447441 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
448442 ; AVX2-NEXT: .LBB2_8: # %else8
661655 ; AVX1-NEXT: vpinsrb $1, (%rax), %xmm3, %xmm3
662656 ; AVX1-NEXT: .LBB3_4: # %else2
663657 ; AVX1-NEXT: vpmovsxdq %xmm7, %xmm6
664 ; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm8
658 ; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm5
665659 ; AVX1-NEXT: vpxor %xmm7, %xmm7, %xmm7
666660 ; AVX1-NEXT: vpcmpeqb %xmm7, %xmm2, %xmm7
667661 ; AVX1-NEXT: vpextrb $2, %xmm7, %eax
668662 ; AVX1-NEXT: testb $1, %al
663 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
669664 ; AVX1-NEXT: je .LBB3_6
670665 ; AVX1-NEXT: # %bb.5: # %cond.load4
671 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
672 ; AVX1-NEXT: vmovq %xmm5, %rax
666 ; AVX1-NEXT: vmovq %xmm0, %rax
673667 ; AVX1-NEXT: vpinsrb $2, (%rax), %xmm3, %xmm3
674668 ; AVX1-NEXT: .LBB3_6: # %else5
675669 ; AVX1-NEXT: vpaddq %xmm6, %xmm4, %xmm6
677671 ; AVX1-NEXT: testb $1, %al
678672 ; AVX1-NEXT: je .LBB3_8
679673 ; AVX1-NEXT: # %bb.7: # %cond.load7
680 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
681674 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
682675 ; AVX1-NEXT: vpinsrb $3, (%rax), %xmm3, %xmm3
683676 ; AVX1-NEXT: .LBB3_8: # %else8
684 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm8, %ymm0
677 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm0
685678 ; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5
686679 ; AVX1-NEXT: vpcmpeqb %xmm5, %xmm2, %xmm5
687680 ; AVX1-NEXT: vpextrb $4, %xmm5, %eax
701694 ; AVX1-NEXT: vpinsrb $5, (%rax), %xmm3, %xmm3
702695 ; AVX1-NEXT: .LBB3_12: # %else14
703696 ; AVX1-NEXT: vpmovsxdq %xmm6, %xmm6
704 ; AVX1-NEXT: vpaddq %xmm7, %xmm4, %xmm8
697 ; AVX1-NEXT: vpaddq %xmm7, %xmm4, %xmm5
705698 ; AVX1-NEXT: vpxor %xmm7, %xmm7, %xmm7
706699 ; AVX1-NEXT: vpcmpeqb %xmm7, %xmm2, %xmm7
707700 ; AVX1-NEXT: vpextrb $6, %xmm7, %eax
708701 ; AVX1-NEXT: testb $1, %al
702 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
709703 ; AVX1-NEXT: je .LBB3_14
710704 ; AVX1-NEXT: # %bb.13: # %cond.load16
711 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
712 ; AVX1-NEXT: vmovq %xmm5, %rax
705 ; AVX1-NEXT: vmovq %xmm0, %rax
713706 ; AVX1-NEXT: vpinsrb $6, (%rax), %xmm3, %xmm3
714707 ; AVX1-NEXT: .LBB3_14: # %else17
715708 ; AVX1-NEXT: vpaddq %xmm6, %xmm4, %xmm6
717710 ; AVX1-NEXT: testb $1, %al
718711 ; AVX1-NEXT: je .LBB3_16
719712 ; AVX1-NEXT: # %bb.15: # %cond.load19
720 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
721713 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
722714 ; AVX1-NEXT: vpinsrb $7, (%rax), %xmm3, %xmm3
723715 ; AVX1-NEXT: .LBB3_16: # %else20
724716 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
725 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm8, %ymm0
717 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm0
726718 ; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5
727719 ; AVX1-NEXT: vpcmpeqb %xmm5, %xmm2, %xmm5
728720 ; AVX1-NEXT: vpextrb $8, %xmm5, %eax
747739 ; AVX1-NEXT: vpcmpeqb %xmm6, %xmm2, %xmm6
748740 ; AVX1-NEXT: vpextrb $10, %xmm6, %eax
749741 ; AVX1-NEXT: testb $1, %al
742 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
750743 ; AVX1-NEXT: je .LBB3_22
751744 ; AVX1-NEXT: # %bb.21: # %cond.load28
752 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
753 ; AVX1-NEXT: vmovq %xmm7, %rax
745 ; AVX1-NEXT: vmovq %xmm0, %rax
754746 ; AVX1-NEXT: vpinsrb $10, (%rax), %xmm3, %xmm3
755747 ; AVX1-NEXT: .LBB3_22: # %else29
756748 ; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm4
758750 ; AVX1-NEXT: testb $1, %al
759751 ; AVX1-NEXT: je .LBB3_24
760752 ; AVX1-NEXT: # %bb.23: # %cond.load31
761 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
762753 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
763754 ; AVX1-NEXT: vpinsrb $11, (%rax), %xmm3, %xmm3
764755 ; AVX1-NEXT: .LBB3_24: # %else32
783774 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
784775 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
785776 ; AVX1-NEXT: testb $1, %al
777 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
786778 ; AVX1-NEXT: je .LBB3_30
787779 ; AVX1-NEXT: # %bb.29: # %cond.load40
788 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
789 ; AVX1-NEXT: vmovq %xmm2, %rax
780 ; AVX1-NEXT: vmovq %xmm0, %rax
790781 ; AVX1-NEXT: vpinsrb $14, (%rax), %xmm3, %xmm3
791782 ; AVX1-NEXT: .LBB3_30: # %else41
792783 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
793784 ; AVX1-NEXT: testb $1, %al
794785 ; AVX1-NEXT: je .LBB3_32
795786 ; AVX1-NEXT: # %bb.31: # %cond.load43
796 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
797787 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
798788 ; AVX1-NEXT: vpinsrb $15, (%rax), %xmm3, %xmm3
799789 ; AVX1-NEXT: .LBB3_32: # %else44
828818 ; AVX2-NEXT: vpcmpeqb %xmm6, %xmm2, %xmm6
829819 ; AVX2-NEXT: vpextrb $2, %xmm6, %eax
830820 ; AVX2-NEXT: testb $1, %al
821 ; AVX2-NEXT: vextracti128 $1, %ymm5, %xmm5
831822 ; AVX2-NEXT: je .LBB3_6
832823 ; AVX2-NEXT: # %bb.5: # %cond.load4
833 ; AVX2-NEXT: vextracti128 $1, %ymm5, %xmm7
834 ; AVX2-NEXT: vmovq %xmm7, %rax
824 ; AVX2-NEXT: vmovq %xmm5, %rax
835825 ; AVX2-NEXT: vpinsrb $2, (%rax), %xmm3, %xmm3
836826 ; AVX2-NEXT: .LBB3_6: # %else5
837827 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0
839829 ; AVX2-NEXT: testb $1, %al
840830 ; AVX2-NEXT: je .LBB3_8
841831 ; AVX2-NEXT: # %bb.7: # %cond.load7
842 ; AVX2-NEXT: vextracti128 $1, %ymm5, %xmm5
843832 ; AVX2-NEXT: vpextrq $1, %xmm5, %rax
844833 ; AVX2-NEXT: vpinsrb $3, (%rax), %xmm3, %xmm3
845834 ; AVX2-NEXT: .LBB3_8: # %else8
864853 ; AVX2-NEXT: vpcmpeqb %xmm5, %xmm2, %xmm5
865854 ; AVX2-NEXT: vpextrb $6, %xmm5, %eax
866855 ; AVX2-NEXT: testb $1, %al
856 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
867857 ; AVX2-NEXT: je .LBB3_14
868858 ; AVX2-NEXT: # %bb.13: # %cond.load16
869 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm6
870 ; AVX2-NEXT: vmovq %xmm6, %rax
859 ; AVX2-NEXT: vmovq %xmm0, %rax
871860 ; AVX2-NEXT: vpinsrb $6, (%rax), %xmm3, %xmm3
872861 ; AVX2-NEXT: .LBB3_14: # %else17
873862 ; AVX2-NEXT: vpmovsxdq %xmm1, %ymm6
875864 ; AVX2-NEXT: testb $1, %al
876865 ; AVX2-NEXT: je .LBB3_16
877866 ; AVX2-NEXT: # %bb.15: # %cond.load19
878 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
879867 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
880868 ; AVX2-NEXT: vpinsrb $7, (%rax), %xmm3, %xmm3
881869 ; AVX2-NEXT: .LBB3_16: # %else20
901889 ; AVX2-NEXT: vpcmpeqb %xmm5, %xmm2, %xmm5
902890 ; AVX2-NEXT: vpextrb $10, %xmm5, %eax
903891 ; AVX2-NEXT: testb $1, %al
892 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
904893 ; AVX2-NEXT: je .LBB3_22
905894 ; AVX2-NEXT: # %bb.21: # %cond.load28
906 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm6
907 ; AVX2-NEXT: vmovq %xmm6, %rax
895 ; AVX2-NEXT: vmovq %xmm0, %rax
908896 ; AVX2-NEXT: vpinsrb $10, (%rax), %xmm3, %xmm3
909897 ; AVX2-NEXT: .LBB3_22: # %else29
910898 ; AVX2-NEXT: vpmovsxdq %xmm1, %ymm1
912900 ; AVX2-NEXT: testb $1, %al
913901 ; AVX2-NEXT: je .LBB3_24
914902 ; AVX2-NEXT: # %bb.23: # %cond.load31
915 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
916903 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
917904 ; AVX2-NEXT: vpinsrb $11, (%rax), %xmm3, %xmm3
918905 ; AVX2-NEXT: .LBB3_24: # %else32
937924 ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
938925 ; AVX2-NEXT: vpextrb $14, %xmm1, %eax
939926 ; AVX2-NEXT: testb $1, %al
927 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
940928 ; AVX2-NEXT: je .LBB3_30
941929 ; AVX2-NEXT: # %bb.29: # %cond.load40
942 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
943 ; AVX2-NEXT: vmovq %xmm2, %rax
930 ; AVX2-NEXT: vmovq %xmm0, %rax
944931 ; AVX2-NEXT: vpinsrb $14, (%rax), %xmm3, %xmm3
945932 ; AVX2-NEXT: .LBB3_30: # %else41
946933 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
947934 ; AVX2-NEXT: testb $1, %al
948935 ; AVX2-NEXT: je .LBB3_32
949936 ; AVX2-NEXT: # %bb.31: # %cond.load43
950 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
951937 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
952938 ; AVX2-NEXT: vpinsrb $15, (%rax), %xmm3, %xmm3
953939 ; AVX2-NEXT: .LBB3_32: # %else44
1008994 ; AVX512-NEXT: kshiftrw $4, %k0, %k1
1009995 ; AVX512-NEXT: kmovw %k1, %eax
1010996 ; AVX512-NEXT: testb $1, %al
997 ; AVX512-NEXT: vextracti32x4 $2, %zmm4, %xmm5
1011998 ; AVX512-NEXT: je .LBB3_10
1012999 ; AVX512-NEXT: # %bb.9: # %cond.load10
1013 ; AVX512-NEXT: vextracti32x4 $2, %zmm4, %xmm5
10141000 ; AVX512-NEXT: vmovq %xmm5, %rax
10151001 ; AVX512-NEXT: vpinsrb $4, (%rax), %xmm2, %xmm2
10161002 ; AVX512-NEXT: .LBB3_10: # %else11
10191005 ; AVX512-NEXT: testb $1, %al
10201006 ; AVX512-NEXT: je .LBB3_12
10211007 ; AVX512-NEXT: # %bb.11: # %cond.load13
1022 ; AVX512-NEXT: vextracti32x4 $2, %zmm4, %xmm5
10231008 ; AVX512-NEXT: vpextrq $1, %xmm5, %rax
10241009 ; AVX512-NEXT: vpinsrb $5, (%rax), %xmm2, %xmm2
10251010 ; AVX512-NEXT: .LBB3_12: # %else14
10311016 ; AVX512-NEXT: kshiftrw $6, %k0, %k1
10321017 ; AVX512-NEXT: kmovw %k1, %eax
10331018 ; AVX512-NEXT: testb $1, %al
1019 ; AVX512-NEXT: vextracti32x4 $3, %zmm4, %xmm4
10341020 ; AVX512-NEXT: je .LBB3_14
10351021 ; AVX512-NEXT: # %bb.13: # %cond.load16
1036 ; AVX512-NEXT: vextracti32x4 $3, %zmm4, %xmm5
1037 ; AVX512-NEXT: vmovq %xmm5, %rax
1022 ; AVX512-NEXT: vmovq %xmm4, %rax
10381023 ; AVX512-NEXT: vpinsrb $6, (%rax), %xmm2, %xmm2
10391024 ; AVX512-NEXT: .LBB3_14: # %else17
10401025 ; AVX512-NEXT: vpmovsxdq %ymm0, %zmm0
10431028 ; AVX512-NEXT: testb $1, %al
10441029 ; AVX512-NEXT: je .LBB3_16
10451030 ; AVX512-NEXT: # %bb.15: # %cond.load19
1046 ; AVX512-NEXT: vextracti32x4 $3, %zmm4, %xmm4
10471031 ; AVX512-NEXT: vpextrq $1, %xmm4, %rax
10481032 ; AVX512-NEXT: vpinsrb $7, (%rax), %xmm2, %xmm2
10491033 ; AVX512-NEXT: .LBB3_16: # %else20
10971081 ; AVX512-NEXT: kshiftrw $12, %k0, %k1
10981082 ; AVX512-NEXT: kmovw %k1, %eax
10991083 ; AVX512-NEXT: testb $1, %al
1084 ; AVX512-NEXT: vextracti32x4 $2, %zmm0, %xmm3
11001085 ; AVX512-NEXT: je .LBB3_26
11011086 ; AVX512-NEXT: # %bb.25: # %cond.load34
1102 ; AVX512-NEXT: vextracti32x4 $2, %zmm0, %xmm3
11031087 ; AVX512-NEXT: vmovq %xmm3, %rax
11041088 ; AVX512-NEXT: vpinsrb $12, (%rax), %xmm2, %xmm2
11051089 ; AVX512-NEXT: .LBB3_26: # %else35
11081092 ; AVX512-NEXT: testb $1, %al
11091093 ; AVX512-NEXT: je .LBB3_28
11101094 ; AVX512-NEXT: # %bb.27: # %cond.load37
1111 ; AVX512-NEXT: vextracti32x4 $2, %zmm0, %xmm3
11121095 ; AVX512-NEXT: vpextrq $1, %xmm3, %rax
11131096 ; AVX512-NEXT: vpinsrb $13, (%rax), %xmm2, %xmm2
11141097 ; AVX512-NEXT: .LBB3_28: # %else38
11191102 ; AVX512-NEXT: kshiftrw $14, %k0, %k1
11201103 ; AVX512-NEXT: kmovw %k1, %eax
11211104 ; AVX512-NEXT: testb $1, %al
1105 ; AVX512-NEXT: vextracti32x4 $3, %zmm0, %xmm0
11221106 ; AVX512-NEXT: je .LBB3_30
11231107 ; AVX512-NEXT: # %bb.29: # %cond.load40
1124 ; AVX512-NEXT: vextracti32x4 $3, %zmm0, %xmm1
1125 ; AVX512-NEXT: vmovq %xmm1, %rax
1108 ; AVX512-NEXT: vmovq %xmm0, %rax
11261109 ; AVX512-NEXT: vpinsrb $14, (%rax), %xmm2, %xmm2
11271110 ; AVX512-NEXT: .LBB3_30: # %else41
11281111 ; AVX512-NEXT: kshiftrw $15, %k0, %k0
11301113 ; AVX512-NEXT: testb $1, %al
11311114 ; AVX512-NEXT: je .LBB3_32
11321115 ; AVX512-NEXT: # %bb.31: # %cond.load43
1133 ; AVX512-NEXT: vextracti32x4 $3, %zmm0, %xmm0
11341116 ; AVX512-NEXT: vpextrq $1, %xmm0, %rax
11351117 ; AVX512-NEXT: vpinsrb $15, (%rax), %xmm2, %xmm2
11361118 ; AVX512-NEXT: .LBB3_32: # %else44
21502150 ; AVX1-NEXT: ## %bb.15: ## %cond.store13
21512151 ; AVX1-NEXT: vpextrw $7, %xmm1, 14(%rdi)
21522152 ; AVX1-NEXT: LBB14_16: ## %else14
2153 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
2154 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
2155 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm2
2156 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
2153 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
2154 ; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
2155 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm2, %xmm3
2156 ; AVX1-NEXT: vpextrb $0, %xmm3, %eax
21572157 ; AVX1-NEXT: testb $1, %al
2158 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
21582159 ; AVX1-NEXT: je LBB14_18
21592160 ; AVX1-NEXT: ## %bb.17: ## %cond.store15
2160 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
2161 ; AVX1-NEXT: vpextrw $0, %xmm3, 16(%rdi)
2161 ; AVX1-NEXT: vpextrw $0, %xmm0, 16(%rdi)
21622162 ; AVX1-NEXT: LBB14_18: ## %else16
2163 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax
2163 ; AVX1-NEXT: vpextrb $2, %xmm3, %eax
21642164 ; AVX1-NEXT: testb $1, %al
21652165 ; AVX1-NEXT: je LBB14_20
21662166 ; AVX1-NEXT: ## %bb.19: ## %cond.store17
2167 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2168 ; AVX1-NEXT: vpextrw $1, %xmm2, 18(%rdi)
2167 ; AVX1-NEXT: vpextrw $1, %xmm0, 18(%rdi)
21692168 ; AVX1-NEXT: LBB14_20: ## %else18
2170 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
2171 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm2
2172 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
2169 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2170 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1
2171 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
21732172 ; AVX1-NEXT: testb $1, %al
21742173 ; AVX1-NEXT: je LBB14_22
21752174 ; AVX1-NEXT: ## %bb.21: ## %cond.store19
2176 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
2177 ; AVX1-NEXT: vpextrw $2, %xmm3, 20(%rdi)
2175 ; AVX1-NEXT: vpextrw $2, %xmm0, 20(%rdi)
21782176 ; AVX1-NEXT: LBB14_22: ## %else20
2179 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
2177 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
21802178 ; AVX1-NEXT: testb $1, %al
21812179 ; AVX1-NEXT: je LBB14_24
21822180 ; AVX1-NEXT: ## %bb.23: ## %cond.store21
2183 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2184 ; AVX1-NEXT: vpextrw $3, %xmm2, 22(%rdi)
2181 ; AVX1-NEXT: vpextrw $3, %xmm0, 22(%rdi)
21852182 ; AVX1-NEXT: LBB14_24: ## %else22
2186 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
2187 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm2
2188 ; AVX1-NEXT: vpextrb $8, %xmm2, %eax
2183 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2184 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1
2185 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
21892186 ; AVX1-NEXT: testb $1, %al
21902187 ; AVX1-NEXT: je LBB14_26
21912188 ; AVX1-NEXT: ## %bb.25: ## %cond.store23
2192 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
2193 ; AVX1-NEXT: vpextrw $4, %xmm3, 24(%rdi)
2189 ; AVX1-NEXT: vpextrw $4, %xmm0, 24(%rdi)
21942190 ; AVX1-NEXT: LBB14_26: ## %else24
2195 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax
2191 ; AVX1-NEXT: vpextrb $10, %xmm1, %eax
21962192 ; AVX1-NEXT: testb $1, %al
21972193 ; AVX1-NEXT: je LBB14_28
21982194 ; AVX1-NEXT: ## %bb.27: ## %cond.store25
2199 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2200 ; AVX1-NEXT: vpextrw $5, %xmm2, 26(%rdi)
2195 ; AVX1-NEXT: vpextrw $5, %xmm0, 26(%rdi)
22012196 ; AVX1-NEXT: LBB14_28: ## %else26
2202 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
2203 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0
2204 ; AVX1-NEXT: vpextrb $12, %xmm0, %eax
2197 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
2198 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1
2199 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
22052200 ; AVX1-NEXT: testb $1, %al
22062201 ; AVX1-NEXT: je LBB14_30
22072202 ; AVX1-NEXT: ## %bb.29: ## %cond.store27
2208 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2209 ; AVX1-NEXT: vpextrw $6, %xmm2, 28(%rdi)
2203 ; AVX1-NEXT: vpextrw $6, %xmm0, 28(%rdi)
22102204 ; AVX1-NEXT: LBB14_30: ## %else28
2211 ; AVX1-NEXT: vpextrb $14, %xmm0, %eax
2205 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
22122206 ; AVX1-NEXT: testb $1, %al
22132207 ; AVX1-NEXT: je LBB14_32
22142208 ; AVX1-NEXT: ## %bb.31: ## %cond.store29
2215 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
22162209 ; AVX1-NEXT: vpextrw $7, %xmm0, 30(%rdi)
22172210 ; AVX1-NEXT: LBB14_32: ## %else30
22182211 ; AVX1-NEXT: vzeroupper
22812274 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm2
22822275 ; AVX2-NEXT: vpextrb $0, %xmm2, %eax
22832276 ; AVX2-NEXT: testb $1, %al
2277 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1
22842278 ; AVX2-NEXT: je LBB14_18
22852279 ; AVX2-NEXT: ## %bb.17: ## %cond.store15
2286 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
2287 ; AVX2-NEXT: vpextrw $0, %xmm3, 16(%rdi)
2280 ; AVX2-NEXT: vpextrw $0, %xmm1, 16(%rdi)
22882281 ; AVX2-NEXT: LBB14_18: ## %else16
22892282 ; AVX2-NEXT: vpextrb $2, %xmm2, %eax
22902283 ; AVX2-NEXT: testb $1, %al
22912284 ; AVX2-NEXT: je LBB14_20
22922285 ; AVX2-NEXT: ## %bb.19: ## %cond.store17
2293 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
2294 ; AVX2-NEXT: vpextrw $1, %xmm2, 18(%rdi)
2286 ; AVX2-NEXT: vpextrw $1, %xmm1, 18(%rdi)
22952287 ; AVX2-NEXT: LBB14_20: ## %else18
22962288 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
22972289 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm2
23002292 ; AVX2-NEXT: testb $1, %al
23012293 ; AVX2-NEXT: je LBB14_22
23022294 ; AVX2-NEXT: ## %bb.21: ## %cond.store19
2303 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
2304 ; AVX2-NEXT: vpextrw $2, %xmm3, 20(%rdi)
2295 ; AVX2-NEXT: vpextrw $2, %xmm1, 20(%rdi)
23052296 ; AVX2-NEXT: LBB14_22: ## %else20
23062297 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
23072298 ; AVX2-NEXT: testb $1, %al
23082299 ; AVX2-NEXT: je LBB14_24
23092300 ; AVX2-NEXT: ## %bb.23: ## %cond.store21
2310 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
2311 ; AVX2-NEXT: vpextrw $3, %xmm2, 22(%rdi)
2301 ; AVX2-NEXT: vpextrw $3, %xmm1, 22(%rdi)
23122302 ; AVX2-NEXT: LBB14_24: ## %else22
23132303 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
23142304 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm2
23172307 ; AVX2-NEXT: testb $1, %al
23182308 ; AVX2-NEXT: je LBB14_26
23192309 ; AVX2-NEXT: ## %bb.25: ## %cond.store23
2320 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
2321 ; AVX2-NEXT: vpextrw $4, %xmm3, 24(%rdi)
2310 ; AVX2-NEXT: vpextrw $4, %xmm1, 24(%rdi)
23222311 ; AVX2-NEXT: LBB14_26: ## %else24
23232312 ; AVX2-NEXT: vpextrb $10, %xmm2, %eax
23242313 ; AVX2-NEXT: testb $1, %al
23252314 ; AVX2-NEXT: je LBB14_28
23262315 ; AVX2-NEXT: ## %bb.27: ## %cond.store25
2327 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
2328 ; AVX2-NEXT: vpextrw $5, %xmm2, 26(%rdi)
2316 ; AVX2-NEXT: vpextrw $5, %xmm1, 26(%rdi)
23292317 ; AVX2-NEXT: LBB14_28: ## %else26
23302318 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
23312319 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
23342322 ; AVX2-NEXT: testb $1, %al
23352323 ; AVX2-NEXT: je LBB14_30
23362324 ; AVX2-NEXT: ## %bb.29: ## %cond.store27
2337 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
2338 ; AVX2-NEXT: vpextrw $6, %xmm2, 28(%rdi)
2325 ; AVX2-NEXT: vpextrw $6, %xmm1, 28(%rdi)
23392326 ; AVX2-NEXT: LBB14_30: ## %else28
23402327 ; AVX2-NEXT: vpextrb $14, %xmm0, %eax
23412328 ; AVX2-NEXT: testb $1, %al
23422329 ; AVX2-NEXT: je LBB14_32
23432330 ; AVX2-NEXT: ## %bb.31: ## %cond.store29
2344 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0
2345 ; AVX2-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2331 ; AVX2-NEXT: vpextrw $7, %xmm1, 30(%rdi)
23462332 ; AVX2-NEXT: LBB14_32: ## %else30
23472333 ; AVX2-NEXT: vzeroupper
23482334 ; AVX2-NEXT: retq
24272413 ; AVX512F-NEXT: kshiftrw $8, %k0, %k1
24282414 ; AVX512F-NEXT: kmovw %k1, %eax
24292415 ; AVX512F-NEXT: testb $1, %al
2416 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm1
24302417 ; AVX512F-NEXT: je LBB14_18
24312418 ; AVX512F-NEXT: ## %bb.17: ## %cond.store15
2432 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2433 ; AVX512F-NEXT: vpextrw $0, %xmm2, 16(%rdi)
2419 ; AVX512F-NEXT: vpextrw $0, %xmm1, 16(%rdi)
24342420 ; AVX512F-NEXT: LBB14_18: ## %else16
24352421 ; AVX512F-NEXT: kshiftrw $9, %k0, %k0
24362422 ; AVX512F-NEXT: kmovw %k0, %eax
24372423 ; AVX512F-NEXT: testb $1, %al
24382424 ; AVX512F-NEXT: je LBB14_20
24392425 ; AVX512F-NEXT: ## %bb.19: ## %cond.store17
2440 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2441 ; AVX512F-NEXT: vpextrw $1, %xmm2, 18(%rdi)
2426 ; AVX512F-NEXT: vpextrw $1, %xmm1, 18(%rdi)
24422427 ; AVX512F-NEXT: LBB14_20: ## %else18
24432428 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
24442429 ; AVX512F-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm2
24492434 ; AVX512F-NEXT: testb $1, %al
24502435 ; AVX512F-NEXT: je LBB14_22
24512436 ; AVX512F-NEXT: ## %bb.21: ## %cond.store19
2452 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2453 ; AVX512F-NEXT: vpextrw $2, %xmm2, 20(%rdi)
2437 ; AVX512F-NEXT: vpextrw $2, %xmm1, 20(%rdi)
24542438 ; AVX512F-NEXT: LBB14_22: ## %else20
24552439 ; AVX512F-NEXT: kshiftrw $11, %k0, %k0
24562440 ; AVX512F-NEXT: kmovw %k0, %eax
24572441 ; AVX512F-NEXT: testb $1, %al
24582442 ; AVX512F-NEXT: je LBB14_24
24592443 ; AVX512F-NEXT: ## %bb.23: ## %cond.store21
2460 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2461 ; AVX512F-NEXT: vpextrw $3, %xmm2, 22(%rdi)
2444 ; AVX512F-NEXT: vpextrw $3, %xmm1, 22(%rdi)
24622445 ; AVX512F-NEXT: LBB14_24: ## %else22
24632446 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
24642447 ; AVX512F-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm2
24692452 ; AVX512F-NEXT: testb $1, %al
24702453 ; AVX512F-NEXT: je LBB14_26
24712454 ; AVX512F-NEXT: ## %bb.25: ## %cond.store23
2472 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2473 ; AVX512F-NEXT: vpextrw $4, %xmm2, 24(%rdi)
2455 ; AVX512F-NEXT: vpextrw $4, %xmm1, 24(%rdi)
24742456 ; AVX512F-NEXT: LBB14_26: ## %else24
24752457 ; AVX512F-NEXT: kshiftrw $13, %k0, %k0
24762458 ; AVX512F-NEXT: kmovw %k0, %eax
24772459 ; AVX512F-NEXT: testb $1, %al
24782460 ; AVX512F-NEXT: je LBB14_28
24792461 ; AVX512F-NEXT: ## %bb.27: ## %cond.store25
2480 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2481 ; AVX512F-NEXT: vpextrw $5, %xmm2, 26(%rdi)
2462 ; AVX512F-NEXT: vpextrw $5, %xmm1, 26(%rdi)
24822463 ; AVX512F-NEXT: LBB14_28: ## %else26
24832464 ; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2
24842465 ; AVX512F-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
24892470 ; AVX512F-NEXT: testb $1, %al
24902471 ; AVX512F-NEXT: je LBB14_30
24912472 ; AVX512F-NEXT: ## %bb.29: ## %cond.store27
2492 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm0
2493 ; AVX512F-NEXT: vpextrw $6, %xmm0, 28(%rdi)
2473 ; AVX512F-NEXT: vpextrw $6, %xmm1, 28(%rdi)
24942474 ; AVX512F-NEXT: LBB14_30: ## %else28
24952475 ; AVX512F-NEXT: kshiftrw $15, %k0, %k0
24962476 ; AVX512F-NEXT: kmovw %k0, %eax
24972477 ; AVX512F-NEXT: testb $1, %al
24982478 ; AVX512F-NEXT: je LBB14_32
24992479 ; AVX512F-NEXT: ## %bb.31: ## %cond.store29
2500 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm0
2501 ; AVX512F-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2480 ; AVX512F-NEXT: vpextrw $7, %xmm1, 30(%rdi)
25022481 ; AVX512F-NEXT: LBB14_32: ## %else30
25032482 ; AVX512F-NEXT: vzeroupper
25042483 ; AVX512F-NEXT: retq
25832562 ; AVX512VLDQ-NEXT: kshiftrw $8, %k0, %k1
25842563 ; AVX512VLDQ-NEXT: kmovw %k1, %eax
25852564 ; AVX512VLDQ-NEXT: testb $1, %al
2565 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm1
25862566 ; AVX512VLDQ-NEXT: je LBB14_18
25872567 ; AVX512VLDQ-NEXT: ## %bb.17: ## %cond.store15
2588 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2589 ; AVX512VLDQ-NEXT: vpextrw $0, %xmm2, 16(%rdi)
2568 ; AVX512VLDQ-NEXT: vpextrw $0, %xmm1, 16(%rdi)
25902569 ; AVX512VLDQ-NEXT: LBB14_18: ## %else16
25912570 ; AVX512VLDQ-NEXT: kshiftrw $9, %k0, %k0
25922571 ; AVX512VLDQ-NEXT: kmovw %k0, %eax
25932572 ; AVX512VLDQ-NEXT: testb $1, %al
25942573 ; AVX512VLDQ-NEXT: je LBB14_20
25952574 ; AVX512VLDQ-NEXT: ## %bb.19: ## %cond.store17
2596 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2597 ; AVX512VLDQ-NEXT: vpextrw $1, %xmm2, 18(%rdi)
2575 ; AVX512VLDQ-NEXT: vpextrw $1, %xmm1, 18(%rdi)
25982576 ; AVX512VLDQ-NEXT: LBB14_20: ## %else18
25992577 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
26002578 ; AVX512VLDQ-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm2
26052583 ; AVX512VLDQ-NEXT: testb $1, %al
26062584 ; AVX512VLDQ-NEXT: je LBB14_22
26072585 ; AVX512VLDQ-NEXT: ## %bb.21: ## %cond.store19
2608 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2609 ; AVX512VLDQ-NEXT: vpextrw $2, %xmm2, 20(%rdi)
2586 ; AVX512VLDQ-NEXT: vpextrw $2, %xmm1, 20(%rdi)
26102587 ; AVX512VLDQ-NEXT: LBB14_22: ## %else20
26112588 ; AVX512VLDQ-NEXT: kshiftrw $11, %k0, %k0
26122589 ; AVX512VLDQ-NEXT: kmovw %k0, %eax
26132590 ; AVX512VLDQ-NEXT: testb $1, %al
26142591 ; AVX512VLDQ-NEXT: je LBB14_24
26152592 ; AVX512VLDQ-NEXT: ## %bb.23: ## %cond.store21
2616 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2617 ; AVX512VLDQ-NEXT: vpextrw $3, %xmm2, 22(%rdi)
2593 ; AVX512VLDQ-NEXT: vpextrw $3, %xmm1, 22(%rdi)
26182594 ; AVX512VLDQ-NEXT: LBB14_24: ## %else22
26192595 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
26202596 ; AVX512VLDQ-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm2
26252601 ; AVX512VLDQ-NEXT: testb $1, %al
26262602 ; AVX512VLDQ-NEXT: je LBB14_26
26272603 ; AVX512VLDQ-NEXT: ## %bb.25: ## %cond.store23
2628 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2629 ; AVX512VLDQ-NEXT: vpextrw $4, %xmm2, 24(%rdi)
2604 ; AVX512VLDQ-NEXT: vpextrw $4, %xmm1, 24(%rdi)
26302605 ; AVX512VLDQ-NEXT: LBB14_26: ## %else24
26312606 ; AVX512VLDQ-NEXT: kshiftrw $13, %k0, %k0
26322607 ; AVX512VLDQ-NEXT: kmovw %k0, %eax
26332608 ; AVX512VLDQ-NEXT: testb $1, %al
26342609 ; AVX512VLDQ-NEXT: je LBB14_28
26352610 ; AVX512VLDQ-NEXT: ## %bb.27: ## %cond.store25
2636 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2637 ; AVX512VLDQ-NEXT: vpextrw $5, %xmm2, 26(%rdi)
2611 ; AVX512VLDQ-NEXT: vpextrw $5, %xmm1, 26(%rdi)
26382612 ; AVX512VLDQ-NEXT: LBB14_28: ## %else26
26392613 ; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2
26402614 ; AVX512VLDQ-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
26452619 ; AVX512VLDQ-NEXT: testb $1, %al
26462620 ; AVX512VLDQ-NEXT: je LBB14_30
26472621 ; AVX512VLDQ-NEXT: ## %bb.29: ## %cond.store27
2648 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm0
2649 ; AVX512VLDQ-NEXT: vpextrw $6, %xmm0, 28(%rdi)
2622 ; AVX512VLDQ-NEXT: vpextrw $6, %xmm1, 28(%rdi)
26502623 ; AVX512VLDQ-NEXT: LBB14_30: ## %else28
26512624 ; AVX512VLDQ-NEXT: kshiftrw $15, %k0, %k0
26522625 ; AVX512VLDQ-NEXT: kmovw %k0, %eax
26532626 ; AVX512VLDQ-NEXT: testb $1, %al
26542627 ; AVX512VLDQ-NEXT: je LBB14_32
26552628 ; AVX512VLDQ-NEXT: ## %bb.31: ## %cond.store29
2656 ; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm0
2657 ; AVX512VLDQ-NEXT: vpextrw $7, %xmm0, 30(%rdi)
2629 ; AVX512VLDQ-NEXT: vpextrw $7, %xmm1, 30(%rdi)
26582630 ; AVX512VLDQ-NEXT: LBB14_32: ## %else30
26592631 ; AVX512VLDQ-NEXT: vzeroupper
26602632 ; AVX512VLDQ-NEXT: retq
26792651 ; SSE2: ## %bb.0:
26802652 ; SSE2-NEXT: pxor %xmm2, %xmm2
26812653 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2682 ; SSE2-NEXT: movd %xmm2, %eax
2683 ; SSE2-NEXT: testb $1, %al
2654 ; SSE2-NEXT: movd %xmm2, %ecx
2655 ; SSE2-NEXT: testb $1, %cl
2656 ; SSE2-NEXT: movd %xmm1, %eax
26842657 ; SSE2-NEXT: je LBB15_2
26852658 ; SSE2-NEXT: ## %bb.1: ## %cond.store
2686 ; SSE2-NEXT: movd %xmm1, %ecx
2687 ; SSE2-NEXT: movb %cl, (%rdi)
2659 ; SSE2-NEXT: movb %al, (%rdi)
26882660 ; SSE2-NEXT: LBB15_2: ## %else
2689 ; SSE2-NEXT: shrl $8, %eax
2690 ; SSE2-NEXT: testb $1, %al
2661 ; SSE2-NEXT: shrl $8, %ecx
2662 ; SSE2-NEXT: testb $1, %cl
26912663 ; SSE2-NEXT: je LBB15_4
26922664 ; SSE2-NEXT: ## %bb.3: ## %cond.store1
2693 ; SSE2-NEXT: movd %xmm1, %eax
26942665 ; SSE2-NEXT: movb %ah, 1(%rdi)
26952666 ; SSE2-NEXT: LBB15_4: ## %else2
26962667 ; SSE2-NEXT: pxor %xmm2, %xmm2
26972668 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2698 ; SSE2-NEXT: movd %xmm2, %eax
2699 ; SSE2-NEXT: movl %eax, %ecx
2700 ; SSE2-NEXT: shrl $16, %ecx
2701 ; SSE2-NEXT: testb $1, %cl
2669 ; SSE2-NEXT: movd %xmm2, %ecx
2670 ; SSE2-NEXT: movl %ecx, %edx
2671 ; SSE2-NEXT: shrl $16, %edx
2672 ; SSE2-NEXT: testb $1, %dl
27022673 ; SSE2-NEXT: je LBB15_6
27032674 ; SSE2-NEXT: ## %bb.5: ## %cond.store3
2704 ; SSE2-NEXT: movd %xmm1, %ecx
2705 ; SSE2-NEXT: shrl $16, %ecx
2706 ; SSE2-NEXT: movb %cl, 2(%rdi)
2675 ; SSE2-NEXT: movl %eax, %edx
2676 ; SSE2-NEXT: shrl $16, %edx
2677 ; SSE2-NEXT: movb %dl, 2(%rdi)
27072678 ; SSE2-NEXT: LBB15_6: ## %else4
2708 ; SSE2-NEXT: shrl $24, %eax
2709 ; SSE2-NEXT: testb $1, %al
2679 ; SSE2-NEXT: shrl $24, %ecx
2680 ; SSE2-NEXT: testb $1, %cl
27102681 ; SSE2-NEXT: je LBB15_8
27112682 ; SSE2-NEXT: ## %bb.7: ## %cond.store5
2712 ; SSE2-NEXT: movd %xmm1, %eax
27132683 ; SSE2-NEXT: shrl $24, %eax
27142684 ; SSE2-NEXT: movb %al, 3(%rdi)
27152685 ; SSE2-NEXT: LBB15_8: ## %else6
27162686 ; SSE2-NEXT: pxor %xmm2, %xmm2
27172687 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2718 ; SSE2-NEXT: pextrw $2, %xmm2, %eax
2719 ; SSE2-NEXT: testb $1, %al
2688 ; SSE2-NEXT: pextrw $2, %xmm2, %ecx
2689 ; SSE2-NEXT: testb $1, %cl
2690 ; SSE2-NEXT: pextrw $2, %xmm1, %eax
27202691 ; SSE2-NEXT: je LBB15_10
27212692 ; SSE2-NEXT: ## %bb.9: ## %cond.store7
2722 ; SSE2-NEXT: pextrw $2, %xmm1, %ecx
2723 ; SSE2-NEXT: movb %cl, 4(%rdi)
2693 ; SSE2-NEXT: movb %al, 4(%rdi)
27242694 ; SSE2-NEXT: LBB15_10: ## %else8
2725 ; SSE2-NEXT: shrl $8, %eax
2726 ; SSE2-NEXT: testb $1, %al
2695 ; SSE2-NEXT: shrl $8, %ecx
2696 ; SSE2-NEXT: testb $1, %cl
27272697 ; SSE2-NEXT: je LBB15_12
27282698 ; SSE2-NEXT: ## %bb.11: ## %cond.store9
2729 ; SSE2-NEXT: pextrw $2, %xmm1, %eax
27302699 ; SSE2-NEXT: movb %ah, 5(%rdi)
27312700 ; SSE2-NEXT: LBB15_12: ## %else10
27322701 ; SSE2-NEXT: pxor %xmm2, %xmm2
27332702 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2734 ; SSE2-NEXT: pextrw $3, %xmm2, %eax
2735 ; SSE2-NEXT: testb $1, %al
2703 ; SSE2-NEXT: pextrw $3, %xmm2, %ecx
2704 ; SSE2-NEXT: testb $1, %cl
2705 ; SSE2-NEXT: pextrw $3, %xmm1, %eax
27362706 ; SSE2-NEXT: je LBB15_14
27372707 ; SSE2-NEXT: ## %bb.13: ## %cond.store11
2738 ; SSE2-NEXT: pextrw $3, %xmm1, %ecx
2739 ; SSE2-NEXT: movb %cl, 6(%rdi)
2708 ; SSE2-NEXT: movb %al, 6(%rdi)
27402709 ; SSE2-NEXT: LBB15_14: ## %else12
2741 ; SSE2-NEXT: shrl $8, %eax
2742 ; SSE2-NEXT: testb $1, %al
2710 ; SSE2-NEXT: shrl $8, %ecx
2711 ; SSE2-NEXT: testb $1, %cl
27432712 ; SSE2-NEXT: je LBB15_16
27442713 ; SSE2-NEXT: ## %bb.15: ## %cond.store13
2745 ; SSE2-NEXT: pextrw $3, %xmm1, %eax
27462714 ; SSE2-NEXT: movb %ah, 7(%rdi)
27472715 ; SSE2-NEXT: LBB15_16: ## %else14
27482716 ; SSE2-NEXT: pxor %xmm2, %xmm2
27492717 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2750 ; SSE2-NEXT: pextrw $4, %xmm2, %eax
2751 ; SSE2-NEXT: testb $1, %al
2718 ; SSE2-NEXT: pextrw $4, %xmm2, %ecx
2719 ; SSE2-NEXT: testb $1, %cl
2720 ; SSE2-NEXT: pextrw $4, %xmm1, %eax
27522721 ; SSE2-NEXT: je LBB15_18
27532722 ; SSE2-NEXT: ## %bb.17: ## %cond.store15
2754 ; SSE2-NEXT: pextrw $4, %xmm1, %ecx
2755 ; SSE2-NEXT: movb %cl, 8(%rdi)
2723 ; SSE2-NEXT: movb %al, 8(%rdi)
27562724 ; SSE2-NEXT: LBB15_18: ## %else16
2757 ; SSE2-NEXT: shrl $8, %eax
2758 ; SSE2-NEXT: testb $1, %al
2725 ; SSE2-NEXT: shrl $8, %ecx
2726 ; SSE2-NEXT: testb $1, %cl
27592727 ; SSE2-NEXT: je LBB15_20
27602728 ; SSE2-NEXT: ## %bb.19: ## %cond.store17
2761 ; SSE2-NEXT: pextrw $4, %xmm1, %eax
27622729 ; SSE2-NEXT: movb %ah, 9(%rdi)
27632730 ; SSE2-NEXT: LBB15_20: ## %else18
27642731 ; SSE2-NEXT: pxor %xmm2, %xmm2
27652732 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2766 ; SSE2-NEXT: pextrw $5, %xmm2, %eax
2767 ; SSE2-NEXT: testb $1, %al
2733 ; SSE2-NEXT: pextrw $5, %xmm2, %ecx
2734 ; SSE2-NEXT: testb $1, %cl
2735 ; SSE2-NEXT: pextrw $5, %xmm1, %eax
27682736 ; SSE2-NEXT: je LBB15_22
27692737 ; SSE2-NEXT: ## %bb.21: ## %cond.store19
2770 ; SSE2-NEXT: pextrw $5, %xmm1, %ecx
2771 ; SSE2-NEXT: movb %cl, 10(%rdi)
2738 ; SSE2-NEXT: movb %al, 10(%rdi)
27722739 ; SSE2-NEXT: LBB15_22: ## %else20
2773 ; SSE2-NEXT: shrl $8, %eax
2774 ; SSE2-NEXT: testb $1, %al
2740 ; SSE2-NEXT: shrl $8, %ecx
2741 ; SSE2-NEXT: testb $1, %cl
27752742 ; SSE2-NEXT: je LBB15_24
27762743 ; SSE2-NEXT: ## %bb.23: ## %cond.store21
2777 ; SSE2-NEXT: pextrw $5, %xmm1, %eax
27782744 ; SSE2-NEXT: movb %ah, 11(%rdi)
27792745 ; SSE2-NEXT: LBB15_24: ## %else22
27802746 ; SSE2-NEXT: pxor %xmm2, %xmm2
27812747 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm2
2782 ; SSE2-NEXT: pextrw $6, %xmm2, %eax
2783 ; SSE2-NEXT: testb $1, %al
2748 ; SSE2-NEXT: pextrw $6, %xmm2, %ecx
2749 ; SSE2-NEXT: testb $1, %cl
2750 ; SSE2-NEXT: pextrw $6, %xmm1, %eax
27842751 ; SSE2-NEXT: je LBB15_26
27852752 ; SSE2-NEXT: ## %bb.25: ## %cond.store23
2786 ; SSE2-NEXT: pextrw $6, %xmm1, %ecx
2787 ; SSE2-NEXT: movb %cl, 12(%rdi)
2753 ; SSE2-NEXT: movb %al, 12(%rdi)
27882754 ; SSE2-NEXT: LBB15_26: ## %else24
2789 ; SSE2-NEXT: shrl $8, %eax
2790 ; SSE2-NEXT: testb $1, %al
2755 ; SSE2-NEXT: shrl $8, %ecx
2756 ; SSE2-NEXT: testb $1, %cl
27912757 ; SSE2-NEXT: je LBB15_28
27922758 ; SSE2-NEXT: ## %bb.27: ## %cond.store25
2793 ; SSE2-NEXT: pextrw $6, %xmm1, %eax
27942759 ; SSE2-NEXT: movb %ah, 13(%rdi)
27952760 ; SSE2-NEXT: LBB15_28: ## %else26
27962761 ; SSE2-NEXT: pxor %xmm2, %xmm2
27972762 ; SSE2-NEXT: pcmpeqb %xmm2, %xmm0
2798 ; SSE2-NEXT: pextrw $7, %xmm0, %eax
2799 ; SSE2-NEXT: testb $1, %al
2763 ; SSE2-NEXT: pextrw $7, %xmm0, %ecx
2764 ; SSE2-NEXT: testb $1, %cl
2765 ; SSE2-NEXT: pextrw $7, %xmm1, %eax
28002766 ; SSE2-NEXT: je LBB15_30
28012767 ; SSE2-NEXT: ## %bb.29: ## %cond.store27
2802 ; SSE2-NEXT: pextrw $7, %xmm1, %ecx
2803 ; SSE2-NEXT: movb %cl, 14(%rdi)
2768 ; SSE2-NEXT: movb %al, 14(%rdi)
28042769 ; SSE2-NEXT: LBB15_30: ## %else28
2805 ; SSE2-NEXT: shrl $8, %eax
2806 ; SSE2-NEXT: testb $1, %al
2770 ; SSE2-NEXT: shrl $8, %ecx
2771 ; SSE2-NEXT: testb $1, %cl
28072772 ; SSE2-NEXT: je LBB15_32
28082773 ; SSE2-NEXT: ## %bb.31: ## %cond.store29
2809 ; SSE2-NEXT: pextrw $7, %xmm1, %eax
28102774 ; SSE2-NEXT: movb %ah, 15(%rdi)
28112775 ; SSE2-NEXT: LBB15_32: ## %else30
28122776 ; SSE2-NEXT: retq
33543318 ; SSE2: ## %bb.0:
33553319 ; SSE2-NEXT: pxor %xmm4, %xmm4
33563320 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3357 ; SSE2-NEXT: movd %xmm4, %eax
3358 ; SSE2-NEXT: testb $1, %al
3321 ; SSE2-NEXT: movd %xmm4, %ecx
3322 ; SSE2-NEXT: testb $1, %cl
3323 ; SSE2-NEXT: movd %xmm2, %eax
33593324 ; SSE2-NEXT: je LBB16_2
33603325 ; SSE2-NEXT: ## %bb.1: ## %cond.store
3361 ; SSE2-NEXT: movd %xmm2, %ecx
3362 ; SSE2-NEXT: movb %cl, (%rdi)
3326 ; SSE2-NEXT: movb %al, (%rdi)
33633327 ; SSE2-NEXT: LBB16_2: ## %else
3364 ; SSE2-NEXT: shrl $8, %eax
3365 ; SSE2-NEXT: testb $1, %al
3328 ; SSE2-NEXT: shrl $8, %ecx
3329 ; SSE2-NEXT: testb $1, %cl
33663330 ; SSE2-NEXT: je LBB16_4
33673331 ; SSE2-NEXT: ## %bb.3: ## %cond.store1
3368 ; SSE2-NEXT: movd %xmm2, %eax
33693332 ; SSE2-NEXT: movb %ah, 1(%rdi)
33703333 ; SSE2-NEXT: LBB16_4: ## %else2
33713334 ; SSE2-NEXT: pxor %xmm4, %xmm4
33723335 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3373 ; SSE2-NEXT: movd %xmm4, %eax
3374 ; SSE2-NEXT: movl %eax, %ecx
3375 ; SSE2-NEXT: shrl $16, %ecx
3376 ; SSE2-NEXT: testb $1, %cl
3336 ; SSE2-NEXT: movd %xmm4, %ecx
3337 ; SSE2-NEXT: movl %ecx, %edx
3338 ; SSE2-NEXT: shrl $16, %edx
3339 ; SSE2-NEXT: testb $1, %dl
33773340 ; SSE2-NEXT: je LBB16_6
33783341 ; SSE2-NEXT: ## %bb.5: ## %cond.store3
3379 ; SSE2-NEXT: movd %xmm2, %ecx
3380 ; SSE2-NEXT: shrl $16, %ecx
3381 ; SSE2-NEXT: movb %cl, 2(%rdi)
3342 ; SSE2-NEXT: movl %eax, %edx
3343 ; SSE2-NEXT: shrl $16, %edx
3344 ; SSE2-NEXT: movb %dl, 2(%rdi)
33823345 ; SSE2-NEXT: LBB16_6: ## %else4
3383 ; SSE2-NEXT: shrl $24, %eax
3384 ; SSE2-NEXT: testb $1, %al
3346 ; SSE2-NEXT: shrl $24, %ecx
3347 ; SSE2-NEXT: testb $1, %cl
33853348 ; SSE2-NEXT: je LBB16_8
33863349 ; SSE2-NEXT: ## %bb.7: ## %cond.store5
3387 ; SSE2-NEXT: movd %xmm2, %eax
33883350 ; SSE2-NEXT: shrl $24, %eax
33893351 ; SSE2-NEXT: movb %al, 3(%rdi)
33903352 ; SSE2-NEXT: LBB16_8: ## %else6
33913353 ; SSE2-NEXT: pxor %xmm4, %xmm4
33923354 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3393 ; SSE2-NEXT: pextrw $2, %xmm4, %eax
3394 ; SSE2-NEXT: testb $1, %al
3355 ; SSE2-NEXT: pextrw $2, %xmm4, %ecx
3356 ; SSE2-NEXT: testb $1, %cl
3357 ; SSE2-NEXT: pextrw $2, %xmm2, %eax
33953358 ; SSE2-NEXT: je LBB16_10
33963359 ; SSE2-NEXT: ## %bb.9: ## %cond.store7
3397 ; SSE2-NEXT: pextrw $2, %xmm2, %ecx
3398 ; SSE2-NEXT: movb %cl, 4(%rdi)
3360 ; SSE2-NEXT: movb %al, 4(%rdi)
33993361 ; SSE2-NEXT: LBB16_10: ## %else8
3400 ; SSE2-NEXT: shrl $8, %eax
3401 ; SSE2-NEXT: testb $1, %al
3362 ; SSE2-NEXT: shrl $8, %ecx
3363 ; SSE2-NEXT: testb $1, %cl
34023364 ; SSE2-NEXT: je LBB16_12
34033365 ; SSE2-NEXT: ## %bb.11: ## %cond.store9
3404 ; SSE2-NEXT: pextrw $2, %xmm2, %eax
34053366 ; SSE2-NEXT: movb %ah, 5(%rdi)
34063367 ; SSE2-NEXT: LBB16_12: ## %else10
34073368 ; SSE2-NEXT: pxor %xmm4, %xmm4
34083369 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3409 ; SSE2-NEXT: pextrw $3, %xmm4, %eax
3410 ; SSE2-NEXT: testb $1, %al
3370 ; SSE2-NEXT: pextrw $3, %xmm4, %ecx
3371 ; SSE2-NEXT: testb $1, %cl
3372 ; SSE2-NEXT: pextrw $3, %xmm2, %eax
34113373 ; SSE2-NEXT: je LBB16_14
34123374 ; SSE2-NEXT: ## %bb.13: ## %cond.store11
3413 ; SSE2-NEXT: pextrw $3, %xmm2, %ecx
3414 ; SSE2-NEXT: movb %cl, 6(%rdi)
3375 ; SSE2-NEXT: movb %al, 6(%rdi)
34153376 ; SSE2-NEXT: LBB16_14: ## %else12
3416 ; SSE2-NEXT: shrl $8, %eax
3417 ; SSE2-NEXT: testb $1, %al
3377 ; SSE2-NEXT: shrl $8, %ecx
3378 ; SSE2-NEXT: testb $1, %cl
34183379 ; SSE2-NEXT: je LBB16_16
34193380 ; SSE2-NEXT: ## %bb.15: ## %cond.store13
3420 ; SSE2-NEXT: pextrw $3, %xmm2, %eax
34213381 ; SSE2-NEXT: movb %ah, 7(%rdi)
34223382 ; SSE2-NEXT: LBB16_16: ## %else14
34233383 ; SSE2-NEXT: pxor %xmm4, %xmm4
34243384 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3425 ; SSE2-NEXT: pextrw $4, %xmm4, %eax
3426 ; SSE2-NEXT: testb $1, %al
3385 ; SSE2-NEXT: pextrw $4, %xmm4, %ecx
3386 ; SSE2-NEXT: testb $1, %cl
3387 ; SSE2-NEXT: pextrw $4, %xmm2, %eax
34273388 ; SSE2-NEXT: je LBB16_18
34283389 ; SSE2-NEXT: ## %bb.17: ## %cond.store15
3429 ; SSE2-NEXT: pextrw $4, %xmm2, %ecx
3430 ; SSE2-NEXT: movb %cl, 8(%rdi)
3390 ; SSE2-NEXT: movb %al, 8(%rdi)
34313391 ; SSE2-NEXT: LBB16_18: ## %else16
3432 ; SSE2-NEXT: shrl $8, %eax
3433 ; SSE2-NEXT: testb $1, %al
3392 ; SSE2-NEXT: shrl $8, %ecx
3393 ; SSE2-NEXT: testb $1, %cl
34343394 ; SSE2-NEXT: je LBB16_20
34353395 ; SSE2-NEXT: ## %bb.19: ## %cond.store17
3436 ; SSE2-NEXT: pextrw $4, %xmm2, %eax
34373396 ; SSE2-NEXT: movb %ah, 9(%rdi)
34383397 ; SSE2-NEXT: LBB16_20: ## %else18
34393398 ; SSE2-NEXT: pxor %xmm4, %xmm4
34403399 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3441 ; SSE2-NEXT: pextrw $5, %xmm4, %eax
3442 ; SSE2-NEXT: testb $1, %al
3400 ; SSE2-NEXT: pextrw $5, %xmm4, %ecx
3401 ; SSE2-NEXT: testb $1, %cl
3402 ; SSE2-NEXT: pextrw $5, %xmm2, %eax
34433403 ; SSE2-NEXT: je LBB16_22
34443404 ; SSE2-NEXT: ## %bb.21: ## %cond.store19
3445 ; SSE2-NEXT: pextrw $5, %xmm2, %ecx
3446 ; SSE2-NEXT: movb %cl, 10(%rdi)
3405 ; SSE2-NEXT: movb %al, 10(%rdi)
34473406 ; SSE2-NEXT: LBB16_22: ## %else20
3448 ; SSE2-NEXT: shrl $8, %eax
3449 ; SSE2-NEXT: testb $1, %al
3407 ; SSE2-NEXT: shrl $8, %ecx
3408 ; SSE2-NEXT: testb $1, %cl
34503409 ; SSE2-NEXT: je LBB16_24
34513410 ; SSE2-NEXT: ## %bb.23: ## %cond.store21
3452 ; SSE2-NEXT: pextrw $5, %xmm2, %eax
34533411 ; SSE2-NEXT: movb %ah, 11(%rdi)
34543412 ; SSE2-NEXT: LBB16_24: ## %else22
34553413 ; SSE2-NEXT: pxor %xmm4, %xmm4
34563414 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm4
3457 ; SSE2-NEXT: pextrw $6, %xmm4, %eax
3458 ; SSE2-NEXT: testb $1, %al
3415 ; SSE2-NEXT: pextrw $6, %xmm4, %ecx
3416 ; SSE2-NEXT: testb $1, %cl
3417 ; SSE2-NEXT: pextrw $6, %xmm2, %eax
34593418 ; SSE2-NEXT: je LBB16_26
34603419 ; SSE2-NEXT: ## %bb.25: ## %cond.store23
3461 ; SSE2-NEXT: pextrw $6, %xmm2, %ecx
3462 ; SSE2-NEXT: movb %cl, 12(%rdi)
3420 ; SSE2-NEXT: movb %al, 12(%rdi)
34633421 ; SSE2-NEXT: LBB16_26: ## %else24
3464 ; SSE2-NEXT: shrl $8, %eax
3465 ; SSE2-NEXT: testb $1, %al
3422 ; SSE2-NEXT: shrl $8, %ecx
3423 ; SSE2-NEXT: testb $1, %cl
34663424 ; SSE2-NEXT: je LBB16_28
34673425 ; SSE2-NEXT: ## %bb.27: ## %cond.store25
3468 ; SSE2-NEXT: pextrw $6, %xmm2, %eax
34693426 ; SSE2-NEXT: movb %ah, 13(%rdi)
34703427 ; SSE2-NEXT: LBB16_28: ## %else26
34713428 ; SSE2-NEXT: pxor %xmm4, %xmm4
34723429 ; SSE2-NEXT: pcmpeqb %xmm4, %xmm0
3473 ; SSE2-NEXT: pextrw $7, %xmm0, %eax
3474 ; SSE2-NEXT: testb $1, %al
3430 ; SSE2-NEXT: pextrw $7, %xmm0, %ecx
3431 ; SSE2-NEXT: testb $1, %cl
3432 ; SSE2-NEXT: pextrw $7, %xmm2, %eax
34753433 ; SSE2-NEXT: je LBB16_30
34763434 ; SSE2-NEXT: ## %bb.29: ## %cond.store27
3477 ; SSE2-NEXT: pextrw $7, %xmm2, %ecx
3478 ; SSE2-NEXT: movb %cl, 14(%rdi)
3435 ; SSE2-NEXT: movb %al, 14(%rdi)
34793436 ; SSE2-NEXT: LBB16_30: ## %else28
3480 ; SSE2-NEXT: shrl $8, %eax
3481 ; SSE2-NEXT: testb $1, %al
3437 ; SSE2-NEXT: shrl $8, %ecx
3438 ; SSE2-NEXT: testb $1, %cl
34823439 ; SSE2-NEXT: je LBB16_32
34833440 ; SSE2-NEXT: ## %bb.31: ## %cond.store29
3484 ; SSE2-NEXT: pextrw $7, %xmm2, %eax
34853441 ; SSE2-NEXT: movb %ah, 15(%rdi)
34863442 ; SSE2-NEXT: LBB16_32: ## %else30
34873443 ; SSE2-NEXT: pxor %xmm0, %xmm0
34883444 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3489 ; SSE2-NEXT: movd %xmm0, %eax
3490 ; SSE2-NEXT: testb $1, %al
3445 ; SSE2-NEXT: movd %xmm0, %ecx
3446 ; SSE2-NEXT: testb $1, %cl
3447 ; SSE2-NEXT: movd %xmm3, %eax
34913448 ; SSE2-NEXT: je LBB16_34
34923449 ; SSE2-NEXT: ## %bb.33: ## %cond.store31
3493 ; SSE2-NEXT: movd %xmm3, %ecx
3494 ; SSE2-NEXT: movb %cl, 16(%rdi)
3450 ; SSE2-NEXT: movb %al, 16(%rdi)
34953451 ; SSE2-NEXT: LBB16_34: ## %else32
3496 ; SSE2-NEXT: shrl $8, %eax
3497 ; SSE2-NEXT: testb $1, %al
3452 ; SSE2-NEXT: shrl $8, %ecx
3453 ; SSE2-NEXT: testb $1, %cl
34983454 ; SSE2-NEXT: je LBB16_36
34993455 ; SSE2-NEXT: ## %bb.35: ## %cond.store33
3500 ; SSE2-NEXT: movd %xmm3, %eax
35013456 ; SSE2-NEXT: movb %ah, 17(%rdi)
35023457 ; SSE2-NEXT: LBB16_36: ## %else34
35033458 ; SSE2-NEXT: pxor %xmm0, %xmm0
35043459 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3505 ; SSE2-NEXT: movd %xmm0, %eax
3506 ; SSE2-NEXT: movl %eax, %ecx
3507 ; SSE2-NEXT: shrl $16, %ecx
3508 ; SSE2-NEXT: testb $1, %cl
3460 ; SSE2-NEXT: movd %xmm0, %ecx
3461 ; SSE2-NEXT: movl %ecx, %edx
3462 ; SSE2-NEXT: shrl $16, %edx
3463 ; SSE2-NEXT: testb $1, %dl
35093464 ; SSE2-NEXT: je LBB16_38
35103465 ; SSE2-NEXT: ## %bb.37: ## %cond.store35
3511 ; SSE2-NEXT: movd %xmm3, %ecx
3512 ; SSE2-NEXT: shrl $16, %ecx
3513 ; SSE2-NEXT: movb %cl, 18(%rdi)
3466 ; SSE2-NEXT: movl %eax, %edx
3467 ; SSE2-NEXT: shrl $16, %edx
3468 ; SSE2-NEXT: movb %dl, 18(%rdi)
35143469 ; SSE2-NEXT: LBB16_38: ## %else36
3515 ; SSE2-NEXT: shrl $24, %eax
3516 ; SSE2-NEXT: testb $1, %al
3470 ; SSE2-NEXT: shrl $24, %ecx
3471 ; SSE2-NEXT: testb $1, %cl
35173472 ; SSE2-NEXT: je LBB16_40
35183473 ; SSE2-NEXT: ## %bb.39: ## %cond.store37
3519 ; SSE2-NEXT: movd %xmm3, %eax
35203474 ; SSE2-NEXT: shrl $24, %eax
35213475 ; SSE2-NEXT: movb %al, 19(%rdi)
35223476 ; SSE2-NEXT: LBB16_40: ## %else38
35233477 ; SSE2-NEXT: pxor %xmm0, %xmm0
35243478 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3525 ; SSE2-NEXT: pextrw $2, %xmm0, %eax
3526 ; SSE2-NEXT: testb $1, %al
3479 ; SSE2-NEXT: pextrw $2, %xmm0, %ecx
3480 ; SSE2-NEXT: testb $1, %cl
3481 ; SSE2-NEXT: pextrw $2, %xmm3, %eax
35273482 ; SSE2-NEXT: je LBB16_42
35283483 ; SSE2-NEXT: ## %bb.41: ## %cond.store39
3529 ; SSE2-NEXT: pextrw $2, %xmm3, %ecx
3530 ; SSE2-NEXT: movb %cl, 20(%rdi)
3484 ; SSE2-NEXT: movb %al, 20(%rdi)
35313485 ; SSE2-NEXT: LBB16_42: ## %else40
3532 ; SSE2-NEXT: shrl $8, %eax
3533 ; SSE2-NEXT: testb $1, %al
3486 ; SSE2-NEXT: shrl $8, %ecx
3487 ; SSE2-NEXT: testb $1, %cl
35343488 ; SSE2-NEXT: je LBB16_44
35353489 ; SSE2-NEXT: ## %bb.43: ## %cond.store41
3536 ; SSE2-NEXT: pextrw $2, %xmm3, %eax
35373490 ; SSE2-NEXT: movb %ah, 21(%rdi)
35383491 ; SSE2-NEXT: LBB16_44: ## %else42
35393492 ; SSE2-NEXT: pxor %xmm0, %xmm0
35403493 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3541 ; SSE2-NEXT: pextrw $3, %xmm0, %eax
3542 ; SSE2-NEXT: testb $1, %al
3494 ; SSE2-NEXT: pextrw $3, %xmm0, %ecx
3495 ; SSE2-NEXT: testb $1, %cl
3496 ; SSE2-NEXT: pextrw $3, %xmm3, %eax
35433497 ; SSE2-NEXT: je LBB16_46
35443498 ; SSE2-NEXT: ## %bb.45: ## %cond.store43
3545 ; SSE2-NEXT: pextrw $3, %xmm3, %ecx
3546 ; SSE2-NEXT: movb %cl, 22(%rdi)
3499 ; SSE2-NEXT: movb %al, 22(%rdi)
35473500 ; SSE2-NEXT: LBB16_46: ## %else44
3548 ; SSE2-NEXT: shrl $8, %eax
3549 ; SSE2-NEXT: testb $1, %al
3501 ; SSE2-NEXT: shrl $8, %ecx
3502 ; SSE2-NEXT: testb $1, %cl
35503503 ; SSE2-NEXT: je LBB16_48
35513504 ; SSE2-NEXT: ## %bb.47: ## %cond.store45
3552 ; SSE2-NEXT: pextrw $3, %xmm3, %eax
35533505 ; SSE2-NEXT: movb %ah, 23(%rdi)
35543506 ; SSE2-NEXT: LBB16_48: ## %else46
35553507 ; SSE2-NEXT: pxor %xmm0, %xmm0
35563508 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3557 ; SSE2-NEXT: pextrw $4, %xmm0, %eax
3558 ; SSE2-NEXT: testb $1, %al
3509 ; SSE2-NEXT: pextrw $4, %xmm0, %ecx
3510 ; SSE2-NEXT: testb $1, %cl
3511 ; SSE2-NEXT: pextrw $4, %xmm3, %eax
35593512 ; SSE2-NEXT: je LBB16_50
35603513 ; SSE2-NEXT: ## %bb.49: ## %cond.store47
3561 ; SSE2-NEXT: pextrw $4, %xmm3, %ecx
3562 ; SSE2-NEXT: movb %cl, 24(%rdi)
3514 ; SSE2-NEXT: movb %al, 24(%rdi)
35633515 ; SSE2-NEXT: LBB16_50: ## %else48
3564 ; SSE2-NEXT: shrl $8, %eax
3565 ; SSE2-NEXT: testb $1, %al
3516 ; SSE2-NEXT: shrl $8, %ecx
3517 ; SSE2-NEXT: testb $1, %cl
35663518 ; SSE2-NEXT: je LBB16_52
35673519 ; SSE2-NEXT: ## %bb.51: ## %cond.store49
3568 ; SSE2-NEXT: pextrw $4, %xmm3, %eax
35693520 ; SSE2-NEXT: movb %ah, 25(%rdi)
35703521 ; SSE2-NEXT: LBB16_52: ## %else50
35713522 ; SSE2-NEXT: pxor %xmm0, %xmm0
35723523 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3573 ; SSE2-NEXT: pextrw $5, %xmm0, %eax
3574 ; SSE2-NEXT: testb $1, %al
3524 ; SSE2-NEXT: pextrw $5, %xmm0, %ecx
3525 ; SSE2-NEXT: testb $1, %cl
3526 ; SSE2-NEXT: pextrw $5, %xmm3, %eax
35753527 ; SSE2-NEXT: je LBB16_54
35763528 ; SSE2-NEXT: ## %bb.53: ## %cond.store51
3577 ; SSE2-NEXT: pextrw $5, %xmm3, %ecx
3578 ; SSE2-NEXT: movb %cl, 26(%rdi)
3529 ; SSE2-NEXT: movb %al, 26(%rdi)
35793530 ; SSE2-NEXT: LBB16_54: ## %else52
3580 ; SSE2-NEXT: shrl $8, %eax
3581 ; SSE2-NEXT: testb $1, %al
3531 ; SSE2-NEXT: shrl $8, %ecx
3532 ; SSE2-NEXT: testb $1, %cl
35823533 ; SSE2-NEXT: je LBB16_56
35833534 ; SSE2-NEXT: ## %bb.55: ## %cond.store53
3584 ; SSE2-NEXT: pextrw $5, %xmm3, %eax
35853535 ; SSE2-NEXT: movb %ah, 27(%rdi)
35863536 ; SSE2-NEXT: LBB16_56: ## %else54
35873537 ; SSE2-NEXT: pxor %xmm0, %xmm0
35883538 ; SSE2-NEXT: pcmpeqb %xmm1, %xmm0
3589 ; SSE2-NEXT: pextrw $6, %xmm0, %eax
3590 ; SSE2-NEXT: testb $1, %al
3539 ; SSE2-NEXT: pextrw $6, %xmm0, %ecx
3540 ; SSE2-NEXT: testb $1, %cl
3541 ; SSE2-NEXT: pextrw $6, %xmm3, %eax
35913542 ; SSE2-NEXT: je LBB16_58
35923543 ; SSE2-NEXT: ## %bb.57: ## %cond.store55
3593 ; SSE2-NEXT: pextrw $6, %xmm3, %ecx
3594 ; SSE2-NEXT: movb %cl, 28(%rdi)
3544 ; SSE2-NEXT: movb %al, 28(%rdi)
35953545 ; SSE2-NEXT: LBB16_58: ## %else56
3596 ; SSE2-NEXT: shrl $8, %eax
3597 ; SSE2-NEXT: testb $1, %al
3546 ; SSE2-NEXT: shrl $8, %ecx
3547 ; SSE2-NEXT: testb $1, %cl
35983548 ; SSE2-NEXT: je LBB16_60
35993549 ; SSE2-NEXT: ## %bb.59: ## %cond.store57
3600 ; SSE2-NEXT: pextrw $6, %xmm3, %eax
36013550 ; SSE2-NEXT: movb %ah, 29(%rdi)
36023551 ; SSE2-NEXT: LBB16_60: ## %else58
36033552 ; SSE2-NEXT: pxor %xmm0, %xmm0
36043553 ; SSE2-NEXT: pcmpeqb %xmm0, %xmm1
3605 ; SSE2-NEXT: pextrw $7, %xmm1, %eax
3606 ; SSE2-NEXT: testb $1, %al
3554 ; SSE2-NEXT: pextrw $7, %xmm1, %ecx
3555 ; SSE2-NEXT: testb $1, %cl
3556 ; SSE2-NEXT: pextrw $7, %xmm3, %eax
36073557 ; SSE2-NEXT: je LBB16_62
36083558 ; SSE2-NEXT: ## %bb.61: ## %cond.store59
3609 ; SSE2-NEXT: pextrw $7, %xmm3, %ecx
3610 ; SSE2-NEXT: movb %cl, 30(%rdi)
3559 ; SSE2-NEXT: movb %al, 30(%rdi)
36113560 ; SSE2-NEXT: LBB16_62: ## %else60
3612 ; SSE2-NEXT: shrl $8, %eax
3613 ; SSE2-NEXT: testb $1, %al
3561 ; SSE2-NEXT: shrl $8, %ecx
3562 ; SSE2-NEXT: testb $1, %cl
36143563 ; SSE2-NEXT: je LBB16_64
36153564 ; SSE2-NEXT: ## %bb.63: ## %cond.store61
3616 ; SSE2-NEXT: pextrw $7, %xmm3, %eax
36173565 ; SSE2-NEXT: movb %ah, 31(%rdi)
36183566 ; SSE2-NEXT: LBB16_64: ## %else62
36193567 ; SSE2-NEXT: retq
39683916 ; AVX1-NEXT: ## %bb.31: ## %cond.store29
39693917 ; AVX1-NEXT: vpextrb $15, %xmm1, 15(%rdi)
39703918 ; AVX1-NEXT: LBB16_32: ## %else30
3971 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
3972 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
3973 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
3974 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
3919 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
3920 ; AVX1-NEXT: vpxor %xmm0, %xmm0, %xmm0
3921 ; AVX1-NEXT: vpcmpeqb %xmm0, %xmm2, %xmm3
3922 ; AVX1-NEXT: vpextrb $0, %xmm3, %eax
39753923 ; AVX1-NEXT: testb $1, %al
3924 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
39763925 ; AVX1-NEXT: je LBB16_34
39773926 ; AVX1-NEXT: ## %bb.33: ## %cond.store31
3978 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
3979 ; AVX1-NEXT: vpextrb $0, %xmm3, 16(%rdi)
3927 ; AVX1-NEXT: vpextrb $0, %xmm0, 16(%rdi)
39803928 ; AVX1-NEXT: LBB16_34: ## %else32
3981 ; AVX1-NEXT: vpextrb $1, %xmm2, %eax
3929 ; AVX1-NEXT: vpextrb $1, %xmm3, %eax
39823930 ; AVX1-NEXT: testb $1, %al
39833931 ; AVX1-NEXT: je LBB16_36
39843932 ; AVX1-NEXT: ## %bb.35: ## %cond.store33
3985 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3986 ; AVX1-NEXT: vpextrb $1, %xmm2, 17(%rdi)
3933 ; AVX1-NEXT: vpextrb $1, %xmm0, 17(%rdi)
39873934 ; AVX1-NEXT: LBB16_36: ## %else34
3988 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
3989 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
3990 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax
3935 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
3936 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
3937 ; AVX1-NEXT: vpextrb $2, %xmm1, %eax
39913938 ; AVX1-NEXT: testb $1, %al
39923939 ; AVX1-NEXT: je LBB16_38
39933940 ; AVX1-NEXT: ## %bb.37: ## %cond.store35
3994 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
3995 ; AVX1-NEXT: vpextrb $2, %xmm3, 18(%rdi)
3941 ; AVX1-NEXT: vpextrb $2, %xmm0, 18(%rdi)
39963942 ; AVX1-NEXT: LBB16_38: ## %else36
3997 ; AVX1-NEXT: vpextrb $3, %xmm2, %eax
3943 ; AVX1-NEXT: vpextrb $3, %xmm1, %eax
39983944 ; AVX1-NEXT: testb $1, %al
39993945 ; AVX1-NEXT: je LBB16_40
40003946 ; AVX1-NEXT: ## %bb.39: ## %cond.store37
4001 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4002 ; AVX1-NEXT: vpextrb $3, %xmm2, 19(%rdi)
3947 ; AVX1-NEXT: vpextrb $3, %xmm0, 19(%rdi)
40033948 ; AVX1-NEXT: LBB16_40: ## %else38
4004 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
4005 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
4006 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
3949 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
3950 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
3951 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
40073952 ; AVX1-NEXT: testb $1, %al
40083953 ; AVX1-NEXT: je LBB16_42
40093954 ; AVX1-NEXT: ## %bb.41: ## %cond.store39
4010 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4011 ; AVX1-NEXT: vpextrb $4, %xmm3, 20(%rdi)
3955 ; AVX1-NEXT: vpextrb $4, %xmm0, 20(%rdi)
40123956 ; AVX1-NEXT: LBB16_42: ## %else40
4013 ; AVX1-NEXT: vpextrb $5, %xmm2, %eax
3957 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax
40143958 ; AVX1-NEXT: testb $1, %al
40153959 ; AVX1-NEXT: je LBB16_44
40163960 ; AVX1-NEXT: ## %bb.43: ## %cond.store41
4017 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4018 ; AVX1-NEXT: vpextrb $5, %xmm2, 21(%rdi)
3961 ; AVX1-NEXT: vpextrb $5, %xmm0, 21(%rdi)
40193962 ; AVX1-NEXT: LBB16_44: ## %else42
4020 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
4021 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
4022 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
3963 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
3964 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
3965 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
40233966 ; AVX1-NEXT: testb $1, %al
40243967 ; AVX1-NEXT: je LBB16_46
40253968 ; AVX1-NEXT: ## %bb.45: ## %cond.store43
4026 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4027 ; AVX1-NEXT: vpextrb $6, %xmm3, 22(%rdi)
3969 ; AVX1-NEXT: vpextrb $6, %xmm0, 22(%rdi)
40283970 ; AVX1-NEXT: LBB16_46: ## %else44
4029 ; AVX1-NEXT: vpextrb $7, %xmm2, %eax
3971 ; AVX1-NEXT: vpextrb $7, %xmm1, %eax
40303972 ; AVX1-NEXT: testb $1, %al
40313973 ; AVX1-NEXT: je LBB16_48
40323974 ; AVX1-NEXT: ## %bb.47: ## %cond.store45
4033 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4034 ; AVX1-NEXT: vpextrb $7, %xmm2, 23(%rdi)
3975 ; AVX1-NEXT: vpextrb $7, %xmm0, 23(%rdi)
40353976 ; AVX1-NEXT: LBB16_48: ## %else46
4036 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
4037 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
4038 ; AVX1-NEXT: vpextrb $8, %xmm2, %eax
3977 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
3978 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
3979 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
40393980 ; AVX1-NEXT: testb $1, %al
40403981 ; AVX1-NEXT: je LBB16_50
40413982 ; AVX1-NEXT: ## %bb.49: ## %cond.store47
4042 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4043 ; AVX1-NEXT: vpextrb $8, %xmm3, 24(%rdi)
3983 ; AVX1-NEXT: vpextrb $8, %xmm0, 24(%rdi)
40443984 ; AVX1-NEXT: LBB16_50: ## %else48
4045 ; AVX1-NEXT: vpextrb $9, %xmm2, %eax
3985 ; AVX1-NEXT: vpextrb $9, %xmm1, %eax
40463986 ; AVX1-NEXT: testb $1, %al
40473987 ; AVX1-NEXT: je LBB16_52
40483988 ; AVX1-NEXT: ## %bb.51: ## %cond.store49
4049 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4050 ; AVX1-NEXT: vpextrb $9, %xmm2, 25(%rdi)
3989 ; AVX1-NEXT: vpextrb $9, %xmm0, 25(%rdi)
40513990 ; AVX1-NEXT: LBB16_52: ## %else50
4052 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
4053 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
4054 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax
3991 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
3992 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
3993 ; AVX1-NEXT: vpextrb $10, %xmm1, %eax
40553994 ; AVX1-NEXT: testb $1, %al
40563995 ; AVX1-NEXT: je LBB16_54
40573996 ; AVX1-NEXT: ## %bb.53: ## %cond.store51
4058 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4059 ; AVX1-NEXT: vpextrb $10, %xmm3, 26(%rdi)
3997 ; AVX1-NEXT: vpextrb $10, %xmm0, 26(%rdi)
40603998 ; AVX1-NEXT: LBB16_54: ## %else52
4061 ; AVX1-NEXT: vpextrb $11, %xmm2, %eax
3999 ; AVX1-NEXT: vpextrb $11, %xmm1, %eax
40624000 ; AVX1-NEXT: testb $1, %al
40634001 ; AVX1-NEXT: je LBB16_56
40644002 ; AVX1-NEXT: ## %bb.55: ## %cond.store53
4065 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4066 ; AVX1-NEXT: vpextrb $11, %xmm2, 27(%rdi)
4003 ; AVX1-NEXT: vpextrb $11, %xmm0, 27(%rdi)
40674004 ; AVX1-NEXT: LBB16_56: ## %else54
4068 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
4069 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm2
4070 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
4005 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
4006 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
4007 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
40714008 ; AVX1-NEXT: testb $1, %al
40724009 ; AVX1-NEXT: je LBB16_58
40734010 ; AVX1-NEXT: ## %bb.57: ## %cond.store55
4074 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4075 ; AVX1-NEXT: vpextrb $12, %xmm3, 28(%rdi)
4011 ; AVX1-NEXT: vpextrb $12, %xmm0, 28(%rdi)
40764012 ; AVX1-NEXT: LBB16_58: ## %else56
4077 ; AVX1-NEXT: vpextrb $13, %xmm2, %eax
4013 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
40784014 ; AVX1-NEXT: testb $1, %al
40794015 ; AVX1-NEXT: je LBB16_60
40804016 ; AVX1-NEXT: ## %bb.59: ## %cond.store57
4081 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4082 ; AVX1-NEXT: vpextrb $13, %xmm2, 29(%rdi)
4017 ; AVX1-NEXT: vpextrb $13, %xmm0, 29(%rdi)
40834018 ; AVX1-NEXT: LBB16_60: ## %else58
4084 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
4085 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
4086 ; AVX1-NEXT: vpextrb $14, %xmm0, %eax
4019 ; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
4020 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
4021 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
40874022 ; AVX1-NEXT: testb $1, %al
40884023 ; AVX1-NEXT: je LBB16_62
40894024 ; AVX1-NEXT: ## %bb.61: ## %cond.store59
4090 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4091 ; AVX1-NEXT: vpextrb $14, %xmm2, 30(%rdi)
4025 ; AVX1-NEXT: vpextrb $14, %xmm0, 30(%rdi)
40924026 ; AVX1-NEXT: LBB16_62: ## %else60
4093 ; AVX1-NEXT: vpextrb $15, %xmm0, %eax
4027 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
40944028 ; AVX1-NEXT: testb $1, %al
40954029 ; AVX1-NEXT: je LBB16_64
40964030 ; AVX1-NEXT: ## %bb.63: ## %cond.store61
4097 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0
40984031 ; AVX1-NEXT: vpextrb $15, %xmm0, 31(%rdi)
40994032 ; AVX1-NEXT: LBB16_64: ## %else62
41004033 ; AVX1-NEXT: vzeroupper
42194152 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm2
42204153 ; AVX2-NEXT: vpextrb $0, %xmm2, %eax
42214154 ; AVX2-NEXT: testb $1, %al
4155 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1
42224156 ; AVX2-NEXT: je LBB16_34
42234157 ; AVX2-NEXT: ## %bb.33: ## %cond.store31
4224 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
4225 ; AVX2-NEXT: vpextrb $0, %xmm3, 16(%rdi)
4158 ; AVX2-NEXT: vpextrb $0, %xmm1, 16(%rdi)
42264159 ; AVX2-NEXT: LBB16_34: ## %else32
42274160 ; AVX2-NEXT: vpextrb $1, %xmm2, %eax
42284161 ; AVX2-NEXT: testb $1, %al
42294162 ; AVX2-NEXT: je LBB16_36
42304163 ; AVX2-NEXT: ## %bb.35: ## %cond.store33
4231 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
4232 ; AVX2-NEXT: vpextrb $1, %xmm2, 17(%rdi)
4164 ; AVX2-NEXT: vpextrb $1, %xmm1, 17(%rdi)
42334165 ; AVX2-NEXT: LBB16_36: ## %else34
42344166 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
42354167 ; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm2
42384170 ; AVX2-NEXT: testb $1, %al
42394171 ; AVX2-NEXT: je LBB16_38
42404172 ; AVX2-NEXT: ## %bb.37: ## %cond.store35
4241 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
4242 ; AVX2-NEXT: vpextrb $2, %xmm3, 18(%rdi)
4173 ; AVX2-NEXT: vpextrb $2, %xmm1, 18(%rdi)
42434174 ; AVX2-NEXT: LBB16_38: ## %else36
42444175 ; AVX2-NEXT: vpextrb $3, %xmm2, %eax
42454176 ; AVX2-NEXT: testb $1, %al
42464177 ; AVX2-NEXT: je LBB16_40
42474178 ; AVX2-NEXT: ## %bb.39: ## %cond.store37
4248 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
4249 ; AVX2-NEXT: vpextrb $3, %xmm2, 19(%rdi)
4179 ; AVX2-NEXT: vpextrb $3, %xmm1, 19(%rdi)
42504180 ; AVX2-NEXT: LBB16_40: ## %else38
42514181 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
42524182