@@ -556,33 +556,27 @@ define void @vnsrl_0_i8_two_source(ptr %in0, ptr %in1, ptr %out) {
556
556
; V-LABEL: vnsrl_0_i8_two_source:
557
557
; V: # %bb.0: # %entry
558
558
; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
559
- ; V-NEXT: vle8.v v8, (a0)
560
- ; V-NEXT: vle8.v v9, (a1)
561
- ; V-NEXT: vmv.v.i v0, -16
562
- ; V-NEXT: vid.v v10
563
- ; V-NEXT: vadd.vv v10, v10, v10
564
- ; V-NEXT: vadd.vi v10, v10, -8
559
+ ; V-NEXT: vle8.v v8, (a1)
560
+ ; V-NEXT: vle8.v v9, (a0)
565
561
; V-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
566
562
; V-NEXT: vnsrl.wi v8, v8, 0
567
- ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
568
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
569
- ; V-NEXT: vse8.v v8, (a2)
563
+ ; V-NEXT: vnsrl.wi v9, v9, 0
564
+ ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
565
+ ; V-NEXT: vslideup.vi v9, v8, 4
566
+ ; V-NEXT: vse8.v v9, (a2)
570
567
; V-NEXT: ret
571
568
;
572
569
; ZVE32F-LABEL: vnsrl_0_i8_two_source:
573
570
; ZVE32F: # %bb.0: # %entry
574
571
; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
575
- ; ZVE32F-NEXT: vle8.v v8, (a0)
576
- ; ZVE32F-NEXT: vle8.v v9, (a1)
577
- ; ZVE32F-NEXT: vmv.v.i v0, -16
578
- ; ZVE32F-NEXT: vid.v v10
579
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
580
- ; ZVE32F-NEXT: vadd.vi v10, v10, -8
572
+ ; ZVE32F-NEXT: vle8.v v8, (a1)
573
+ ; ZVE32F-NEXT: vle8.v v9, (a0)
581
574
; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
582
575
; ZVE32F-NEXT: vnsrl.wi v8, v8, 0
583
- ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
584
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
585
- ; ZVE32F-NEXT: vse8.v v8, (a2)
576
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 0
577
+ ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
578
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 4
579
+ ; ZVE32F-NEXT: vse8.v v9, (a2)
586
580
; ZVE32F-NEXT: ret
587
581
entry:
588
582
%0 = load <8 x i8 >, ptr %in0 , align 1
@@ -596,33 +590,27 @@ define void @vnsrl_8_8_two_source(ptr %in0, ptr %in1, ptr %out) {
596
590
; V-LABEL: vnsrl_8_8_two_source:
597
591
; V: # %bb.0: # %entry
598
592
; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
599
- ; V-NEXT: vle8.v v8, (a0)
600
- ; V-NEXT: vle8.v v9, (a1)
601
- ; V-NEXT: vmv.v.i v0, -16
602
- ; V-NEXT: vid.v v10
603
- ; V-NEXT: vadd.vv v10, v10, v10
604
- ; V-NEXT: vadd.vi v10, v10, -7
593
+ ; V-NEXT: vle8.v v8, (a1)
594
+ ; V-NEXT: vle8.v v9, (a0)
605
595
; V-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
606
596
; V-NEXT: vnsrl.wi v8, v8, 8
607
- ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
608
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
609
- ; V-NEXT: vse8.v v8, (a2)
597
+ ; V-NEXT: vnsrl.wi v9, v9, 8
598
+ ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
599
+ ; V-NEXT: vslideup.vi v9, v8, 4
600
+ ; V-NEXT: vse8.v v9, (a2)
610
601
; V-NEXT: ret
611
602
;
612
603
; ZVE32F-LABEL: vnsrl_8_8_two_source:
613
604
; ZVE32F: # %bb.0: # %entry
614
605
; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
615
- ; ZVE32F-NEXT: vle8.v v8, (a0)
616
- ; ZVE32F-NEXT: vle8.v v9, (a1)
617
- ; ZVE32F-NEXT: vmv.v.i v0, -16
618
- ; ZVE32F-NEXT: vid.v v10
619
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
620
- ; ZVE32F-NEXT: vadd.vi v10, v10, -7
606
+ ; ZVE32F-NEXT: vle8.v v8, (a1)
607
+ ; ZVE32F-NEXT: vle8.v v9, (a0)
621
608
; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
622
609
; ZVE32F-NEXT: vnsrl.wi v8, v8, 8
623
- ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
624
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
625
- ; ZVE32F-NEXT: vse8.v v8, (a2)
610
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 8
611
+ ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
612
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 4
613
+ ; ZVE32F-NEXT: vse8.v v9, (a2)
626
614
; ZVE32F-NEXT: ret
627
615
entry:
628
616
%0 = load <8 x i8 >, ptr %in0 , align 1
@@ -636,33 +624,27 @@ define void @vnsrl_0_i16_two_source(ptr %in0, ptr %in1, ptr %out) {
636
624
; V-LABEL: vnsrl_0_i16_two_source:
637
625
; V: # %bb.0: # %entry
638
626
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
639
- ; V-NEXT: vle16.v v8, (a0)
640
- ; V-NEXT: vle16.v v9, (a1)
641
- ; V-NEXT: vid.v v10
642
- ; V-NEXT: vadd.vv v10, v10, v10
643
- ; V-NEXT: vadd.vi v10, v10, -4
644
- ; V-NEXT: vmv.v.i v0, 12
627
+ ; V-NEXT: vle16.v v8, (a1)
628
+ ; V-NEXT: vle16.v v9, (a0)
645
629
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
646
630
; V-NEXT: vnsrl.wi v8, v8, 0
647
- ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, mu
648
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
649
- ; V-NEXT: vse16.v v8, (a2)
631
+ ; V-NEXT: vnsrl.wi v9, v9, 0
632
+ ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
633
+ ; V-NEXT: vslideup.vi v9, v8, 2
634
+ ; V-NEXT: vse16.v v9, (a2)
650
635
; V-NEXT: ret
651
636
;
652
637
; ZVE32F-LABEL: vnsrl_0_i16_two_source:
653
638
; ZVE32F: # %bb.0: # %entry
654
639
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
655
- ; ZVE32F-NEXT: vle16.v v8, (a0)
656
- ; ZVE32F-NEXT: vle16.v v9, (a1)
657
- ; ZVE32F-NEXT: vid.v v10
658
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
659
- ; ZVE32F-NEXT: vadd.vi v10, v10, -4
660
- ; ZVE32F-NEXT: vmv.v.i v0, 12
640
+ ; ZVE32F-NEXT: vle16.v v8, (a1)
641
+ ; ZVE32F-NEXT: vle16.v v9, (a0)
661
642
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
662
643
; ZVE32F-NEXT: vnsrl.wi v8, v8, 0
663
- ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
664
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
665
- ; ZVE32F-NEXT: vse16.v v8, (a2)
644
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 0
645
+ ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
646
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 2
647
+ ; ZVE32F-NEXT: vse16.v v9, (a2)
666
648
; ZVE32F-NEXT: ret
667
649
entry:
668
650
%0 = load <4 x i16 >, ptr %in0 , align 2
@@ -678,33 +660,25 @@ define void @vnsrl_16_i16_two_source(ptr %in0, ptr %in1, ptr %out) {
678
660
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
679
661
; V-NEXT: vle16.v v8, (a1)
680
662
; V-NEXT: vle16.v v9, (a0)
681
- ; V-NEXT: li a0, -1
682
663
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
683
- ; V-NEXT: vslidedown.vi v10, v8, 2
684
- ; V-NEXT: vwaddu.vv v11, v8, v10
685
- ; V-NEXT: vwmaccu.vx v11, a0, v10
686
- ; V-NEXT: vmv.v.i v0, 12
687
- ; V-NEXT: vnsrl.wi v8, v9, 16
664
+ ; V-NEXT: vnsrl.wi v8, v8, 16
665
+ ; V-NEXT: vnsrl.wi v9, v9, 16
688
666
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
689
- ; V-NEXT: vmerge.vvm v8 , v8, v11, v0
690
- ; V-NEXT: vse16.v v8 , (a2)
667
+ ; V-NEXT: vslideup.vi v9 , v8, 2
668
+ ; V-NEXT: vse16.v v9 , (a2)
691
669
; V-NEXT: ret
692
670
;
693
671
; ZVE32F-LABEL: vnsrl_16_i16_two_source:
694
672
; ZVE32F: # %bb.0: # %entry
695
673
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
696
674
; ZVE32F-NEXT: vle16.v v8, (a1)
697
675
; ZVE32F-NEXT: vle16.v v9, (a0)
698
- ; ZVE32F-NEXT: li a0, -1
699
676
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
700
- ; ZVE32F-NEXT: vslidedown.vi v10, v8, 2
701
- ; ZVE32F-NEXT: vwaddu.vv v11, v8, v10
702
- ; ZVE32F-NEXT: vwmaccu.vx v11, a0, v10
703
- ; ZVE32F-NEXT: vmv.v.i v0, 12
704
- ; ZVE32F-NEXT: vnsrl.wi v8, v9, 16
677
+ ; ZVE32F-NEXT: vnsrl.wi v8, v8, 16
678
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 16
705
679
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
706
- ; ZVE32F-NEXT: vmerge.vvm v8 , v8, v11, v0
707
- ; ZVE32F-NEXT: vse16.v v8 , (a2)
680
+ ; ZVE32F-NEXT: vslideup.vi v9 , v8, 2
681
+ ; ZVE32F-NEXT: vse16.v v9 , (a2)
708
682
; ZVE32F-NEXT: ret
709
683
entry:
710
684
%0 = load <4 x i16 >, ptr %in0 , align 2
@@ -718,33 +692,27 @@ define void @vnsrl_0_half_two_source(ptr %in0, ptr %in1, ptr %out) {
718
692
; V-LABEL: vnsrl_0_half_two_source:
719
693
; V: # %bb.0: # %entry
720
694
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
721
- ; V-NEXT: vle16.v v8, (a0)
722
- ; V-NEXT: vle16.v v9, (a1)
723
- ; V-NEXT: vid.v v10
724
- ; V-NEXT: vadd.vv v10, v10, v10
725
- ; V-NEXT: vadd.vi v10, v10, -4
726
- ; V-NEXT: vmv.v.i v0, 12
695
+ ; V-NEXT: vle16.v v8, (a1)
696
+ ; V-NEXT: vle16.v v9, (a0)
727
697
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
728
698
; V-NEXT: vnsrl.wi v8, v8, 0
729
- ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, mu
730
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
731
- ; V-NEXT: vse16.v v8, (a2)
699
+ ; V-NEXT: vnsrl.wi v9, v9, 0
700
+ ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
701
+ ; V-NEXT: vslideup.vi v9, v8, 2
702
+ ; V-NEXT: vse16.v v9, (a2)
732
703
; V-NEXT: ret
733
704
;
734
705
; ZVE32F-LABEL: vnsrl_0_half_two_source:
735
706
; ZVE32F: # %bb.0: # %entry
736
707
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
737
- ; ZVE32F-NEXT: vle16.v v8, (a0)
738
- ; ZVE32F-NEXT: vle16.v v9, (a1)
739
- ; ZVE32F-NEXT: vid.v v10
740
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
741
- ; ZVE32F-NEXT: vadd.vi v10, v10, -4
742
- ; ZVE32F-NEXT: vmv.v.i v0, 12
708
+ ; ZVE32F-NEXT: vle16.v v8, (a1)
709
+ ; ZVE32F-NEXT: vle16.v v9, (a0)
743
710
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
744
711
; ZVE32F-NEXT: vnsrl.wi v8, v8, 0
745
- ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
746
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
747
- ; ZVE32F-NEXT: vse16.v v8, (a2)
712
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 0
713
+ ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
714
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 2
715
+ ; ZVE32F-NEXT: vse16.v v9, (a2)
748
716
; ZVE32F-NEXT: ret
749
717
entry:
750
718
%0 = load <4 x half >, ptr %in0 , align 2
@@ -760,33 +728,25 @@ define void @vnsrl_16_half_two_source(ptr %in0, ptr %in1, ptr %out) {
760
728
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
761
729
; V-NEXT: vle16.v v8, (a1)
762
730
; V-NEXT: vle16.v v9, (a0)
763
- ; V-NEXT: li a0, -1
764
731
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
765
- ; V-NEXT: vslidedown.vi v10, v8, 2
766
- ; V-NEXT: vwaddu.vv v11, v8, v10
767
- ; V-NEXT: vwmaccu.vx v11, a0, v10
768
- ; V-NEXT: vmv.v.i v0, 12
769
- ; V-NEXT: vnsrl.wi v8, v9, 16
732
+ ; V-NEXT: vnsrl.wi v8, v8, 16
733
+ ; V-NEXT: vnsrl.wi v9, v9, 16
770
734
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
771
- ; V-NEXT: vmerge.vvm v8 , v8, v11, v0
772
- ; V-NEXT: vse16.v v8 , (a2)
735
+ ; V-NEXT: vslideup.vi v9 , v8, 2
736
+ ; V-NEXT: vse16.v v9 , (a2)
773
737
; V-NEXT: ret
774
738
;
775
739
; ZVE32F-LABEL: vnsrl_16_half_two_source:
776
740
; ZVE32F: # %bb.0: # %entry
777
741
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
778
742
; ZVE32F-NEXT: vle16.v v8, (a1)
779
743
; ZVE32F-NEXT: vle16.v v9, (a0)
780
- ; ZVE32F-NEXT: li a0, -1
781
744
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
782
- ; ZVE32F-NEXT: vslidedown.vi v10, v8, 2
783
- ; ZVE32F-NEXT: vwaddu.vv v11, v8, v10
784
- ; ZVE32F-NEXT: vwmaccu.vx v11, a0, v10
785
- ; ZVE32F-NEXT: vmv.v.i v0, 12
786
- ; ZVE32F-NEXT: vnsrl.wi v8, v9, 16
745
+ ; ZVE32F-NEXT: vnsrl.wi v8, v8, 16
746
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 16
787
747
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
788
- ; ZVE32F-NEXT: vmerge.vvm v8 , v8, v11, v0
789
- ; ZVE32F-NEXT: vse16.v v8 , (a2)
748
+ ; ZVE32F-NEXT: vslideup.vi v9 , v8, 2
749
+ ; ZVE32F-NEXT: vse16.v v9 , (a2)
790
750
; ZVE32F-NEXT: ret
791
751
entry:
792
752
%0 = load <4 x half >, ptr %in0 , align 2
0 commit comments