llvm.org GIT mirror llvm / ff0f1ca
[X86] Don't base domain decisions on VEXTRACTF128/VINSERTF128 if only AVX1 is available. Seems the execution dependency pass likes to use FP instructions when most of the consuming code is integer if a vextractf128 instruction produced the register. Without AVX2 we don't have the corresponding integer instruction available. This patch suppresses the domain on these instructions to GenericDomain if AVX2 is not supported so that they are ignored by domain fixing. If AVX2 is supported we'll report the correct domain and allow them to switch between integer and fp. Overall I think this produces better results in the modified test cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294824 91177308-0d34-0410-b5e6-96231b3b80d8 Craig Topper 3 years ago
22 changed file(s) with 350 addition(s) and 323 deletion(s). Raw diff Collapse all Expand all
88628862 { X86::VORPSYrr, X86::VORPDYrr, X86::VPORYrr },
88638863 { X86::VXORPSYrm, X86::VXORPDYrm, X86::VPXORYrm },
88648864 { X86::VXORPSYrr, X86::VXORPDYrr, X86::VPXORYrr },
8865 { X86::VEXTRACTF128mr, X86::VEXTRACTF128mr, X86::VEXTRACTI128mr },
8866 { X86::VEXTRACTF128rr, X86::VEXTRACTF128rr, X86::VEXTRACTI128rr },
8867 { X86::VINSERTF128rm, X86::VINSERTF128rm, X86::VINSERTI128rm },
8868 { X86::VINSERTF128rr, X86::VINSERTF128rr, X86::VINSERTI128rr },
88698865 { X86::VPERM2F128rm, X86::VPERM2F128rm, X86::VPERM2I128rm },
88708866 { X86::VPERM2F128rr, X86::VPERM2F128rr, X86::VPERM2I128rr },
88718867 { X86::VBROADCASTSSrm, X86::VBROADCASTSSrm, X86::VPBROADCASTDrm},
88758871 { X86::VBROADCASTSDYrr, X86::VBROADCASTSDYrr, X86::VPBROADCASTQYrr},
88768872 { X86::VBROADCASTSDYrm, X86::VBROADCASTSDYrm, X86::VPBROADCASTQYrm},
88778873 { X86::VBROADCASTF128, X86::VBROADCASTF128, X86::VBROADCASTI128 },
8874 };
8875
8876 static const uint16_t ReplaceableInstrsAVX2InsertExtract[][3] = {
8877 //PackedSingle PackedDouble PackedInt
8878 { X86::VEXTRACTF128mr, X86::VEXTRACTF128mr, X86::VEXTRACTI128mr },
8879 { X86::VEXTRACTF128rr, X86::VEXTRACTF128rr, X86::VEXTRACTI128rr },
8880 { X86::VINSERTF128rm, X86::VINSERTF128rm, X86::VINSERTI128rm },
8881 { X86::VINSERTF128rr, X86::VINSERTF128rr, X86::VINSERTI128rr },
88788882 };
88798883
88808884 static const uint16_t ReplaceableInstrsAVX512[][4] = {
91389142 validDomains = 0xe;
91399143 } else if (lookup(opcode, domain, ReplaceableInstrsAVX2)) {
91409144 validDomains = Subtarget.hasAVX2() ? 0xe : 0x6;
9145 } else if (lookup(opcode, domain, ReplaceableInstrsAVX2InsertExtract)) {
9146 // Insert/extract instructions should only effect domain if AVX2
9147 // is enabled.
9148 if (!Subtarget.hasAVX2())
9149 return std::make_pair(0, 0);
9150 validDomains = 0xe;
91419151 } else if (lookupAVX512(opcode, domain, ReplaceableInstrsAVX512)) {
91429152 validDomains = 0xe;
91439153 } else if (Subtarget.hasDQI() && lookupAVX512(opcode, domain,
91659175 assert((Subtarget.hasAVX2() || Domain < 3) &&
91669176 "256-bit vector operations only available in AVX2");
91679177 table = lookup(MI.getOpcode(), dom, ReplaceableInstrsAVX2);
9178 }
9179 if (!table) { // try the other table
9180 assert(Subtarget.hasAVX2() &&
9181 "256-bit insert/extract only available in AVX2");
9182 table = lookup(MI.getOpcode(), dom, ReplaceableInstrsAVX2InsertExtract);
91689183 }
91699184 if (!table) { // try the AVX512 table
91709185 assert(Subtarget.hasAVX512() && "Requires AVX-512");
624624 ; AVX1: # BB#0:
625625 ; AVX1-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
626626 ; AVX1-NEXT: vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
627 ; AVX1-NEXT: vxorpd %xmm1, %xmm1, %xmm1
627 ; AVX1-NEXT: vxorps %xmm1, %xmm1, %xmm1
628628 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
629629 ; AVX1-NEXT: retq
630630 ;
649649 ; X32-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax
650650 ; X32-AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
651651 ; X32-AVX-NEXT: vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
652 ; X32-AVX-NEXT: vxorpd %xmm1, %xmm1, %xmm1
652 ; X32-AVX-NEXT: vxorps %xmm1, %xmm1, %xmm1
653653 ; X32-AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
654654 ; X32-AVX-NEXT: retl
655655 %ptr0 = getelementptr inbounds double, double* %ptr, i64 3
751751 ;
752752 ; AVX1-LABEL: test_arg_v8i32:
753753 ; AVX1: # BB#0:
754 ; AVX1-NEXT: vmovaps (%rdi), %ymm1
754 ; AVX1-NEXT: vmovdqa (%rdi), %ymm1
755755 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
756756 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
757757 ; AVX1-NEXT: vpaddd %xmm3, %xmm2, %xmm2
803803 ;
804804 ; AVX1-LABEL: test_arg_v4i64:
805805 ; AVX1: # BB#0:
806 ; AVX1-NEXT: vmovaps (%rdi), %ymm1
806 ; AVX1-NEXT: vmovdqa (%rdi), %ymm1
807807 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
808808 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
809809 ; AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2
834834 ;
835835 ; AVX1-LABEL: test_arg_v16i16:
836836 ; AVX1: # BB#0:
837 ; AVX1-NEXT: vmovaps (%rdi), %ymm1
837 ; AVX1-NEXT: vmovdqa (%rdi), %ymm1
838838 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
839839 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
840840 ; AVX1-NEXT: vpaddw %xmm3, %xmm2, %xmm2
865865 ;
866866 ; AVX1-LABEL: test_arg_v32i8:
867867 ; AVX1: # BB#0:
868 ; AVX1-NEXT: vmovaps (%rdi), %ymm1
868 ; AVX1-NEXT: vmovdqa (%rdi), %ymm1
869869 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
870870 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
871871 ; AVX1-NEXT: vpaddb %xmm3, %xmm2, %xmm2
924924 ;
925925 ; AVX1-LABEL: test_arg_v16i32:
926926 ; AVX1: # BB#0:
927 ; AVX1-NEXT: vmovaps (%rdi), %ymm2
928 ; AVX1-NEXT: vmovaps 32(%rdi), %ymm3
927 ; AVX1-NEXT: vmovdqa (%rdi), %ymm2
928 ; AVX1-NEXT: vmovdqa 32(%rdi), %ymm3
929929 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
930930 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
931931 ; AVX1-NEXT: vpaddd %xmm5, %xmm4, %xmm4
988988 ;
989989 ; AVX1-LABEL: test_arg_v8i64:
990990 ; AVX1: # BB#0:
991 ; AVX1-NEXT: vmovaps (%rdi), %ymm2
992 ; AVX1-NEXT: vmovaps 32(%rdi), %ymm3
991 ; AVX1-NEXT: vmovdqa (%rdi), %ymm2
992 ; AVX1-NEXT: vmovdqa 32(%rdi), %ymm3
993993 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
994994 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
995995 ; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm4
10281028 ;
10291029 ; AVX1-LABEL: test_arg_v32i16:
10301030 ; AVX1: # BB#0:
1031 ; AVX1-NEXT: vmovaps (%rdi), %ymm2
1032 ; AVX1-NEXT: vmovaps 32(%rdi), %ymm3
1031 ; AVX1-NEXT: vmovdqa (%rdi), %ymm2
1032 ; AVX1-NEXT: vmovdqa 32(%rdi), %ymm3
10331033 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
10341034 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
10351035 ; AVX1-NEXT: vpaddw %xmm5, %xmm4, %xmm4
10801080 ;
10811081 ; AVX1-LABEL: test_arg_v64i8:
10821082 ; AVX1: # BB#0:
1083 ; AVX1-NEXT: vmovaps (%rdi), %ymm2
1084 ; AVX1-NEXT: vmovaps 32(%rdi), %ymm3
1083 ; AVX1-NEXT: vmovdqa (%rdi), %ymm2
1084 ; AVX1-NEXT: vmovdqa 32(%rdi), %ymm3
10851085 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
10861086 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
10871087 ; AVX1-NEXT: vpaddb %xmm5, %xmm4, %xmm4
922922 ; AVX1-LABEL: interleave_24i16_out:
923923 ; AVX1: # BB#0:
924924 ; AVX1-NEXT: vmovdqu 32(%rdi), %xmm0
925 ; AVX1-NEXT: vmovups (%rdi), %ymm1
925 ; AVX1-NEXT: vmovdqu (%rdi), %ymm1
926926 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
927927 ; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm1[0],xmm2[1],xmm1[2,3],xmm2[4],xmm1[5,6],xmm2[7]
928928 ; AVX1-NEXT: vpshufb {{.*#+}} xmm3 = xmm3[0,1,6,7,12,13,2,3,8,9,14,15,12,13,14,15]
14441444 ; AVX1: # BB#0:
14451445 ; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0]
14461446 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm1
1447 ; AVX1-NEXT: vmovapd %ymm1, 32(%rdi)
1448 ; AVX1-NEXT: vmovapd %ymm1, (%rdi)
1447 ; AVX1-NEXT: vmovaps %ymm1, 32(%rdi)
1448 ; AVX1-NEXT: vmovaps %ymm1, (%rdi)
14491449 ; AVX1-NEXT: # kill: %XMM0 %XMM0 %YMM0
14501450 ; AVX1-NEXT: vzeroupper
14511451 ; AVX1-NEXT: retq
212212 ;
213213 ; AVX1-LABEL: test7:
214214 ; AVX1: ## BB#0: ## %vector.ph
215 ; AVX1-NEXT: vmovups (%rdi), %ymm0
215 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
216216 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
217217 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
218218 ; AVX1-NEXT: vpcmpgtw %xmm1, %xmm2, %xmm1
256256 ;
257257 ; AVX1-LABEL: test8:
258258 ; AVX1: ## BB#0: ## %vector.ph
259 ; AVX1-NEXT: vmovups (%rdi), %ymm0
259 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
260260 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
261 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
262 ; AVX1-NEXT: vxorps %xmm2, %xmm1, %xmm3
261 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
262 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
263263 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
264264 ; AVX1-NEXT: vpcmpgtw %xmm4, %xmm3, %xmm3
265 ; AVX1-NEXT: vxorps %xmm2, %xmm0, %xmm2
265 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
266266 ; AVX1-NEXT: vpcmpgtw %xmm4, %xmm2, %xmm2
267267 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
268268 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]
309309 ;
310310 ; AVX1-LABEL: test9:
311311 ; AVX1: ## BB#0: ## %vector.ph
312 ; AVX1-NEXT: vmovups (%rdi), %ymm0
312 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
313313 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
314314 ; AVX1-NEXT: vmovd %esi, %xmm2
315315 ; AVX1-NEXT: vpshuflw {{.*#+}} xmm2 = xmm2[0,0,0,0,4,5,6,7]
363363 ;
364364 ; AVX1-LABEL: test10:
365365 ; AVX1: ## BB#0: ## %vector.ph
366 ; AVX1-NEXT: vmovups (%rdi), %ymm0
366 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
367367 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
368368 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
369369 ; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1
408408 ;
409409 ; AVX1-LABEL: test11:
410410 ; AVX1: ## BB#0: ## %vector.ph
411 ; AVX1-NEXT: vmovups (%rdi), %ymm0
411 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
412412 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
413 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
414 ; AVX1-NEXT: vxorps %xmm2, %xmm1, %xmm3
413 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
414 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
415415 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
416416 ; AVX1-NEXT: vpcmpgtb %xmm4, %xmm3, %xmm3
417 ; AVX1-NEXT: vxorps %xmm2, %xmm0, %xmm2
417 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
418418 ; AVX1-NEXT: vpcmpgtb %xmm4, %xmm2, %xmm2
419419 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
420420 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
474474 ;
475475 ; AVX1-LABEL: test12:
476476 ; AVX1: ## BB#0: ## %vector.ph
477 ; AVX1-NEXT: vmovups (%rdi), %ymm0
477 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
478478 ; AVX1-NEXT: vmovd %esi, %xmm1
479479 ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
480480 ; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
588588 ;
589589 ; AVX1-LABEL: test13:
590590 ; AVX1: ## BB#0: ## %vector.ph
591 ; AVX1-NEXT: vmovups (%rsi), %ymm0
591 ; AVX1-NEXT: vmovdqu (%rsi), %ymm0
592592 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
593593 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
594594 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
597597 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm6
598598 ; AVX1-NEXT: vpcmpgtd %xmm4, %xmm6, %xmm4
599599 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm6
600 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
600 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
601601 ; AVX1-NEXT: vpcmpgtd %xmm6, %xmm3, %xmm3
602602 ; AVX1-NEXT: vpacksswb %xmm4, %xmm3, %xmm3
603603 ; AVX1-NEXT: vpsubd %xmm0, %xmm1, %xmm0
790790 ;
791791 ; AVX1-LABEL: test14:
792792 ; AVX1: ## BB#0: ## %vector.ph
793 ; AVX1-NEXT: vmovups (%rsi), %ymm0
794 ; AVX1-NEXT: vmovups 32(%rsi), %ymm1
793 ; AVX1-NEXT: vmovdqu (%rsi), %ymm0
794 ; AVX1-NEXT: vmovdqu 32(%rsi), %ymm1
795795 ; AVX1-NEXT: vpmovzxbd {{.*#+}} xmm8 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
796796 ; AVX1-NEXT: vpmovzxbd {{.*#+}} xmm9 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
797797 ; AVX1-NEXT: vpmovzxbd {{.*#+}} xmm10 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
802802 ; AVX1-NEXT: vpxor %xmm6, %xmm2, %xmm3
803803 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm3, %xmm3
804804 ; AVX1-NEXT: vpxor %xmm6, %xmm10, %xmm7
805 ; AVX1-NEXT: vxorps %xmm6, %xmm1, %xmm4
805 ; AVX1-NEXT: vpxor %xmm6, %xmm1, %xmm4
806806 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm4, %xmm4
807807 ; AVX1-NEXT: vpacksswb %xmm3, %xmm4, %xmm3
808808 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm11 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
809809 ; AVX1-NEXT: vpshufb %xmm11, %xmm3, %xmm12
810810 ; AVX1-NEXT: vpxor %xmm6, %xmm9, %xmm7
811811 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
812 ; AVX1-NEXT: vxorps %xmm6, %xmm4, %xmm3
812 ; AVX1-NEXT: vpxor %xmm6, %xmm4, %xmm3
813813 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm3, %xmm3
814814 ; AVX1-NEXT: vpxor %xmm6, %xmm8, %xmm7
815 ; AVX1-NEXT: vxorps %xmm6, %xmm0, %xmm6
815 ; AVX1-NEXT: vpxor %xmm6, %xmm0, %xmm6
816816 ; AVX1-NEXT: vpcmpgtd %xmm7, %xmm6, %xmm6
817817 ; AVX1-NEXT: vpacksswb %xmm3, %xmm6, %xmm3
818818 ; AVX1-NEXT: vpshufb %xmm11, %xmm3, %xmm3
965965 ;
966966 ; AVX1-LABEL: test15:
967967 ; AVX1: ## BB#0: ## %vector.ph
968 ; AVX1-NEXT: vmovups (%rsi), %ymm0
968 ; AVX1-NEXT: vmovdqu (%rsi), %ymm0
969969 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
970970 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
971971 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
974974 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm6
975975 ; AVX1-NEXT: vpcmpgtd %xmm6, %xmm4, %xmm4
976976 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm6
977 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
977 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
978978 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm6, %xmm3
979979 ; AVX1-NEXT: vpacksswb %xmm4, %xmm3, %xmm3
980980 ; AVX1-NEXT: vpsubd %xmm0, %xmm1, %xmm0
10951095 ;
10961096 ; AVX1-LABEL: test16:
10971097 ; AVX1: ## BB#0: ## %vector.ph
1098 ; AVX1-NEXT: vmovups (%rsi), %ymm0
1098 ; AVX1-NEXT: vmovdqu (%rsi), %ymm0
10991099 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
11001100 ; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
11011101 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
11041104 ; AVX1-NEXT: vpxor %xmm3, %xmm5, %xmm6
11051105 ; AVX1-NEXT: vpcmpgtd %xmm6, %xmm4, %xmm4
11061106 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm6
1107 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
1107 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
11081108 ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm6, %xmm3
11091109 ; AVX1-NEXT: vpacksswb %xmm4, %xmm3, %xmm3
11101110 ; AVX1-NEXT: vpsubd %xmm0, %xmm1, %xmm0
12971297 ; X32-AVX1-LABEL: fallback_broadcast_v4i64_to_v8i64:
12981298 ; X32-AVX1: ## BB#0: ## %entry
12991299 ; X32-AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1300 ; X32-AVX1-NEXT: vmovaps {{.*#+}} ymm4 = [1,0,2,0,3,0,4,0]
1300 ; X32-AVX1-NEXT: vmovdqa {{.*#+}} ymm4 = [1,0,2,0,3,0,4,0]
13011301 ; X32-AVX1-NEXT: vextractf128 $1, %ymm4, %xmm5
13021302 ; X32-AVX1-NEXT: vpaddq %xmm5, %xmm3, %xmm3
13031303 ; X32-AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm0
253253 define <4 x double> @combine_16_byte_loads_double(<2 x double>* %ptr, <4 x double> %x) {
254254 ; AVXSLOW-LABEL: combine_16_byte_loads_double:
255255 ; AVXSLOW: # BB#0:
256 ; AVXSLOW-NEXT: vmovupd 144(%rdi), %xmm1
256 ; AVXSLOW-NEXT: vmovups 144(%rdi), %xmm1
257257 ; AVXSLOW-NEXT: vinsertf128 $1, 160(%rdi), %ymm1, %ymm1
258258 ; AVXSLOW-NEXT: vaddpd %ymm0, %ymm1, %ymm0
259259 ; AVXSLOW-NEXT: retq
101101 ; X32-AVX-NEXT: vcvtpd2psy (%ecx), %xmm0
102102 ; X32-AVX-NEXT: vcvtpd2psy 32(%ecx), %xmm1
103103 ; X32-AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
104 ; X32-AVX-NEXT: vmovupd %ymm0, (%eax)
104 ; X32-AVX-NEXT: vmovups %ymm0, (%eax)
105105 ; X32-AVX-NEXT: vzeroupper
106106 ; X32-AVX-NEXT: retl
107107 ;
122122 ; X64-AVX-NEXT: vcvtpd2psy (%rdi), %xmm0
123123 ; X64-AVX-NEXT: vcvtpd2psy 32(%rdi), %xmm1
124124 ; X64-AVX-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
125 ; X64-AVX-NEXT: vmovupd %ymm0, (%rsi)
125 ; X64-AVX-NEXT: vmovups %ymm0, (%rsi)
126126 ; X64-AVX-NEXT: vzeroupper
127127 ; X64-AVX-NEXT: retq
128128 entry:
27222722 ;
27232723 ; AVX1-LABEL: sitofp_load_4i64_to_4f64:
27242724 ; AVX1: # BB#0:
2725 ; AVX1-NEXT: vmovaps (%rdi), %ymm0
2725 ; AVX1-NEXT: vmovdqa (%rdi), %ymm0
27262726 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
27272727 ; AVX1-NEXT: vpextrq $1, %xmm1, %rax
27282728 ; AVX1-NEXT: vcvtsi2sdq %rax, %xmm2, %xmm2
31293129 ;
31303130 ; AVX1-LABEL: uitofp_load_4i64_to_4f64:
31313131 ; AVX1: # BB#0:
3132 ; AVX1-NEXT: vmovaps (%rdi), %ymm0
3132 ; AVX1-NEXT: vmovdqa (%rdi), %ymm0
31333133 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
31343134 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [1127219200,1160773632,0,0]
31353135 ; AVX1-NEXT: vpunpckldq {{.*#+}} xmm3 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
166166 ; AVX1-LABEL: max_gt_v4i64:
167167 ; AVX1: # BB#0:
168168 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
169 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
170 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
169 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
170 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
171171 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
172 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
172 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
173173 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
174 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4
175 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
174 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
175 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
176176 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
177177 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
178178 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
603603 ; AVX1-LABEL: max_ge_v4i64:
604604 ; AVX1: # BB#0:
605605 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
606 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
607 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
606 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
607 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
608608 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
609 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
609 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
610610 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
611611 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
612612 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
613 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5
614 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
613 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
614 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
615615 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
616616 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
617617 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
10301030 ; AVX1-LABEL: min_lt_v4i64:
10311031 ; AVX1: # BB#0:
10321032 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1033 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1034 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
1033 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1034 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10351035 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1036 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
1036 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
10371037 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1038 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4
1039 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
1038 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
1039 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
10401040 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
10411041 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
10421042 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
14661466 ; AVX1-LABEL: min_le_v4i64:
14671467 ; AVX1: # BB#0:
14681468 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1469 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1470 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
1469 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1470 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
14711471 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1472 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
1472 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
14731473 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
14741474 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
14751475 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
1476 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5
1477 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
1476 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
1477 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
14781478 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
14791479 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
14801480 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
612612 ; AVX1-LABEL: test_bitreverse_v32i8:
613613 ; AVX1: # BB#0:
614614 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
615 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
616 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
615 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
616 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
617617 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
618618 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
619619 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
621621 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
622622 ; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm1
623623 ; AVX1-NEXT: vpor %xmm1, %xmm3, %xmm1
624 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
624 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
625625 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
626626 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
627627 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
13601360 ; AVX1-LABEL: test_bitreverse_v64i8:
13611361 ; AVX1: # BB#0:
13621362 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1363 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1364 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm4
1363 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1364 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm4
13651365 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240]
13661366 ; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4
13671367 ; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm2
13691369 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15]
13701370 ; AVX1-NEXT: vpshufb %xmm2, %xmm6, %xmm2
13711371 ; AVX1-NEXT: vpor %xmm2, %xmm4, %xmm2
1372 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm4
1372 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm4
13731373 ; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4
13741374 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
13751375 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
13771377 ; AVX1-NEXT: vpor %xmm0, %xmm4, %xmm0
13781378 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
13791379 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1380 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm4
1380 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm4
13811381 ; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4
13821382 ; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm2
13831383 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
13841384 ; AVX1-NEXT: vpshufb %xmm2, %xmm6, %xmm2
13851385 ; AVX1-NEXT: vpor %xmm2, %xmm4, %xmm2
1386 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm4
1386 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm4
13871387 ; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4
13881388 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
13891389 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
1018610186 ; AVX1-NEXT: movq %rsp, %rbp
1018710187 ; AVX1-NEXT: andq $-32, %rsp
1018810188 ; AVX1-NEXT: subq $32, %rsp
10189 ; AVX1-NEXT: vmovaps 240(%rbp), %ymm8
10189 ; AVX1-NEXT: vmovdqa 240(%rbp), %ymm8
1019010190 ; AVX1-NEXT: vextractf128 $1, %ymm8, %xmm9
1019110191 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm10
1019210192 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm10, %xmm9
10193 ; AVX1-NEXT: vmovaps 208(%rbp), %ymm10
10193 ; AVX1-NEXT: vmovdqa 208(%rbp), %ymm10
1019410194 ; AVX1-NEXT: vpcmpgtq %xmm8, %xmm7, %xmm7
1019510195 ; AVX1-NEXT: vpacksswb %xmm9, %xmm7, %xmm8
1019610196 ; AVX1-NEXT: vextractf128 $1, %ymm10, %xmm9
1019710197 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm7
1019810198 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm7, %xmm7
1019910199 ; AVX1-NEXT: vpcmpgtq %xmm10, %xmm6, %xmm6
10200 ; AVX1-NEXT: vmovaps 176(%rbp), %ymm9
10200 ; AVX1-NEXT: vmovdqa 176(%rbp), %ymm9
1020110201 ; AVX1-NEXT: vpacksswb %xmm7, %xmm6, %xmm6
1020210202 ; AVX1-NEXT: vpacksswb %xmm8, %xmm6, %xmm8
1020310203 ; AVX1-NEXT: vextractf128 $1, %ymm9, %xmm7
1020410204 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm6
1020510205 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
10206 ; AVX1-NEXT: vmovaps 144(%rbp), %ymm10
10206 ; AVX1-NEXT: vmovdqa 144(%rbp), %ymm10
1020710207 ; AVX1-NEXT: vpcmpgtq %xmm9, %xmm5, %xmm5
1020810208 ; AVX1-NEXT: vpacksswb %xmm6, %xmm5, %xmm5
1020910209 ; AVX1-NEXT: vextractf128 $1, %ymm10, %xmm6
1021110211 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
1021210212 ; AVX1-NEXT: vpcmpgtq %xmm10, %xmm4, %xmm4
1021310213 ; AVX1-NEXT: vpacksswb %xmm6, %xmm4, %xmm4
10214 ; AVX1-NEXT: vmovaps 112(%rbp), %ymm6
10214 ; AVX1-NEXT: vmovdqa 112(%rbp), %ymm6
1021510215 ; AVX1-NEXT: vpacksswb %xmm5, %xmm4, %xmm4
1021610216 ; AVX1-NEXT: vpacksswb %xmm8, %xmm4, %xmm4
1021710217 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm5
1021810218 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm7
1021910219 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm7, %xmm5
10220 ; AVX1-NEXT: vmovaps 80(%rbp), %ymm7
10220 ; AVX1-NEXT: vmovdqa 80(%rbp), %ymm7
1022110221 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm3, %xmm3
1022210222 ; AVX1-NEXT: vpacksswb %xmm5, %xmm3, %xmm3
1022310223 ; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm5
1022410224 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
1022510225 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
1022610226 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm2, %xmm2
10227 ; AVX1-NEXT: vmovaps 48(%rbp), %ymm6
10227 ; AVX1-NEXT: vmovdqa 48(%rbp), %ymm6
1022810228 ; AVX1-NEXT: vpacksswb %xmm5, %xmm2, %xmm2
1022910229 ; AVX1-NEXT: vpacksswb %xmm3, %xmm2, %xmm2
1023010230 ; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm3
1023110231 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1023210232 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm5, %xmm3
10233 ; AVX1-NEXT: vmovaps 16(%rbp), %ymm5
10233 ; AVX1-NEXT: vmovdqa 16(%rbp), %ymm5
1023410234 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm1, %xmm1
1023510235 ; AVX1-NEXT: vpacksswb %xmm3, %xmm1, %xmm1
1023610236 ; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm3
43144314 ; AVX1-NEXT: callq __truncdfhf2
43154315 ; AVX1-NEXT: movzwl %ax, %r14d
43164316 ; AVX1-NEXT: orl %ebx, %r14d
4317 ; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload
4317 ; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload
43184318 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
43194319 ; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
43204320 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
44614461 ; AVX1-NEXT: callq __truncdfhf2
44624462 ; AVX1-NEXT: movzwl %ax, %r14d
44634463 ; AVX1-NEXT: orl %ebx, %r14d
4464 ; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload
4464 ; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload
44654465 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
44664466 ; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
44674467 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
46154615 ; AVX1-NEXT: callq __truncdfhf2
46164616 ; AVX1-NEXT: movzwl %ax, %r14d
46174617 ; AVX1-NEXT: orl %ebx, %r14d
4618 ; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload
4618 ; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload
46194619 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
46204620 ; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
46214621 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
47734773 ; AVX1-NEXT: callq __truncdfhf2
47744774 ; AVX1-NEXT: movzwl %ax, %r15d
47754775 ; AVX1-NEXT: orl %ebx, %r15d
4776 ; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
4776 ; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
47774777 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
47784778 ; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
47794779 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
47984798 ; AVX1-NEXT: callq __truncdfhf2
47994799 ; AVX1-NEXT: movzwl %ax, %r15d
48004800 ; AVX1-NEXT: orl %ebx, %r15d
4801 ; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload
4801 ; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload
48024802 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
48034803 ; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
48044804 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
50765076 ; AVX1-NEXT: vzeroupper
50775077 ; AVX1-NEXT: callq __truncdfhf2
50785078 ; AVX1-NEXT: movl %eax, %r14d
5079 ; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
5079 ; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
50805080 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
50815081 ; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
50825082 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
52345234 ; AVX1-NEXT: callq __truncdfhf2
52355235 ; AVX1-NEXT: movzwl %ax, %ebx
52365236 ; AVX1-NEXT: orl %ebp, %ebx
5237 ; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload
5237 ; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload
52385238 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
52395239 ; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
52405240 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
54055405 ; AVX1-NEXT: callq __truncdfhf2
54065406 ; AVX1-NEXT: movzwl %ax, %ebx
54075407 ; AVX1-NEXT: orl %ebp, %ebx
5408 ; AVX1-NEXT: vmovupd (%rsp), %ymm0 # 32-byte Reload
5408 ; AVX1-NEXT: vmovups (%rsp), %ymm0 # 32-byte Reload
54095409 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
54105410 ; AVX1-NEXT: vmovapd %xmm0, (%rsp) # 16-byte Spill
54115411 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
55755575 ; AVX1-NEXT: vzeroupper
55765576 ; AVX1-NEXT: callq __truncdfhf2
55775577 ; AVX1-NEXT: movw %ax, {{[0-9]+}}(%rsp) # 2-byte Spill
5578 ; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
5578 ; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
55795579 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
55805580 ; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
55815581 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
55865586 ; AVX1-NEXT: # xmm0 = mem[1,0]
55875587 ; AVX1-NEXT: callq __truncdfhf2
55885588 ; AVX1-NEXT: movl %eax, %r12d
5589 ; AVX1-NEXT: vmovupd {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
5589 ; AVX1-NEXT: vmovups {{[0-9]+}}(%rsp), %ymm0 # 32-byte Reload
55905590 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
55915591 ; AVX1-NEXT: vmovapd %xmm0, {{[0-9]+}}(%rsp) # 16-byte Spill
55925592 ; AVX1-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
8686 define <8 x i32> @test_div7_8i32(<8 x i32> %a) nounwind {
8787 ; AVX1-LABEL: test_div7_8i32:
8888 ; AVX1: # BB#0:
89 ; AVX1-NEXT: vmovaps {{.*#+}} ymm1 = [2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027]
89 ; AVX1-NEXT: vmovdqa {{.*#+}} ymm1 = [2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027]
9090 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9191 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
9292 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
347347 define <8 x i32> @test_rem7_8i32(<8 x i32> %a) nounwind {
348348 ; AVX1-LABEL: test_rem7_8i32:
349349 ; AVX1: # BB#0:
350 ; AVX1-NEXT: vmovaps {{.*#+}} ymm1 = [2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027]
350 ; AVX1-NEXT: vmovdqa {{.*#+}} ymm1 = [2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027,2454267027]
351351 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
352352 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
353353 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
358358 define <8 x i32> @test_rem7_8i32(<8 x i32> %a) nounwind {
359359 ; AVX1-LABEL: test_rem7_8i32:
360360 ; AVX1: # BB#0:
361 ; AVX1-NEXT: vmovaps {{.*#+}} ymm1 = [613566757,613566757,613566757,613566757,613566757,613566757,613566757,613566757]
361 ; AVX1-NEXT: vmovdqa {{.*#+}} ymm1 = [613566757,613566757,613566757,613566757,613566757,613566757,613566757,613566757]
362362 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
363363 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
364364 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1010 ; AVX1-LABEL: testv4i64:
1111 ; AVX1: # BB#0:
1212 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
13 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm1
13 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm1
1515 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1616 ; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm5
1717 ; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm1
3636 ; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2
3737 ; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
3838 ; AVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
39 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm5
39 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm5
4040 ; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm5
4141 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm6
4242 ; AVX1-NEXT: vpand %xmm3, %xmm6, %xmm3
142142 ; AVX1-LABEL: testv4i64u:
143143 ; AVX1: # BB#0:
144144 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
145 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
146 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm1
145 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
146 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm1
147147 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
148148 ; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm5
149149 ; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm1
168168 ; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2
169169 ; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm5
170170 ; AVX1-NEXT: vpaddq %xmm2, %xmm5, %xmm2
171 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm5
171 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm5
172172 ; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm5
173173 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm6
174174 ; AVX1-NEXT: vpand %xmm3, %xmm6, %xmm3
274274 ; AVX1-LABEL: testv8i32:
275275 ; AVX1: # BB#0:
276276 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
277 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
278 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
277 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
278 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
279279 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
280280 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
281281 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm5
295295 ; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm1
296296 ; AVX1-NEXT: vpsrld $16, %xmm3, %xmm3
297297 ; AVX1-NEXT: vpaddd %xmm1, %xmm3, %xmm1
298 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
298 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
299299 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
300300 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm5
301301 ; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2
386386 ; AVX1-LABEL: testv8i32u:
387387 ; AVX1: # BB#0:
388388 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
389 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
390 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
389 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
390 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
391391 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
392392 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
393393 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm5
407407 ; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm1
408408 ; AVX1-NEXT: vpsrld $16, %xmm3, %xmm3
409409 ; AVX1-NEXT: vpaddd %xmm1, %xmm3, %xmm1
410 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
410 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
411411 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
412412 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm5
413413 ; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2
498498 ; AVX1-LABEL: testv16i16:
499499 ; AVX1: # BB#0:
500500 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
501 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
502 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
501 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
502 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
503503 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
504504 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
505505 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm5
514514 ; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm1
515515 ; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3
516516 ; AVX1-NEXT: vpaddw %xmm1, %xmm3, %xmm1
517 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
517 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
518518 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
519519 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm5
520520 ; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2
585585 ; AVX1-LABEL: testv16i16u:
586586 ; AVX1: # BB#0:
587587 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
588 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
589 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
588 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
589 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
590590 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
591591 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
592592 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm5
601601 ; AVX1-NEXT: vpand %xmm1, %xmm3, %xmm1
602602 ; AVX1-NEXT: vpsrlw $8, %xmm3, %xmm3
603603 ; AVX1-NEXT: vpaddw %xmm1, %xmm3, %xmm1
604 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
604 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
605605 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
606606 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm5
607607 ; AVX1-NEXT: vpand %xmm2, %xmm5, %xmm2
672672 ; AVX1-LABEL: testv32i8:
673673 ; AVX1: # BB#0:
674674 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
675 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
676 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
675 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
676 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
677677 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
678678 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
679679 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
683683 ; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
684684 ; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm1
685685 ; AVX1-NEXT: vpaddb %xmm1, %xmm3, %xmm1
686 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
686 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
687687 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
688688 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
689689 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
746746 ; AVX1-LABEL: testv32i8u:
747747 ; AVX1: # BB#0:
748748 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
749 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
750 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
749 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
750 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
751751 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
752752 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
753753 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
757757 ; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3
758758 ; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm1
759759 ; AVX1-NEXT: vpaddb %xmm1, %xmm3, %xmm1
760 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
760 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
761761 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
762762 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
763763 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
55 ; AVX1-LABEL: testv4i64:
66 ; AVX1: # BB#0:
77 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
8 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
8 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
1010 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1111 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
1212 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
1515 ; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm1
1616 ; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
1717 ; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm1
18 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm5
18 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm5
1919 ; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm5
2020 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
2121 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
4646 ; AVX1-LABEL: testv8i32:
4747 ; AVX1: # BB#0:
4848 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
49 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
50 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
49 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
50 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
5151 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5252 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
5353 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
6060 ; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
6161 ; AVX1-NEXT: vpsadbw %xmm3, %xmm1, %xmm1
6262 ; AVX1-NEXT: vpackuswb %xmm5, %xmm1, %xmm1
63 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm5
63 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm5
6464 ; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm5
6565 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
6666 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
144144 ; AVX1-LABEL: testv32i8:
145145 ; AVX1: # BB#0:
146146 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
147 ; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
148 ; AVX1-NEXT: vandps %xmm2, %xmm1, %xmm3
147 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
148 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm3
149149 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
150150 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
151151 ; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1
152152 ; AVX1-NEXT: vpand %xmm2, %xmm1, %xmm1
153153 ; AVX1-NEXT: vpshufb %xmm1, %xmm4, %xmm1
154154 ; AVX1-NEXT: vpaddb %xmm3, %xmm1, %xmm1
155 ; AVX1-NEXT: vandps %xmm2, %xmm0, %xmm3
155 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm3
156156 ; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
157157 ; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0
158158 ; AVX1-NEXT: vpand %xmm2, %xmm0, %xmm0
620620 ; AVX1-LABEL: trunc_add_const_v16i64_v16i8:
621621 ; AVX1: # BB#0:
622622 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
623 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
624 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
625 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
623 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
624 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
625 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
626626 ; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3
627627 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
628 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
629 ; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2
628 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
629 ; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
630630 ; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2
631631 ; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2
632632 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
633 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
634 ; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1
633 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
634 ; AVX1-NEXT: vpand %xmm5, %xmm1, %xmm1
635635 ; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1
636636 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
637 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
638 ; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0
637 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
638 ; AVX1-NEXT: vpand %xmm5, %xmm0, %xmm0
639639 ; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0
640640 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
641641 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
716716 ; AVX1-LABEL: trunc_add_const_v16i32_v16i8:
717717 ; AVX1: # BB#0:
718718 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
719 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
720 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
721 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1
719 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
720 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
721 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
722722 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
723723 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
724 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
725 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0
724 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
725 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
726726 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
727727 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
728728 ; AVX1-NEXT: vpaddb {{.*}}(%rip), %xmm0, %xmm0
34003400 ; AVX1-LABEL: trunc_and_const_v16i64_v16i8:
34013401 ; AVX1: # BB#0:
34023402 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
3403 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3404 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
3405 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
3403 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3404 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
3405 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
34063406 ; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3
34073407 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3408 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
3409 ; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2
3408 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
3409 ; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
34103410 ; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2
34113411 ; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2
34123412 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
3413 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
3414 ; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1
3413 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
3414 ; AVX1-NEXT: vpand %xmm5, %xmm1, %xmm1
34153415 ; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1
34163416 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3417 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
3418 ; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0
3417 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
3418 ; AVX1-NEXT: vpand %xmm5, %xmm0, %xmm0
34193419 ; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0
34203420 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
34213421 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
34963496 ; AVX1-LABEL: trunc_and_const_v16i32_v16i8:
34973497 ; AVX1: # BB#0:
34983498 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3499 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3500 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
3501 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1
3499 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3500 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
3501 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
35023502 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
35033503 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
3504 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
3505 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0
3504 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
3505 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
35063506 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
35073507 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
35083508 ; AVX1-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0
41364136 ; AVX1-LABEL: trunc_xor_const_v16i64_v16i8:
41374137 ; AVX1: # BB#0:
41384138 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
4139 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4140 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
4141 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
4139 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4140 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
4141 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
41424142 ; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3
41434143 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4144 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
4145 ; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2
4144 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
4145 ; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
41464146 ; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2
41474147 ; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2
41484148 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4149 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
4150 ; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1
4149 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
4150 ; AVX1-NEXT: vpand %xmm5, %xmm1, %xmm1
41514151 ; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1
41524152 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
4153 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
4154 ; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0
4153 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
4154 ; AVX1-NEXT: vpand %xmm5, %xmm0, %xmm0
41554155 ; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0
41564156 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
41574157 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
42324232 ; AVX1-LABEL: trunc_xor_const_v16i32_v16i8:
42334233 ; AVX1: # BB#0:
42344234 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4235 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4236 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
4237 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1
4235 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4236 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
4237 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
42384238 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
42394239 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
4240 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
4241 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0
4240 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
4241 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
42424242 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
42434243 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
42444244 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0
48724872 ; AVX1-LABEL: trunc_or_const_v16i64_v16i8:
48734873 ; AVX1: # BB#0:
48744874 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
4875 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4876 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
4877 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
4875 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4876 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
4877 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
48784878 ; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3
48794879 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4880 ; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4
4881 ; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2
4880 ; AVX1-NEXT: vpand %xmm5, %xmm4, %xmm4
4881 ; AVX1-NEXT: vpand %xmm5, %xmm2, %xmm2
48824882 ; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2
48834883 ; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2
48844884 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
4885 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
4886 ; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1
4885 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
4886 ; AVX1-NEXT: vpand %xmm5, %xmm1, %xmm1
48874887 ; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1
48884888 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
4889 ; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3
4890 ; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0
4889 ; AVX1-NEXT: vpand %xmm5, %xmm3, %xmm3
4890 ; AVX1-NEXT: vpand %xmm5, %xmm0, %xmm0
48914891 ; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0
48924892 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
48934893 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
49684968 ; AVX1-LABEL: trunc_or_const_v16i32_v16i8:
49694969 ; AVX1: # BB#0:
49704970 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4971 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4972 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
4973 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1
4971 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4972 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
4973 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
49744974 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
49754975 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
4976 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
4977 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0
4976 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
4977 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
49784978 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
49794979 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
49804980 ; AVX1-NEXT: vpor {{.*}}(%rip), %xmm0, %xmm0
143143 ; AVX1-LABEL: trunc8i64_8i8:
144144 ; AVX1: # BB#0: # %entry
145145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
146 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
147 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
148 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1
146 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
147 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
148 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
149149 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
150150 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
151 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
152 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0
151 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
152 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
153153 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
154154 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
155155 ; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
434434 ; AVX1-LABEL: trunc16i32_16i8:
435435 ; AVX1: # BB#0: # %entry
436436 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
437 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
438 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
439 ; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1
437 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
438 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
439 ; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1
440440 ; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1
441441 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
442 ; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2
443 ; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0
442 ; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2
443 ; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0
444444 ; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0
445445 ; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
446446 ; AVX1-NEXT: vmovdqu %xmm0, (%rax)
610610 ;
611611 ; AVX1-LABEL: test_abs_le_v8i64_fold:
612612 ; AVX1: # BB#0:
613 ; AVX1-NEXT: vmovups (%rdi), %ymm0
614 ; AVX1-NEXT: vmovups 32(%rdi), %ymm1
613 ; AVX1-NEXT: vmovdqu (%rdi), %ymm0
614 ; AVX1-NEXT: vmovdqu 32(%rdi), %ymm1
615615 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
616616 ; AVX1-NEXT: vpsrad $31, %xmm2, %xmm3
617617 ; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
54175417 ; AVX1-LABEL: test125:
54185418 ; AVX1: # BB#0: # %entry
54195419 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5420 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5421 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
5420 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5421 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
54225422 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
5423 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5423 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
54245424 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5425 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6
5426 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7
5425 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
5426 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
54275427 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
54285428 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
54295429 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5430 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5430 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
54315431 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
5432 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
5432 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
54335433 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5434 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7
5435 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5
5434 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
5435 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
54365436 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
54375437 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
54385438 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
55885588 ; AVX1-LABEL: test126:
55895589 ; AVX1: # BB#0: # %entry
55905590 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5591 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5592 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
5591 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5592 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
55935593 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
5594 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5594 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
55955595 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
55965596 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
55975597 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
5598 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7
5599 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6
5598 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
5599 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
56005600 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
56015601 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
56025602 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
56035603 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5604 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5604 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
56055605 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
5606 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
5606 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
56075607 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
56085608 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
5609 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7
5610 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5
5609 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
5610 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
56115611 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
56125612 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
56135613 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
57455745 ; AVX1-LABEL: test127:
57465746 ; AVX1: # BB#0: # %entry
57475747 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5748 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5749 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
5748 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5749 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
57505750 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
5751 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5751 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
57525752 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5753 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6
5754 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7
5753 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
5754 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
57555755 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
57565756 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
57575757 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5758 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5758 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
57595759 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
5760 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
5760 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
57615761 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5762 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7
5763 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5
5762 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
5763 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
57645764 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
57655765 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
57665766 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
59175917 ; AVX1-LABEL: test128:
59185918 ; AVX1: # BB#0: # %entry
59195919 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5920 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5921 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
5920 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5921 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
59225922 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
5923 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5923 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
59245924 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
59255925 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
59265926 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
5927 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7
5928 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6
5927 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
5928 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
59295929 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
59305930 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
59315931 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
59325932 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5933 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
5933 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
59345934 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
5935 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
5935 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
59365936 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
59375937 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
5938 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7
5939 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5
5938 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
5939 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
59405940 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
59415941 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
59425942 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
81338133 ; AVX1-LABEL: test157:
81348134 ; AVX1: # BB#0: # %entry
81358135 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8136 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8137 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
8136 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8137 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
81388138 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
8139 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8139 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
81408140 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
8141 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6
8142 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7
8141 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
8142 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
81438143 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
81448144 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
81458145 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
8146 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8146 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
81478147 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
8148 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
8148 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
81498149 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8150 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7
8151 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5
8150 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
8151 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
81528152 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
81538153 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
81548154 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
83018301 ; AVX1-LABEL: test158:
83028302 ; AVX1: # BB#0: # %entry
83038303 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
8304 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8305 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
8304 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8305 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
83068306 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
8307 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8307 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
83088308 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
83098309 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
83108310 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
8311 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm7
8312 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm6
8311 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
8312 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
83138313 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
83148314 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
83158315 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
83168316 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
8317 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8317 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
83188318 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
8319 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
8319 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
83208320 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
83218321 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
8322 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7
8323 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5
8322 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
8323 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
83248324 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
83258325 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
83268326 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
84598459 ; AVX1-LABEL: test159:
84608460 ; AVX1: # BB#0: # %entry
84618461 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
8462 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8463 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
8462 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8463 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
84648464 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
8465 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8465 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
84668466 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
8467 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6
8468 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7
8467 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
8468 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
84698469 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
84708470 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
84718471 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
8472 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8472 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
84738473 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
8474 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
8474 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
84758475 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8476 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm7
8477 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm5
8476 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
8477 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
84788478 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
84798479 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
84808480 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
86288628 ; AVX1-LABEL: test160:
86298629 ; AVX1: # BB#0: # %entry
86308630 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8631 ; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8632 ; AVX1-NEXT: vxorps %xmm5, %xmm4, %xmm4
8631 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8632 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
86338633 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
8634 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8634 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
86358635 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
86368636 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
86378637 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
8638 ; AVX1-NEXT: vxorps %xmm5, %xmm1, %xmm7
8639 ; AVX1-NEXT: vxorps %xmm5, %xmm3, %xmm6
8638 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
8639 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
86408640 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
86418641 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
86428642 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
86438643 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
8644 ; AVX1-NEXT: vxorps %xmm5, %xmm6, %xmm6
8644 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
86458645 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
8646 ; AVX1-NEXT: vxorps %xmm5, %xmm7, %xmm7
8646 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
86478647 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
86488648 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
8649 ; AVX1-NEXT: vxorps %xmm5, %xmm0, %xmm7
8650 ; AVX1-NEXT: vxorps %xmm5, %xmm2, %xmm5
8649 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
8650 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
86518651 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
86528652 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
86538653 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
90659065 ; AVX1-LABEL: test165:
90669066 ; AVX1: # BB#0: # %entry
90679067 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9068 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9069 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9068 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9069 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
90709070 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
9071 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9071 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
90729072 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9073 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4
9074 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
9073 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
9074 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
90759075 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
90769076 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
90779077 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
91639163 ; AVX1-LABEL: test166:
91649164 ; AVX1: # BB#0: # %entry
91659165 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9166 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9167 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9166 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9167 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
91689168 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9169 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9169 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
91709170 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
91719171 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
91729172 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
9173 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5
9174 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
9173 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
9174 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
91759175 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
91769176 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
91779177 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
92579257 ; AVX1-LABEL: test167:
92589258 ; AVX1: # BB#0: # %entry
92599259 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9260 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9261 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9260 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9261 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
92629262 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9263 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9263 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
92649264 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9265 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4
9266 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
9265 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
9266 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
92679267 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
92689268 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
92699269 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
93559355 ; AVX1-LABEL: test168:
93569356 ; AVX1: # BB#0: # %entry
93579357 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9358 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9359 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9358 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9359 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
93609360 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
9361 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9361 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
93629362 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
93639363 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
93649364 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
9365 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5
9366 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
9365 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
9366 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
93679367 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
93689368 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
93699369 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
97769776 ; AVX1-LABEL: test173:
97779777 ; AVX1: # BB#0: # %entry
97789778 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9779 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9780 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9779 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9780 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
97819781 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
9782 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9782 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
97839783 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9784 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4
9785 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
9784 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
9785 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
97869786 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
97879787 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
97889788 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
98739873 ; AVX1-LABEL: test174:
98749874 ; AVX1: # BB#0: # %entry
98759875 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9876 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9877 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9876 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9877 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
98789878 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9879 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9879 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
98809880 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
98819881 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
98829882 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
9883 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5
9884 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
9883 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
9884 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
98859885 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
98869886 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
98879887 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
99689968 ; AVX1-LABEL: test175:
99699969 ; AVX1: # BB#0: # %entry
99709970 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9971 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9972 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
9971 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9972 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
99739973 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9974 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
9974 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
99759975 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9976 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4
9977 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
9976 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
9977 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
99789978 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
99799979 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
99809980 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
1006510065 ; AVX1-LABEL: test176:
1006610066 ; AVX1: # BB#0: # %entry
1006710067 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
10068 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10069 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
10068 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10069 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1007010070 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
10071 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
10071 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
1007210072 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1007310073 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
1007410074 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
10075 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5
10076 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
10075 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
10076 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
1007710077 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
1007810078 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
1007910079 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
5252 }
5353
5454 define <4 x double> @load_factorf64_1(<16 x double>* %ptr) {
55 ; AVX-LABEL: load_factorf64_1:
56 ; AVX: # BB#0:
57 ; AVX-NEXT: vmovupd (%rdi), %ymm0
58 ; AVX-NEXT: vmovupd 32(%rdi), %ymm1
59 ; AVX-NEXT: vmovupd 64(%rdi), %ymm2
60 ; AVX-NEXT: vmovupd 96(%rdi), %ymm3
61 ; AVX-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
62 ; AVX-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
63 ; AVX-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
64 ; AVX-NEXT: vmulpd %ymm0, %ymm0, %ymm0
65 ; AVX-NEXT: retq
55 ; AVX1-LABEL: load_factorf64_1:
56 ; AVX1: # BB#0:
57 ; AVX1-NEXT: vmovups (%rdi), %ymm0
58 ; AVX1-NEXT: vmovups 32(%rdi), %ymm1
59 ; AVX1-NEXT: vmovups 64(%rdi), %ymm2
60 ; AVX1-NEXT: vmovups 96(%rdi), %ymm3
61 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
62 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
63 ; AVX1-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
64 ; AVX1-NEXT: vmulpd %ymm0, %ymm0, %ymm0
65 ; AVX1-NEXT: retq
66 ;
67 ; AVX2-LABEL: load_factorf64_1:
68 ; AVX2: # BB#0:
69 ; AVX2-NEXT: vmovupd (%rdi), %ymm0
70 ; AVX2-NEXT: vmovupd 32(%rdi), %ymm1
71 ; AVX2-NEXT: vmovupd 64(%rdi), %ymm2
72 ; AVX2-NEXT: vmovupd 96(%rdi), %ymm3
73 ; AVX2-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
74 ; AVX2-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1
75 ; AVX2-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
76 ; AVX2-NEXT: vmulpd %ymm0, %ymm0, %ymm0
77 ; AVX2-NEXT: retq
6678 %wide.vec = load <16 x double>, <16 x double>* %ptr, align 16
6779 %strided.v0 = shufflevector <16 x double> %wide.vec, <16 x double> undef, <4 x i32>
6880 %strided.v3 = shufflevector <16 x double> %wide.vec, <16 x double> undef, <4 x i32>