@@ -55,13 +55,13 @@ define <4 x i32> @combine_vec_srem_by_negone(<4 x i32> %x) {
5555define i32 @combine_srem_by_minsigned (i32 %x ) {
5656; CHECK-LABEL: combine_srem_by_minsigned:
5757; CHECK: # %bb.0:
58+ ; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
5859; CHECK-NEXT: movl %edi, %eax
5960; CHECK-NEXT: sarl $31, %eax
6061; CHECK-NEXT: shrl %eax
6162; CHECK-NEXT: addl %edi, %eax
6263; CHECK-NEXT: andl $-2147483648, %eax # imm = 0x80000000
63- ; CHECK-NEXT: subl %eax, %edi
64- ; CHECK-NEXT: movl %edi, %eax
64+ ; CHECK-NEXT: leal (%rax,%rdi), %eax
6565; CHECK-NEXT: retq
6666 %1 = srem i32 %x , -2147483648
6767 ret i32 %1
@@ -359,10 +359,9 @@ define <4 x i32> @combine_vec_srem_by_pow2b_neg(<4 x i32> %x) {
359359; SSE-NEXT: psrad $1, %xmm1
360360; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
361361; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,3],xmm1[4,5],xmm3[6,7]
362- ; SSE-NEXT: pxor %xmm2, %xmm2
363- ; SSE-NEXT: psubd %xmm1, %xmm2
364- ; SSE-NEXT: pmulld {{.*}}(%rip), %xmm2
365- ; SSE-NEXT: psubd %xmm2, %xmm0
362+ ; SSE-NEXT: pmulld {{.*}}(%rip), %xmm1
363+ ; SSE-NEXT: paddd %xmm0, %xmm1
364+ ; SSE-NEXT: movdqa %xmm1, %xmm0
366365; SSE-NEXT: retq
367366;
368367; AVX1-LABEL: combine_vec_srem_by_pow2b_neg:
@@ -383,10 +382,8 @@ define <4 x i32> @combine_vec_srem_by_pow2b_neg(<4 x i32> %x) {
383382; AVX1-NEXT: vpsrad $1, %xmm1, %xmm1
384383; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]
385384; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
386- ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
387- ; AVX1-NEXT: vpsubd %xmm1, %xmm2, %xmm1
388385; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1
389- ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0
386+ ; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0
390387; AVX1-NEXT: retq
391388;
392389; AVX2-LABEL: combine_vec_srem_by_pow2b_neg:
@@ -395,10 +392,8 @@ define <4 x i32> @combine_vec_srem_by_pow2b_neg(<4 x i32> %x) {
395392; AVX2-NEXT: vpsrlvd {{.*}}(%rip), %xmm1, %xmm1
396393; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm1
397394; AVX2-NEXT: vpsravd {{.*}}(%rip), %xmm1, %xmm1
398- ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
399- ; AVX2-NEXT: vpsubd %xmm1, %xmm2, %xmm1
400395; AVX2-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1
401- ; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm0
396+ ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
402397; AVX2-NEXT: retq
403398 %1 = srem <4 x i32 > %x , <i32 -2 , i32 -4 , i32 -8 , i32 -16 >
404399 ret <4 x i32 > %1
0 commit comments