@@ -556,33 +556,27 @@ define void @vnsrl_0_i8_two_source(ptr %in0, ptr %in1, ptr %out) {
556556; V-LABEL: vnsrl_0_i8_two_source:
557557; V: # %bb.0: # %entry
558558; 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)
565561; V-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
566562; 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)
570567; V-NEXT: ret
571568;
572569; ZVE32F-LABEL: vnsrl_0_i8_two_source:
573570; ZVE32F: # %bb.0: # %entry
574571; 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)
581574; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
582575; 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)
586580; ZVE32F-NEXT: ret
587581entry:
588582 %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) {
596590; V-LABEL: vnsrl_8_8_two_source:
597591; V: # %bb.0: # %entry
598592; 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)
605595; V-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
606596; 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)
610601; V-NEXT: ret
611602;
612603; ZVE32F-LABEL: vnsrl_8_8_two_source:
613604; ZVE32F: # %bb.0: # %entry
614605; 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)
621608; ZVE32F-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
622609; 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)
626614; ZVE32F-NEXT: ret
627615entry:
628616 %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) {
636624; V-LABEL: vnsrl_0_i16_two_source:
637625; V: # %bb.0: # %entry
638626; 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)
645629; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
646630; 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)
650635; V-NEXT: ret
651636;
652637; ZVE32F-LABEL: vnsrl_0_i16_two_source:
653638; ZVE32F: # %bb.0: # %entry
654639; 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)
661642; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
662643; 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)
666648; ZVE32F-NEXT: ret
667649entry:
668650 %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) {
678660; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
679661; V-NEXT: vle16.v v8, (a1)
680662; V-NEXT: vle16.v v9, (a0)
681- ; V-NEXT: li a0, -1
682663; 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
688666; 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)
691669; V-NEXT: ret
692670;
693671; ZVE32F-LABEL: vnsrl_16_i16_two_source:
694672; ZVE32F: # %bb.0: # %entry
695673; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
696674; ZVE32F-NEXT: vle16.v v8, (a1)
697675; ZVE32F-NEXT: vle16.v v9, (a0)
698- ; ZVE32F-NEXT: li a0, -1
699676; 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
705679; 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)
708682; ZVE32F-NEXT: ret
709683entry:
710684 %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) {
718692; V-LABEL: vnsrl_0_half_two_source:
719693; V: # %bb.0: # %entry
720694; 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)
727697; V-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
728698; 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)
732703; V-NEXT: ret
733704;
734705; ZVE32F-LABEL: vnsrl_0_half_two_source:
735706; ZVE32F: # %bb.0: # %entry
736707; 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)
743710; ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma
744711; 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)
748716; ZVE32F-NEXT: ret
749717entry:
750718 %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) {
760728; V-NEXT: vsetivli zero, 4, e16, mf4, ta, ma
761729; V-NEXT: vle16.v v8, (a1)
762730; V-NEXT: vle16.v v9, (a0)
763- ; V-NEXT: li a0, -1
764731; 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
770734; 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)
773737; V-NEXT: ret
774738;
775739; ZVE32F-LABEL: vnsrl_16_half_two_source:
776740; ZVE32F: # %bb.0: # %entry
777741; ZVE32F-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
778742; ZVE32F-NEXT: vle16.v v8, (a1)
779743; ZVE32F-NEXT: vle16.v v9, (a0)
780- ; ZVE32F-NEXT: li a0, -1
781744; 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
787747; 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)
790750; ZVE32F-NEXT: ret
791751entry:
792752 %0 = load <4 x half >, ptr %in0 , align 2
0 commit comments