Skip to content

Commit 4e0b8ea

Browse files
committed
[RISCV] Add tests for vwsll for extends > .vf2. NFC
These cannot be picked up by TableGen patterns alone and need to be handled by combineBinOp_VLToVWBinOp_VL
1 parent 608a663 commit 4e0b8ea

File tree

1 file changed

+256
-0
lines changed

1 file changed

+256
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/vwsll-sdnode.ll

Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,3 +627,259 @@ define <vscale x 8 x i16> @vwsll_vi_nxv8i16(<vscale x 8 x i8> %a) {
627627
%z = shl <vscale x 8 x i16> %x, splat (i16 2)
628628
ret <vscale x 8 x i16> %z
629629
}
630+
631+
; ==============================================================================
632+
; i8 -> i64
633+
; ==============================================================================
634+
635+
define <vscale x 2 x i64> @vwsll_vv_nxv2i64_nxv2i8_sext(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) {
636+
; CHECK-LABEL: vwsll_vv_nxv2i64_nxv2i8_sext:
637+
; CHECK: # %bb.0:
638+
; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
639+
; CHECK-NEXT: vzext.vf8 v10, v8
640+
; CHECK-NEXT: vsext.vf8 v12, v9
641+
; CHECK-NEXT: vsll.vv v8, v10, v12
642+
; CHECK-NEXT: ret
643+
;
644+
; CHECK-ZVBB-LABEL: vwsll_vv_nxv2i64_nxv2i8_sext:
645+
; CHECK-ZVBB: # %bb.0:
646+
; CHECK-ZVBB-NEXT: vsetvli a0, zero, e64, m2, ta, ma
647+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
648+
; CHECK-ZVBB-NEXT: vsext.vf8 v12, v9
649+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
650+
; CHECK-ZVBB-NEXT: ret
651+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
652+
%y = sext <vscale x 2 x i8> %b to <vscale x 2 x i64>
653+
%z = shl <vscale x 2 x i64> %x, %y
654+
ret <vscale x 2 x i64> %z
655+
}
656+
657+
define <vscale x 2 x i64> @vwsll_vv_nxv2i64_nxv2i8_zext(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) {
658+
; CHECK-LABEL: vwsll_vv_nxv2i64_nxv2i8_zext:
659+
; CHECK: # %bb.0:
660+
; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
661+
; CHECK-NEXT: vzext.vf8 v10, v8
662+
; CHECK-NEXT: vzext.vf8 v12, v9
663+
; CHECK-NEXT: vsll.vv v8, v10, v12
664+
; CHECK-NEXT: ret
665+
;
666+
; CHECK-ZVBB-LABEL: vwsll_vv_nxv2i64_nxv2i8_zext:
667+
; CHECK-ZVBB: # %bb.0:
668+
; CHECK-ZVBB-NEXT: vsetvli a0, zero, e64, m2, ta, ma
669+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
670+
; CHECK-ZVBB-NEXT: vzext.vf8 v12, v9
671+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
672+
; CHECK-ZVBB-NEXT: ret
673+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
674+
%y = zext <vscale x 2 x i8> %b to <vscale x 2 x i64>
675+
%z = shl <vscale x 2 x i64> %x, %y
676+
ret <vscale x 2 x i64> %z
677+
}
678+
679+
define <vscale x 2 x i64> @vwsll_vx_i64_nxv2i64_nxv2i8(<vscale x 2 x i8> %a, i64 %b) {
680+
; CHECK-LABEL: vwsll_vx_i64_nxv2i64_nxv2i8:
681+
; CHECK: # %bb.0:
682+
; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, ma
683+
; CHECK-NEXT: vzext.vf8 v10, v8
684+
; CHECK-NEXT: vsll.vx v8, v10, a0
685+
; CHECK-NEXT: ret
686+
;
687+
; CHECK-ZVBB-LABEL: vwsll_vx_i64_nxv2i64_nxv2i8:
688+
; CHECK-ZVBB: # %bb.0:
689+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e64, m2, ta, ma
690+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
691+
; CHECK-ZVBB-NEXT: vsll.vx v8, v10, a0
692+
; CHECK-ZVBB-NEXT: ret
693+
%head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
694+
%splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
695+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
696+
%z = shl <vscale x 2 x i64> %x, %splat
697+
ret <vscale x 2 x i64> %z
698+
}
699+
700+
define <vscale x 2 x i64> @vwsll_vx_i32_nxv2i64_nxv2i8_sext(<vscale x 2 x i8> %a, i32 %b) {
701+
; CHECK-LABEL: vwsll_vx_i32_nxv2i64_nxv2i8_sext:
702+
; CHECK: # %bb.0:
703+
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
704+
; CHECK-NEXT: vmv.v.x v9, a0
705+
; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
706+
; CHECK-NEXT: vzext.vf8 v10, v8
707+
; CHECK-NEXT: vsext.vf2 v12, v9
708+
; CHECK-NEXT: vsll.vv v8, v10, v12
709+
; CHECK-NEXT: ret
710+
;
711+
; CHECK-ZVBB-LABEL: vwsll_vx_i32_nxv2i64_nxv2i8_sext:
712+
; CHECK-ZVBB: # %bb.0:
713+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e32, m1, ta, ma
714+
; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
715+
; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
716+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
717+
; CHECK-ZVBB-NEXT: vsext.vf2 v12, v9
718+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
719+
; CHECK-ZVBB-NEXT: ret
720+
%head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
721+
%splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
722+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
723+
%y = sext <vscale x 2 x i32> %splat to <vscale x 2 x i64>
724+
%z = shl <vscale x 2 x i64> %x, %y
725+
ret <vscale x 2 x i64> %z
726+
}
727+
728+
define <vscale x 2 x i64> @vwsll_vx_i32_nxv2i64_nxv2i8_zext(<vscale x 2 x i8> %a, i32 %b) {
729+
; CHECK-LABEL: vwsll_vx_i32_nxv2i64_nxv2i8_zext:
730+
; CHECK: # %bb.0:
731+
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
732+
; CHECK-NEXT: vmv.v.x v9, a0
733+
; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
734+
; CHECK-NEXT: vzext.vf8 v10, v8
735+
; CHECK-NEXT: vzext.vf2 v12, v9
736+
; CHECK-NEXT: vsll.vv v8, v10, v12
737+
; CHECK-NEXT: ret
738+
;
739+
; CHECK-ZVBB-LABEL: vwsll_vx_i32_nxv2i64_nxv2i8_zext:
740+
; CHECK-ZVBB: # %bb.0:
741+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e32, m1, ta, ma
742+
; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
743+
; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
744+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
745+
; CHECK-ZVBB-NEXT: vzext.vf2 v12, v9
746+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
747+
; CHECK-ZVBB-NEXT: ret
748+
%head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
749+
%splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
750+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
751+
%y = zext <vscale x 2 x i32> %splat to <vscale x 2 x i64>
752+
%z = shl <vscale x 2 x i64> %x, %y
753+
ret <vscale x 2 x i64> %z
754+
}
755+
756+
define <vscale x 2 x i64> @vwsll_vx_i16_nxv2i64_nxv2i8_sext(<vscale x 2 x i8> %a, i16 %b) {
757+
; CHECK-LABEL: vwsll_vx_i16_nxv2i64_nxv2i8_sext:
758+
; CHECK: # %bb.0:
759+
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
760+
; CHECK-NEXT: vmv.v.x v9, a0
761+
; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
762+
; CHECK-NEXT: vzext.vf8 v10, v8
763+
; CHECK-NEXT: vsext.vf4 v12, v9
764+
; CHECK-NEXT: vsll.vv v8, v10, v12
765+
; CHECK-NEXT: ret
766+
;
767+
; CHECK-ZVBB-LABEL: vwsll_vx_i16_nxv2i64_nxv2i8_sext:
768+
; CHECK-ZVBB: # %bb.0:
769+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
770+
; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
771+
; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
772+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
773+
; CHECK-ZVBB-NEXT: vsext.vf4 v12, v9
774+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
775+
; CHECK-ZVBB-NEXT: ret
776+
%head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
777+
%splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
778+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
779+
%y = sext <vscale x 2 x i16> %splat to <vscale x 2 x i64>
780+
%z = shl <vscale x 2 x i64> %x, %y
781+
ret <vscale x 2 x i64> %z
782+
}
783+
784+
define <vscale x 2 x i64> @vwsll_vx_i16_nxv2i64_nxv2i8_zext(<vscale x 2 x i8> %a, i16 %b) {
785+
; CHECK-LABEL: vwsll_vx_i16_nxv2i64_nxv2i8_zext:
786+
; CHECK: # %bb.0:
787+
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
788+
; CHECK-NEXT: vmv.v.x v9, a0
789+
; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
790+
; CHECK-NEXT: vzext.vf8 v10, v8
791+
; CHECK-NEXT: vzext.vf4 v12, v9
792+
; CHECK-NEXT: vsll.vv v8, v10, v12
793+
; CHECK-NEXT: ret
794+
;
795+
; CHECK-ZVBB-LABEL: vwsll_vx_i16_nxv2i64_nxv2i8_zext:
796+
; CHECK-ZVBB: # %bb.0:
797+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
798+
; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
799+
; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
800+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
801+
; CHECK-ZVBB-NEXT: vzext.vf4 v12, v9
802+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
803+
; CHECK-ZVBB-NEXT: ret
804+
%head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
805+
%splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
806+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
807+
%y = zext <vscale x 2 x i16> %splat to <vscale x 2 x i64>
808+
%z = shl <vscale x 2 x i64> %x, %y
809+
ret <vscale x 2 x i64> %z
810+
}
811+
812+
define <vscale x 2 x i64> @vwsll_vx_i8_nxv2i64_nxv2i8_sext(<vscale x 2 x i8> %a, i8 %b) {
813+
; CHECK-LABEL: vwsll_vx_i8_nxv2i64_nxv2i8_sext:
814+
; CHECK: # %bb.0:
815+
; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
816+
; CHECK-NEXT: vmv.v.x v9, a0
817+
; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
818+
; CHECK-NEXT: vzext.vf8 v10, v8
819+
; CHECK-NEXT: vsext.vf8 v12, v9
820+
; CHECK-NEXT: vsll.vv v8, v10, v12
821+
; CHECK-NEXT: ret
822+
;
823+
; CHECK-ZVBB-LABEL: vwsll_vx_i8_nxv2i64_nxv2i8_sext:
824+
; CHECK-ZVBB: # %bb.0:
825+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
826+
; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
827+
; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
828+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
829+
; CHECK-ZVBB-NEXT: vsext.vf8 v12, v9
830+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
831+
; CHECK-ZVBB-NEXT: ret
832+
%head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
833+
%splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
834+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
835+
%y = sext <vscale x 2 x i8> %splat to <vscale x 2 x i64>
836+
%z = shl <vscale x 2 x i64> %x, %y
837+
ret <vscale x 2 x i64> %z
838+
}
839+
840+
define <vscale x 2 x i64> @vwsll_vx_i8_nxv2i64_nxv2i8_zext(<vscale x 2 x i8> %a, i8 %b) {
841+
; CHECK-LABEL: vwsll_vx_i8_nxv2i64_nxv2i8_zext:
842+
; CHECK: # %bb.0:
843+
; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
844+
; CHECK-NEXT: vmv.v.x v9, a0
845+
; CHECK-NEXT: vsetvli zero, zero, e64, m2, ta, ma
846+
; CHECK-NEXT: vzext.vf8 v10, v8
847+
; CHECK-NEXT: vzext.vf8 v12, v9
848+
; CHECK-NEXT: vsll.vv v8, v10, v12
849+
; CHECK-NEXT: ret
850+
;
851+
; CHECK-ZVBB-LABEL: vwsll_vx_i8_nxv2i64_nxv2i8_zext:
852+
; CHECK-ZVBB: # %bb.0:
853+
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
854+
; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
855+
; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
856+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
857+
; CHECK-ZVBB-NEXT: vzext.vf8 v12, v9
858+
; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
859+
; CHECK-ZVBB-NEXT: ret
860+
%head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
861+
%splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
862+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
863+
%y = zext <vscale x 2 x i8> %splat to <vscale x 2 x i64>
864+
%z = shl <vscale x 2 x i64> %x, %y
865+
ret <vscale x 2 x i64> %z
866+
}
867+
868+
define <vscale x 2 x i64> @vwsll_vi_nxv2i64_nxv2i8(<vscale x 2 x i8> %a) {
869+
; CHECK-LABEL: vwsll_vi_nxv2i64_nxv2i8:
870+
; CHECK: # %bb.0:
871+
; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
872+
; CHECK-NEXT: vzext.vf8 v10, v8
873+
; CHECK-NEXT: vsll.vi v8, v10, 2
874+
; CHECK-NEXT: ret
875+
;
876+
; CHECK-ZVBB-LABEL: vwsll_vi_nxv2i64_nxv2i8:
877+
; CHECK-ZVBB: # %bb.0:
878+
; CHECK-ZVBB-NEXT: vsetvli a0, zero, e64, m2, ta, ma
879+
; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
880+
; CHECK-ZVBB-NEXT: vsll.vi v8, v10, 2
881+
; CHECK-ZVBB-NEXT: ret
882+
%x = zext <vscale x 2 x i8> %a to <vscale x 2 x i64>
883+
%z = shl <vscale x 2 x i64> %x, splat (i64 2)
884+
ret <vscale x 2 x i64> %z
885+
}

0 commit comments

Comments
 (0)