Index: test/CodeGen/X86/psubus.ll =================================================================== --- test/CodeGen/X86/psubus.ll +++ test/CodeGen/X86/psubus.ll @@ -10,11 +10,13 @@ ; SSE: ## BB#0: ## %vector.ph ; SSE-NEXT: psubusw {{.*}}(%rip), %xmm0 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX-LABEL: test1: ; AVX: ## BB#0: ## %vector.ph ; AVX-NEXT: vpsubusw {{.*}}(%rip), %xmm0, %xmm0 ; AVX-NEXT: retq +; AVX-NEXT: ## -- End function vector.ph: %0 = icmp slt <8 x i16> %x, zeroinitializer %1 = xor <8 x i16> %x, @@ -27,11 +29,13 @@ ; SSE: ## BB#0: ## %vector.ph ; SSE-NEXT: psubusw {{.*}}(%rip), %xmm0 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX-LABEL: test2: ; AVX: ## BB#0: ## %vector.ph ; AVX-NEXT: vpsubusw {{.*}}(%rip), %xmm0, %xmm0 ; AVX-NEXT: retq +; AVX-NEXT: ## -- End function vector.ph: %0 = icmp ugt <8 x i16> %x, %1 = add <8 x i16> %x, @@ -47,6 +51,7 @@ ; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1] ; SSE-NEXT: psubusw %xmm1, %xmm0 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX1-LABEL: test3: ; AVX1: ## BB#0: ## %vector.ph @@ -55,6 +60,7 @@ ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,0,1,1] ; AVX1-NEXT: vpsubusw %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test3: ; AVX2: ## BB#0: ## %vector.ph @@ -62,6 +68,7 @@ ; AVX2-NEXT: vpbroadcastw %xmm1, %xmm1 ; AVX2-NEXT: vpsubusw %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = insertelement <8 x i16> undef, i16 %w, i32 0 %broadcast15 = shufflevector <8 x i16> %0, <8 x i16> undef, <8 x i32> zeroinitializer @@ -76,11 +83,13 @@ ; SSE: ## BB#0: ## %vector.ph ; SSE-NEXT: psubusb {{.*}}(%rip), %xmm0 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX-LABEL: test4: ; AVX: ## BB#0: ## %vector.ph ; AVX-NEXT: vpsubusb {{.*}}(%rip), %xmm0, %xmm0 ; AVX-NEXT: retq +; AVX-NEXT: ## -- End function vector.ph: %0 = icmp slt <16 x i8> %x, zeroinitializer %1 = xor <16 x i8> %x, @@ -93,11 +102,13 @@ ; SSE: ## BB#0: ## %vector.ph ; SSE-NEXT: psubusb {{.*}}(%rip), %xmm0 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX-LABEL: test5: ; AVX: ## BB#0: ## %vector.ph ; AVX-NEXT: vpsubusb {{.*}}(%rip), %xmm0, %xmm0 ; AVX-NEXT: retq +; AVX-NEXT: ## -- End function vector.ph: %0 = icmp ugt <16 x i8> %x, %1 = add <16 x i8> %x, @@ -114,6 +125,7 @@ ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1] ; SSE2-NEXT: psubusb %xmm1, %xmm0 ; SSE2-NEXT: retq +; SSE2-NEXT: ## -- End function ; ; SSSE3-LABEL: test6: ; SSSE3: ## BB#0: ## %vector.ph @@ -122,6 +134,7 @@ ; SSSE3-NEXT: pshufb %xmm2, %xmm1 ; SSSE3-NEXT: psubusb %xmm1, %xmm0 ; SSSE3-NEXT: retq +; SSSE3-NEXT: ## -- End function ; ; SSE41-LABEL: test6: ; SSE41: ## BB#0: ## %vector.ph @@ -130,6 +143,7 @@ ; SSE41-NEXT: pshufb %xmm2, %xmm1 ; SSE41-NEXT: psubusb %xmm1, %xmm0 ; SSE41-NEXT: retq +; SSE41-NEXT: ## -- End function ; ; AVX1-LABEL: test6: ; AVX1: ## BB#0: ## %vector.ph @@ -138,6 +152,7 @@ ; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 ; AVX1-NEXT: vpsubusb %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test6: ; AVX2: ## BB#0: ## %vector.ph @@ -145,6 +160,7 @@ ; AVX2-NEXT: vpbroadcastb %xmm1, %xmm1 ; AVX2-NEXT: vpsubusb %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = insertelement <16 x i8> undef, i8 %w, i32 0 %broadcast15 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> zeroinitializer @@ -161,6 +177,7 @@ ; SSE-NEXT: psubusw %xmm2, %xmm0 ; SSE-NEXT: psubusw %xmm2, %xmm1 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX1-LABEL: test7: ; AVX1: ## BB#0: ## %vector.ph @@ -172,11 +189,13 @@ ; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 ; AVX1-NEXT: vandps %ymm0, %ymm1, %ymm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test7: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpsubusw {{.*}}(%rip), %ymm0, %ymm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = icmp slt <16 x i16> %x, zeroinitializer %1 = xor <16 x i16> %x, @@ -191,6 +210,7 @@ ; SSE-NEXT: psubusw %xmm2, %xmm0 ; SSE-NEXT: psubusw %xmm2, %xmm1 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX1-LABEL: test8: ; AVX1: ## BB#0: ## %vector.ph @@ -208,11 +228,13 @@ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: vandps %ymm0, %ymm2, %ymm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test8: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpsubusw {{.*}}(%rip), %ymm0, %ymm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = icmp ugt <16 x i16> %x, %1 = add <16 x i16> %x, @@ -229,6 +251,7 @@ ; SSE-NEXT: psubusw %xmm2, %xmm0 ; SSE-NEXT: psubusw %xmm2, %xmm1 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX1-LABEL: test9: ; AVX1: ## BB#0: ## %vector.ph @@ -246,6 +269,7 @@ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: vandps %ymm3, %ymm0, %ymm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test9: ; AVX2: ## BB#0: ## %vector.ph @@ -253,6 +277,7 @@ ; AVX2-NEXT: vpbroadcastw %xmm1, %ymm1 ; AVX2-NEXT: vpsubusw %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = insertelement <16 x i16> undef, i16 %w, i32 0 %broadcast15 = shufflevector <16 x i16> %0, <16 x i16> undef, <16 x i32> zeroinitializer @@ -269,6 +294,7 @@ ; SSE-NEXT: psubusb %xmm2, %xmm0 ; SSE-NEXT: psubusb %xmm2, %xmm1 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX1-LABEL: test10: ; AVX1: ## BB#0: ## %vector.ph @@ -280,11 +306,13 @@ ; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 ; AVX1-NEXT: vandps %ymm0, %ymm1, %ymm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test10: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpsubusb {{.*}}(%rip), %ymm0, %ymm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = icmp slt <32 x i8> %x, zeroinitializer %1 = xor <32 x i8> %x, @@ -299,6 +327,7 @@ ; SSE-NEXT: psubusb %xmm2, %xmm0 ; SSE-NEXT: psubusb %xmm2, %xmm1 ; SSE-NEXT: retq +; SSE-NEXT: ## -- End function ; ; AVX1-LABEL: test11: ; AVX1: ## BB#0: ## %vector.ph @@ -316,11 +345,13 @@ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 ; AVX1-NEXT: vandps %ymm0, %ymm2, %ymm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test11: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpsubusb {{.*}}(%rip), %ymm0, %ymm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = icmp ugt <32 x i8> %x, %1 = add <32 x i8> %x, @@ -338,6 +369,7 @@ ; SSE2-NEXT: psubusb %xmm2, %xmm0 ; SSE2-NEXT: psubusb %xmm2, %xmm1 ; SSE2-NEXT: retq +; SSE2-NEXT: ## -- End function ; ; SSSE3-LABEL: test12: ; SSSE3: ## BB#0: ## %vector.ph @@ -347,6 +379,7 @@ ; SSSE3-NEXT: psubusb %xmm2, %xmm0 ; SSSE3-NEXT: psubusb %xmm2, %xmm1 ; SSSE3-NEXT: retq +; SSSE3-NEXT: ## -- End function ; ; SSE41-LABEL: test12: ; SSE41: ## BB#0: ## %vector.ph @@ -356,6 +389,7 @@ ; SSE41-NEXT: psubusb %xmm2, %xmm0 ; SSE41-NEXT: psubusb %xmm2, %xmm1 ; SSE41-NEXT: retq +; SSE41-NEXT: ## -- End function ; ; AVX1-LABEL: test12: ; AVX1: ## BB#0: ## %vector.ph @@ -373,6 +407,7 @@ ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 ; AVX1-NEXT: vandps %ymm3, %ymm0, %ymm0 ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test12: ; AVX2: ## BB#0: ## %vector.ph @@ -380,6 +415,7 @@ ; AVX2-NEXT: vpbroadcastb %xmm1, %ymm1 ; AVX2-NEXT: vpsubusb %ymm1, %ymm0, %ymm0 ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %0 = insertelement <32 x i8> undef, i8 %w, i32 0 %broadcast15 = shufflevector <32 x i8> %0, <32 x i8> undef, <32 x i32> zeroinitializer @@ -422,6 +458,7 @@ ; SSE2-NEXT: pandn %xmm3, %xmm2 ; SSE2-NEXT: movdqa %xmm2, %xmm0 ; SSE2-NEXT: retq +; SSE2-NEXT: ## -- End function ; ; SSSE3-LABEL: test13: ; SSSE3: ## BB#0: ## %vector.ph @@ -451,6 +488,7 @@ ; SSSE3-NEXT: pandn %xmm3, %xmm2 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 ; SSSE3-NEXT: retq +; SSSE3-NEXT: ## -- End function ; ; SSE41-LABEL: test13: ; SSE41: ## BB#0: ## %vector.ph @@ -478,6 +516,7 @@ ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0] ; SSE41-NEXT: pandn %xmm3, %xmm0 ; SSE41-NEXT: retq +; SSE41-NEXT: ## -- End function ; ; AVX1-LABEL: test13: ; AVX1: ## BB#0: ## %vector.ph @@ -502,11 +541,12 @@ ; AVX1-NEXT: vpandn %xmm0, %xmm3, %xmm0 ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test13: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero -; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 +; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648] ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX2-NEXT: vpcmpgtd %ymm2, %ymm3, %ymm2 @@ -518,6 +558,7 @@ ; AVX2-NEXT: vpandn %xmm0, %xmm2, %xmm0 ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %lhs = zext <8 x i16> %x to <8 x i32> %cond = icmp ult <8 x i32> %lhs, %y @@ -579,6 +620,7 @@ ; SSE2-NEXT: packuswb %xmm3, %xmm1 ; SSE2-NEXT: pandn %xmm1, %xmm0 ; SSE2-NEXT: retq +; SSE2-NEXT: ## -- End function ; ; SSSE3-LABEL: test14: ; SSSE3: ## BB#0: ## %vector.ph @@ -634,6 +676,7 @@ ; SSSE3-NEXT: packuswb %xmm3, %xmm1 ; SSSE3-NEXT: andnpd %xmm1, %xmm0 ; SSSE3-NEXT: retq +; SSSE3-NEXT: ## -- End function ; ; SSE41-LABEL: test14: ; SSE41: ## BB#0: ## %vector.ph @@ -687,6 +730,7 @@ ; SSE41-NEXT: pblendvb %xmm0, %xmm2, %xmm1 ; SSE41-NEXT: movdqa %xmm1, %xmm0 ; SSE41-NEXT: retq +; SSE41-NEXT: ## -- End function ; ; AVX1-LABEL: test14: ; AVX1: ## BB#0: ## %vector.ph @@ -731,13 +775,14 @@ ; AVX1-NEXT: vpblendvb %xmm3, %xmm1, %xmm0, %xmm0 ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test14: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,0,1] ; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero,xmm3[4],zero,zero,zero,xmm3[5],zero,zero,zero,xmm3[6],zero,zero,zero,xmm3[7],zero,zero,zero ; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero -; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm4 +; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm4 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648] ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6 ; AVX2-NEXT: vpcmpgtd %ymm5, %ymm6, %ymm5 @@ -764,6 +809,7 @@ ; AVX2-NEXT: vpblendvb %xmm4, %xmm1, %xmm0, %xmm0 ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %rhs = zext <16 x i8> %x to <16 x i32> %cond = icmp ult <16 x i32> %y, %rhs @@ -806,6 +852,7 @@ ; SSE2-NEXT: pand %xmm4, %xmm3 ; SSE2-NEXT: movdqa %xmm3, %xmm0 ; SSE2-NEXT: retq +; SSE2-NEXT: ## -- End function ; ; SSSE3-LABEL: test15: ; SSSE3: ## BB#0: ## %vector.ph @@ -834,6 +881,7 @@ ; SSSE3-NEXT: pand %xmm4, %xmm3 ; SSSE3-NEXT: movdqa %xmm3, %xmm0 ; SSSE3-NEXT: retq +; SSSE3-NEXT: ## -- End function ; ; SSE41-LABEL: test15: ; SSE41: ## BB#0: ## %vector.ph @@ -860,6 +908,7 @@ ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0] ; SSE41-NEXT: pand %xmm5, %xmm0 ; SSE41-NEXT: retq +; SSE41-NEXT: ## -- End function ; ; AVX1-LABEL: test15: ; AVX1: ## BB#0: ## %vector.ph @@ -884,11 +933,12 @@ ; AVX1-NEXT: vpand %xmm0, %xmm3, %xmm0 ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test15: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero -; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 +; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648] ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX2-NEXT: vpcmpgtd %ymm3, %ymm2, %ymm2 @@ -900,6 +950,7 @@ ; AVX2-NEXT: vpand %xmm0, %xmm2, %xmm0 ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %lhs = zext <8 x i16> %x to <8 x i32> %cond = icmp ugt <8 x i32> %lhs, %y @@ -942,6 +993,7 @@ ; SSE2-NEXT: pand %xmm4, %xmm3 ; SSE2-NEXT: movdqa %xmm3, %xmm0 ; SSE2-NEXT: retq +; SSE2-NEXT: ## -- End function ; ; SSSE3-LABEL: test16: ; SSSE3: ## BB#0: ## %vector.ph @@ -970,6 +1022,7 @@ ; SSSE3-NEXT: pand %xmm4, %xmm3 ; SSSE3-NEXT: movdqa %xmm3, %xmm0 ; SSSE3-NEXT: retq +; SSSE3-NEXT: ## -- End function ; ; SSE41-LABEL: test16: ; SSE41: ## BB#0: ## %vector.ph @@ -996,6 +1049,7 @@ ; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0] ; SSE41-NEXT: pand %xmm5, %xmm0 ; SSE41-NEXT: retq +; SSE41-NEXT: ## -- End function ; ; AVX1-LABEL: test16: ; AVX1: ## BB#0: ## %vector.ph @@ -1020,11 +1074,12 @@ ; AVX1-NEXT: vpand %xmm0, %xmm3, %xmm0 ; AVX1-NEXT: vzeroupper ; AVX1-NEXT: retq +; AVX1-NEXT: ## -- End function ; ; AVX2-LABEL: test16: ; AVX2: ## BB#0: ## %vector.ph ; AVX2-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero -; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 +; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648,2147483648] ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2 ; AVX2-NEXT: vpcmpgtd %ymm3, %ymm2, %ymm2 @@ -1036,6 +1091,7 @@ ; AVX2-NEXT: vpand %xmm0, %xmm2, %xmm0 ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq +; AVX2-NEXT: ## -- End function vector.ph: %lhs = zext <8 x i16> %x to <8 x i32> %cond = icmp ult <8 x i32> %y, %lhs