@@ -589,33 +589,27 @@ define void @vnsrl_0_i8_two_source(ptr %in0, ptr %in1, ptr %out) {
589
589
; V-LABEL: vnsrl_0_i8_two_source:
590
590
; V: # %bb.0: # %entry
591
591
; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
592
- ; V-NEXT: vle8.v v8, (a0)
593
- ; V-NEXT: vle8.v v9, (a1)
594
- ; V-NEXT: vmv.v.i v0, -16
595
- ; V-NEXT: vid.v v10
596
- ; V-NEXT: vadd.vv v10, v10, v10
597
- ; V-NEXT: vadd.vi v10, v10, -8
592
+ ; V-NEXT: vle8.v v8, (a1)
593
+ ; V-NEXT: vle8.v v9, (a0)
598
594
; V-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
599
595
; V-NEXT: vnsrl.wi v8, v8, 0
600
- ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
601
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
602
- ; V-NEXT: vse8.v v8, (a2)
596
+ ; V-NEXT: vnsrl.wi v9, v9, 0
597
+ ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
598
+ ; V-NEXT: vslideup.vi v9, v8, 4
599
+ ; V-NEXT: vse8.v v9, (a2)
603
600
; V-NEXT: ret
604
601
;
605
602
; ZVE32F-LABEL: vnsrl_0_i8_two_source:
606
603
; ZVE32F: # %bb.0: # %entry
607
604
; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
608
- ; ZVE32F-NEXT: vle8.v v8, (a0)
609
- ; ZVE32F-NEXT: vle8.v v9, (a1)
610
- ; ZVE32F-NEXT: vmv.v.i v0, -16
611
- ; ZVE32F-NEXT: vid.v v10
612
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
613
- ; ZVE32F-NEXT: vadd.vi v10, v10, -8
605
+ ; ZVE32F-NEXT: vle8.v v8, (a1)
606
+ ; ZVE32F-NEXT: vle8.v v9, (a0)
614
607
; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
615
608
; ZVE32F-NEXT: vnsrl.wi v8, v8, 0
616
- ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
617
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
618
- ; ZVE32F-NEXT: vse8.v v8, (a2)
609
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 0
610
+ ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
611
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 4
612
+ ; ZVE32F-NEXT: vse8.v v9, (a2)
619
613
; ZVE32F-NEXT: ret
620
614
entry:
621
615
%0 = load <8 x i8 >, ptr %in0 , align 1
@@ -629,33 +623,27 @@ define void @vnsrl_8_8_two_source(ptr %in0, ptr %in1, ptr %out) {
629
623
; V-LABEL: vnsrl_8_8_two_source:
630
624
; V: # %bb.0: # %entry
631
625
; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
632
- ; V-NEXT: vle8.v v8, (a0)
633
- ; V-NEXT: vle8.v v9, (a1)
634
- ; V-NEXT: vmv.v.i v0, -16
635
- ; V-NEXT: vid.v v10
636
- ; V-NEXT: vadd.vv v10, v10, v10
637
- ; V-NEXT: vadd.vi v10, v10, -7
626
+ ; V-NEXT: vle8.v v8, (a1)
627
+ ; V-NEXT: vle8.v v9, (a0)
638
628
; V-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
639
629
; V-NEXT: vnsrl.wi v8, v8, 8
640
- ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
641
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
642
- ; V-NEXT: vse8.v v8, (a2)
630
+ ; V-NEXT: vnsrl.wi v9, v9, 8
631
+ ; V-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
632
+ ; V-NEXT: vslideup.vi v9, v8, 4
633
+ ; V-NEXT: vse8.v v9, (a2)
643
634
; V-NEXT: ret
644
635
;
645
636
; ZVE32F-LABEL: vnsrl_8_8_two_source:
646
637
; ZVE32F: # %bb.0: # %entry
647
638
; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
648
- ; ZVE32F-NEXT: vle8.v v8, (a0)
649
- ; ZVE32F-NEXT: vle8.v v9, (a1)
650
- ; ZVE32F-NEXT: vmv.v.i v0, -16
651
- ; ZVE32F-NEXT: vid.v v10
652
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
653
- ; ZVE32F-NEXT: vadd.vi v10, v10, -7
639
+ ; ZVE32F-NEXT: vle8.v v8, (a1)
640
+ ; ZVE32F-NEXT: vle8.v v9, (a0)
654
641
; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
655
642
; ZVE32F-NEXT: vnsrl.wi v8, v8, 8
656
- ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, mu
657
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
658
- ; ZVE32F-NEXT: vse8.v v8, (a2)
643
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 8
644
+ ; ZVE32F-NEXT: vsetivli zero, 8, e8, mf4, ta, ma
645
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 4
646
+ ; ZVE32F-NEXT: vse8.v v9, (a2)
659
647
; ZVE32F-NEXT: ret
660
648
entry:
661
649
%0 = load <8 x i8 >, ptr %in0 , align 1
@@ -669,33 +657,27 @@ define void @vnsrl_0_i16_two_source(ptr %in0, ptr %in1, ptr %out) {
669
657
; V-LABEL: vnsrl_0_i16_two_source:
670
658
; V: # %bb.0: # %entry
671
659
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
672
- ; V-NEXT: vle16.v v8, (a0)
673
- ; V-NEXT: vle16.v v9, (a1)
674
- ; V-NEXT: vid.v v10
675
- ; V-NEXT: vadd.vv v10, v10, v10
676
- ; V-NEXT: vadd.vi v10, v10, -4
677
- ; V-NEXT: vmv.v.i v0, 12
660
+ ; V-NEXT: vle16.v v8, (a1)
661
+ ; V-NEXT: vle16.v v9, (a0)
678
662
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
679
663
; V-NEXT: vnsrl.wi v8, v8, 0
680
- ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, mu
681
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
682
- ; V-NEXT: vse16.v v8, (a2)
664
+ ; V-NEXT: vnsrl.wi v9, v9, 0
665
+ ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
666
+ ; V-NEXT: vslideup.vi v9, v8, 2
667
+ ; V-NEXT: vse16.v v9, (a2)
683
668
; V-NEXT: ret
684
669
;
685
670
; ZVE32F-LABEL: vnsrl_0_i16_two_source:
686
671
; ZVE32F: # %bb.0: # %entry
687
672
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
688
- ; ZVE32F-NEXT: vle16.v v8, (a0)
689
- ; ZVE32F-NEXT: vle16.v v9, (a1)
690
- ; ZVE32F-NEXT: vid.v v10
691
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
692
- ; ZVE32F-NEXT: vadd.vi v10, v10, -4
693
- ; ZVE32F-NEXT: vmv.v.i v0, 12
673
+ ; ZVE32F-NEXT: vle16.v v8, (a1)
674
+ ; ZVE32F-NEXT: vle16.v v9, (a0)
694
675
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
695
676
; ZVE32F-NEXT: vnsrl.wi v8, v8, 0
696
- ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
697
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
698
- ; ZVE32F-NEXT: vse16.v v8, (a2)
677
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 0
678
+ ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
679
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 2
680
+ ; ZVE32F-NEXT: vse16.v v9, (a2)
699
681
; ZVE32F-NEXT: ret
700
682
entry:
701
683
%0 = load <4 x i16 >, ptr %in0 , align 2
@@ -711,33 +693,25 @@ define void @vnsrl_16_i16_two_source(ptr %in0, ptr %in1, ptr %out) {
711
693
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
712
694
; V-NEXT: vle16.v v8, (a1)
713
695
; V-NEXT: vle16.v v9, (a0)
714
- ; V-NEXT: li a0, -1
715
696
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
716
- ; V-NEXT: vslidedown.vi v10, v8, 2
717
- ; V-NEXT: vwaddu.vv v11, v8, v10
718
- ; V-NEXT: vwmaccu.vx v11, a0, v10
719
- ; V-NEXT: vmv.v.i v0, 12
720
- ; V-NEXT: vnsrl.wi v8, v9, 16
697
+ ; V-NEXT: vnsrl.wi v8, v8, 16
698
+ ; V-NEXT: vnsrl.wi v9, v9, 16
721
699
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
722
- ; V-NEXT: vmerge.vvm v8 , v8, v11, v0
723
- ; V-NEXT: vse16.v v8 , (a2)
700
+ ; V-NEXT: vslideup.vi v9 , v8, 2
701
+ ; V-NEXT: vse16.v v9 , (a2)
724
702
; V-NEXT: ret
725
703
;
726
704
; ZVE32F-LABEL: vnsrl_16_i16_two_source:
727
705
; ZVE32F: # %bb.0: # %entry
728
706
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
729
707
; ZVE32F-NEXT: vle16.v v8, (a1)
730
708
; ZVE32F-NEXT: vle16.v v9, (a0)
731
- ; ZVE32F-NEXT: li a0, -1
732
709
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
733
- ; ZVE32F-NEXT: vslidedown.vi v10, v8, 2
734
- ; ZVE32F-NEXT: vwaddu.vv v11, v8, v10
735
- ; ZVE32F-NEXT: vwmaccu.vx v11, a0, v10
736
- ; ZVE32F-NEXT: vmv.v.i v0, 12
737
- ; ZVE32F-NEXT: vnsrl.wi v8, v9, 16
710
+ ; ZVE32F-NEXT: vnsrl.wi v8, v8, 16
711
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 16
738
712
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
739
- ; ZVE32F-NEXT: vmerge.vvm v8 , v8, v11, v0
740
- ; ZVE32F-NEXT: vse16.v v8 , (a2)
713
+ ; ZVE32F-NEXT: vslideup.vi v9 , v8, 2
714
+ ; ZVE32F-NEXT: vse16.v v9 , (a2)
741
715
; ZVE32F-NEXT: ret
742
716
entry:
743
717
%0 = load <4 x i16 >, ptr %in0 , align 2
@@ -751,33 +725,27 @@ define void @vnsrl_0_half_two_source(ptr %in0, ptr %in1, ptr %out) {
751
725
; V-LABEL: vnsrl_0_half_two_source:
752
726
; V: # %bb.0: # %entry
753
727
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
754
- ; V-NEXT: vle16.v v8, (a0)
755
- ; V-NEXT: vle16.v v9, (a1)
756
- ; V-NEXT: vid.v v10
757
- ; V-NEXT: vadd.vv v10, v10, v10
758
- ; V-NEXT: vadd.vi v10, v10, -4
759
- ; V-NEXT: vmv.v.i v0, 12
728
+ ; V-NEXT: vle16.v v8, (a1)
729
+ ; V-NEXT: vle16.v v9, (a0)
760
730
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
761
731
; V-NEXT: vnsrl.wi v8, v8, 0
762
- ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, mu
763
- ; V-NEXT: vrgather.vv v8, v9, v10, v0.t
764
- ; V-NEXT: vse16.v v8, (a2)
732
+ ; V-NEXT: vnsrl.wi v9, v9, 0
733
+ ; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
734
+ ; V-NEXT: vslideup.vi v9, v8, 2
735
+ ; V-NEXT: vse16.v v9, (a2)
765
736
; V-NEXT: ret
766
737
;
767
738
; ZVE32F-LABEL: vnsrl_0_half_two_source:
768
739
; ZVE32F: # %bb.0: # %entry
769
740
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
770
- ; ZVE32F-NEXT: vle16.v v8, (a0)
771
- ; ZVE32F-NEXT: vle16.v v9, (a1)
772
- ; ZVE32F-NEXT: vid.v v10
773
- ; ZVE32F-NEXT: vadd.vv v10, v10, v10
774
- ; ZVE32F-NEXT: vadd.vi v10, v10, -4
775
- ; ZVE32F-NEXT: vmv.v.i v0, 12
741
+ ; ZVE32F-NEXT: vle16.v v8, (a1)
742
+ ; ZVE32F-NEXT: vle16.v v9, (a0)
776
743
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
777
744
; ZVE32F-NEXT: vnsrl.wi v8, v8, 0
778
- ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, mu
779
- ; ZVE32F-NEXT: vrgather.vv v8, v9, v10, v0.t
780
- ; ZVE32F-NEXT: vse16.v v8, (a2)
745
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 0
746
+ ; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
747
+ ; ZVE32F-NEXT: vslideup.vi v9, v8, 2
748
+ ; ZVE32F-NEXT: vse16.v v9, (a2)
781
749
; ZVE32F-NEXT: ret
782
750
entry:
783
751
%0 = load <4 x half >, ptr %in0 , align 2
@@ -793,33 +761,25 @@ define void @vnsrl_16_half_two_source(ptr %in0, ptr %in1, ptr %out) {
793
761
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
794
762
; V-NEXT: vle16.v v8, (a1)
795
763
; V-NEXT: vle16.v v9, (a0)
796
- ; V-NEXT: li a0, -1
797
764
; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
798
- ; V-NEXT: vslidedown.vi v10, v8, 2
799
- ; V-NEXT: vwaddu.vv v11, v8, v10
800
- ; V-NEXT: vwmaccu.vx v11, a0, v10
801
- ; V-NEXT: vmv.v.i v0, 12
802
- ; V-NEXT: vnsrl.wi v8, v9, 16
765
+ ; V-NEXT: vnsrl.wi v8, v8, 16
766
+ ; V-NEXT: vnsrl.wi v9, v9, 16
803
767
; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
804
- ; V-NEXT: vmerge.vvm v8 , v8, v11, v0
805
- ; V-NEXT: vse16.v v8 , (a2)
768
+ ; V-NEXT: vslideup.vi v9 , v8, 2
769
+ ; V-NEXT: vse16.v v9 , (a2)
806
770
; V-NEXT: ret
807
771
;
808
772
; ZVE32F-LABEL: vnsrl_16_half_two_source:
809
773
; ZVE32F: # %bb.0: # %entry
810
774
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
811
775
; ZVE32F-NEXT: vle16.v v8, (a1)
812
776
; ZVE32F-NEXT: vle16.v v9, (a0)
813
- ; ZVE32F-NEXT: li a0, -1
814
777
; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
815
- ; ZVE32F-NEXT: vslidedown.vi v10, v8, 2
816
- ; ZVE32F-NEXT: vwaddu.vv v11, v8, v10
817
- ; ZVE32F-NEXT: vwmaccu.vx v11, a0, v10
818
- ; ZVE32F-NEXT: vmv.v.i v0, 12
819
- ; ZVE32F-NEXT: vnsrl.wi v8, v9, 16
778
+ ; ZVE32F-NEXT: vnsrl.wi v8, v8, 16
779
+ ; ZVE32F-NEXT: vnsrl.wi v9, v9, 16
820
780
; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
821
- ; ZVE32F-NEXT: vmerge.vvm v8 , v8, v11, v0
822
- ; ZVE32F-NEXT: vse16.v v8 , (a2)
781
+ ; ZVE32F-NEXT: vslideup.vi v9 , v8, 2
782
+ ; ZVE32F-NEXT: vse16.v v9 , (a2)
823
783
; ZVE32F-NEXT: ret
824
784
entry:
825
785
%0 = load <4 x half >, ptr %in0 , align 2
0 commit comments