@@ -55,13 +55,13 @@ define <4 x i32> @combine_vec_srem_by_negone(<4 x i32> %x) {
55
55
define i32 @combine_srem_by_minsigned (i32 %x ) {
56
56
; CHECK-LABEL: combine_srem_by_minsigned:
57
57
; CHECK: # %bb.0:
58
+ ; CHECK-NEXT: # kill: def $edi killed $edi def $rdi
58
59
; CHECK-NEXT: movl %edi, %eax
59
60
; CHECK-NEXT: sarl $31, %eax
60
61
; CHECK-NEXT: shrl %eax
61
62
; CHECK-NEXT: addl %edi, %eax
62
63
; 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
65
65
; CHECK-NEXT: retq
66
66
%1 = srem i32 %x , -2147483648
67
67
ret i32 %1
@@ -359,10 +359,9 @@ define <4 x i32> @combine_vec_srem_by_pow2b_neg(<4 x i32> %x) {
359
359
; SSE-NEXT: psrad $1, %xmm1
360
360
; SSE-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
361
361
; 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
366
365
; SSE-NEXT: retq
367
366
;
368
367
; 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) {
383
382
; AVX1-NEXT: vpsrad $1, %xmm1, %xmm1
384
383
; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7]
385
384
; 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
388
385
; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1
389
- ; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0
386
+ ; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0
390
387
; AVX1-NEXT: retq
391
388
;
392
389
; 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) {
395
392
; AVX2-NEXT: vpsrlvd {{.*}}(%rip), %xmm1, %xmm1
396
393
; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm1
397
394
; AVX2-NEXT: vpsravd {{.*}}(%rip), %xmm1, %xmm1
398
- ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
399
- ; AVX2-NEXT: vpsubd %xmm1, %xmm2, %xmm1
400
395
; AVX2-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1
401
- ; AVX2-NEXT: vpsubd %xmm1, %xmm0, %xmm0
396
+ ; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
402
397
; AVX2-NEXT: retq
403
398
%1 = srem <4 x i32 > %x , <i32 -2 , i32 -4 , i32 -8 , i32 -16 >
404
399
ret <4 x i32 > %1
0 commit comments