@@ -418,39 +418,21 @@ define <4 x i32> @combine_vec_shl_ge_ashr_exact1(<4 x i32> %x) {
418
418
; SSE2-LABEL: combine_vec_shl_ge_ashr_exact1:
419
419
; SSE2: # %bb.0:
420
420
; SSE2-NEXT: movdqa %xmm0, %xmm1
421
- ; SSE2-NEXT: psrad $3, %xmm1
422
- ; SSE2-NEXT: movdqa %xmm0, %xmm2
423
- ; SSE2-NEXT: psrad $5, %xmm2
424
- ; SSE2-NEXT: movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
425
- ; SSE2-NEXT: movdqa %xmm0, %xmm1
426
- ; SSE2-NEXT: psrad $8, %xmm1
427
- ; SSE2-NEXT: psrad $4, %xmm0
428
- ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[3,3]
429
- ; SSE2-NEXT: pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
430
- ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]
431
- ; SSE2-NEXT: pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
432
- ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
433
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
421
+ ; SSE2-NEXT: pslld $2, %xmm1
422
+ ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
423
+ ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
424
+ ; SSE2-NEXT: movaps %xmm1, %xmm0
434
425
; SSE2-NEXT: retq
435
426
;
436
427
; SSE41-LABEL: combine_vec_shl_ge_ashr_exact1:
437
428
; SSE41: # %bb.0:
438
429
; SSE41-NEXT: movdqa %xmm0, %xmm1
439
- ; SSE41-NEXT: psrad $8, %xmm1
440
- ; SSE41-NEXT: movdqa %xmm0, %xmm2
441
- ; SSE41-NEXT: psrad $4, %xmm2
442
- ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7]
443
- ; SSE41-NEXT: movdqa %xmm0, %xmm1
444
- ; SSE41-NEXT: psrad $5, %xmm1
445
- ; SSE41-NEXT: psrad $3, %xmm0
446
- ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
447
- ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
448
- ; SSE41-NEXT: pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
430
+ ; SSE41-NEXT: pslld $2, %xmm1
431
+ ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5],xmm0[6,7]
449
432
; SSE41-NEXT: retq
450
433
;
451
434
; AVX-LABEL: combine_vec_shl_ge_ashr_exact1:
452
435
; AVX: # %bb.0:
453
- ; AVX-NEXT: vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
454
436
; AVX-NEXT: vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
455
437
; AVX-NEXT: retq
456
438
%1 = ashr exact <4 x i32 > %x , <i32 3 , i32 4 , i32 5 , i32 8 >
@@ -495,40 +477,22 @@ define <4 x i32> @combine_vec_shl_lt_ashr_exact1(<4 x i32> %x) {
495
477
; SSE2-LABEL: combine_vec_shl_lt_ashr_exact1:
496
478
; SSE2: # %bb.0:
497
479
; SSE2-NEXT: movdqa %xmm0, %xmm1
498
- ; SSE2-NEXT: psrad $5, %xmm1
499
- ; SSE2-NEXT: movdqa %xmm0, %xmm2
500
- ; SSE2-NEXT: psrad $7, %xmm2
501
- ; SSE2-NEXT: movsd {{.*#+}} xmm2 = xmm1[0],xmm2[1]
502
- ; SSE2-NEXT: movdqa %xmm0, %xmm1
503
- ; SSE2-NEXT: psrad $8, %xmm1
504
- ; SSE2-NEXT: psrad $6, %xmm0
505
- ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[3,3]
506
- ; SSE2-NEXT: pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
507
- ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[0,2,2,3]
508
- ; SSE2-NEXT: pmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
509
- ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
510
- ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
480
+ ; SSE2-NEXT: psrad $2, %xmm1
481
+ ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[2,0]
482
+ ; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
483
+ ; SSE2-NEXT: movaps %xmm1, %xmm0
511
484
; SSE2-NEXT: retq
512
485
;
513
486
; SSE41-LABEL: combine_vec_shl_lt_ashr_exact1:
514
487
; SSE41: # %bb.0:
515
488
; SSE41-NEXT: movdqa %xmm0, %xmm1
516
- ; SSE41-NEXT: psrad $8, %xmm1
517
- ; SSE41-NEXT: movdqa %xmm0, %xmm2
518
- ; SSE41-NEXT: psrad $6, %xmm2
519
- ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7]
520
- ; SSE41-NEXT: movdqa %xmm0, %xmm1
521
- ; SSE41-NEXT: psrad $7, %xmm1
522
- ; SSE41-NEXT: psrad $5, %xmm0
523
- ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
524
- ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
525
- ; SSE41-NEXT: pmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
489
+ ; SSE41-NEXT: psrad $2, %xmm1
490
+ ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3,4,5],xmm0[6,7]
526
491
; SSE41-NEXT: retq
527
492
;
528
493
; AVX-LABEL: combine_vec_shl_lt_ashr_exact1:
529
494
; AVX: # %bb.0:
530
495
; AVX-NEXT: vpsravd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
531
- ; AVX-NEXT: vpsllvd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
532
496
; AVX-NEXT: retq
533
497
%1 = ashr exact <4 x i32 > %x , <i32 5 , i32 6 , i32 7 , i32 8 >
534
498
%2 = shl <4 x i32 > %1 , <i32 3 , i32 4 , i32 5 , i32 8 >
0 commit comments