1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2
2
; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3
3
; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
4
- ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB
5
- ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB
4
+ ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB,CHECK-ZVBB32
5
+ ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB,CHECK-ZVBB64
6
6
7
7
; ==============================================================================
8
8
; i32 -> i64
@@ -111,8 +111,7 @@ define <4 x i64> @vwsll_vx_i32_v4i64_zext(<4 x i32> %a, i32 %b) {
111
111
; CHECK-ZVBB-LABEL: vwsll_vx_i32_v4i64_zext:
112
112
; CHECK-ZVBB: # %bb.0:
113
113
; CHECK-ZVBB-NEXT: vsetivli zero, 4, e32, m1, ta, ma
114
- ; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
115
- ; CHECK-ZVBB-NEXT: vwsll.vv v10, v8, v9
114
+ ; CHECK-ZVBB-NEXT: vwsll.vx v10, v8, a0
116
115
; CHECK-ZVBB-NEXT: vmv2r.v v8, v10
117
116
; CHECK-ZVBB-NEXT: ret
118
117
%head = insertelement <4 x i32 > poison, i32 %b , i32 0
@@ -371,8 +370,7 @@ define <8 x i32> @vwsll_vx_i16_v8i32_zext(<8 x i16> %a, i16 %b) {
371
370
; CHECK-ZVBB-LABEL: vwsll_vx_i16_v8i32_zext:
372
371
; CHECK-ZVBB: # %bb.0:
373
372
; CHECK-ZVBB-NEXT: vsetivli zero, 8, e16, m1, ta, ma
374
- ; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
375
- ; CHECK-ZVBB-NEXT: vwsll.vv v10, v8, v9
373
+ ; CHECK-ZVBB-NEXT: vwsll.vx v10, v8, a0
376
374
; CHECK-ZVBB-NEXT: vmv2r.v v8, v10
377
375
; CHECK-ZVBB-NEXT: ret
378
376
%head = insertelement <8 x i16 > poison, i16 %b , i32 0
@@ -499,6 +497,27 @@ define <16 x i16> @vwsll_vv_v16i16_zext(<16 x i8> %a, <16 x i8> %b) {
499
497
}
500
498
501
499
define <16 x i16 > @vwsll_vx_i64_v16i16 (<16 x i8 > %a , i64 %b ) {
500
+ ; CHECK-ZVBB32-LABEL: vwsll_vx_i64_v16i16:
501
+ ; CHECK-ZVBB32: # %bb.0:
502
+ ; CHECK-ZVBB32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
503
+ ; CHECK-ZVBB32-NEXT: vmv.v.x v16, a0
504
+ ; CHECK-ZVBB32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
505
+ ; CHECK-ZVBB32-NEXT: vrgather.vi v24, v16, 0
506
+ ; CHECK-ZVBB32-NEXT: vsetvli zero, zero, e16, m2, ta, ma
507
+ ; CHECK-ZVBB32-NEXT: vzext.vf2 v10, v8
508
+ ; CHECK-ZVBB32-NEXT: vsetvli zero, zero, e32, m4, ta, ma
509
+ ; CHECK-ZVBB32-NEXT: vnsrl.wi v12, v24, 0
510
+ ; CHECK-ZVBB32-NEXT: vsetvli zero, zero, e16, m2, ta, ma
511
+ ; CHECK-ZVBB32-NEXT: vnsrl.wi v8, v12, 0
512
+ ; CHECK-ZVBB32-NEXT: vsll.vv v8, v10, v8
513
+ ; CHECK-ZVBB32-NEXT: ret
514
+ ;
515
+ ; CHECK-ZVBB64-LABEL: vwsll_vx_i64_v16i16:
516
+ ; CHECK-ZVBB64: # %bb.0:
517
+ ; CHECK-ZVBB64-NEXT: vsetivli zero, 16, e8, m1, ta, ma
518
+ ; CHECK-ZVBB64-NEXT: vwsll.vx v10, v8, a0
519
+ ; CHECK-ZVBB64-NEXT: vmv2r.v v8, v10
520
+ ; CHECK-ZVBB64-NEXT: ret
502
521
%head = insertelement <8 x i64 > poison, i64 %b , i32 0
503
522
%splat = shufflevector <8 x i64 > %head , <8 x i64 > poison, <16 x i32 > zeroinitializer
504
523
%x = zext <16 x i8 > %a to <16 x i16 >
@@ -593,8 +612,7 @@ define <16 x i16> @vwsll_vx_i8_v16i16_zext(<16 x i8> %a, i8 %b) {
593
612
; CHECK-ZVBB-LABEL: vwsll_vx_i8_v16i16_zext:
594
613
; CHECK-ZVBB: # %bb.0:
595
614
; CHECK-ZVBB-NEXT: vsetivli zero, 16, e8, m1, ta, ma
596
- ; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
597
- ; CHECK-ZVBB-NEXT: vwsll.vv v10, v8, v9
615
+ ; CHECK-ZVBB-NEXT: vwsll.vx v10, v8, a0
598
616
; CHECK-ZVBB-NEXT: vmv2r.v v8, v10
599
617
; CHECK-ZVBB-NEXT: ret
600
618
%head = insertelement <16 x i8 > poison, i8 %b , i32 0
@@ -661,10 +679,10 @@ define <4 x i64> @vwsll_vv_v4i64_v4i8_zext(<4 x i8> %a, <4 x i8> %b) {
661
679
;
662
680
; CHECK-ZVBB-LABEL: vwsll_vv_v4i64_v4i8_zext:
663
681
; CHECK-ZVBB: # %bb.0:
664
- ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e64, m2 , ta, ma
665
- ; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
666
- ; CHECK-ZVBB-NEXT: vzext.vf8 v12 , v9
667
- ; CHECK-ZVBB-NEXT: vsll .vv v8, v10, v12
682
+ ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e32, m1 , ta, ma
683
+ ; CHECK-ZVBB-NEXT: vzext.vf4 v10, v8
684
+ ; CHECK-ZVBB-NEXT: vzext.vf4 v11 , v9
685
+ ; CHECK-ZVBB-NEXT: vwsll .vv v8, v10, v11
668
686
; CHECK-ZVBB-NEXT: ret
669
687
%x = zext <4 x i8 > %a to <4 x i64 >
670
688
%y = zext <4 x i8 > %b to <4 x i64 >
@@ -735,11 +753,8 @@ define <4 x i64> @vwsll_vx_i32_v4i64_v4i8_zext(<4 x i8> %a, i32 %b) {
735
753
; CHECK-ZVBB-LABEL: vwsll_vx_i32_v4i64_v4i8_zext:
736
754
; CHECK-ZVBB: # %bb.0:
737
755
; CHECK-ZVBB-NEXT: vsetivli zero, 4, e32, m1, ta, ma
738
- ; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
739
- ; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
740
- ; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
741
- ; CHECK-ZVBB-NEXT: vzext.vf2 v12, v9
742
- ; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
756
+ ; CHECK-ZVBB-NEXT: vzext.vf4 v10, v8
757
+ ; CHECK-ZVBB-NEXT: vwsll.vx v8, v10, a0
743
758
; CHECK-ZVBB-NEXT: ret
744
759
%head = insertelement <4 x i32 > poison, i32 %b , i32 0
745
760
%splat = shufflevector <4 x i32 > %head , <4 x i32 > poison, <4 x i32 > zeroinitializer
@@ -790,12 +805,9 @@ define <4 x i64> @vwsll_vx_i16_v4i64_v4i8_zext(<4 x i8> %a, i16 %b) {
790
805
;
791
806
; CHECK-ZVBB-LABEL: vwsll_vx_i16_v4i64_v4i8_zext:
792
807
; CHECK-ZVBB: # %bb.0:
793
- ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
794
- ; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
795
- ; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
796
- ; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
797
- ; CHECK-ZVBB-NEXT: vzext.vf4 v12, v9
798
- ; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
808
+ ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e32, m1, ta, ma
809
+ ; CHECK-ZVBB-NEXT: vzext.vf4 v10, v8
810
+ ; CHECK-ZVBB-NEXT: vwsll.vx v8, v10, a0
799
811
; CHECK-ZVBB-NEXT: ret
800
812
%head = insertelement <4 x i16 > poison, i16 %b , i32 0
801
813
%splat = shufflevector <4 x i16 > %head , <4 x i16 > poison, <4 x i32 > zeroinitializer
@@ -846,12 +858,9 @@ define <4 x i64> @vwsll_vx_i8_v4i64_v4i8_zext(<4 x i8> %a, i8 %b) {
846
858
;
847
859
; CHECK-ZVBB-LABEL: vwsll_vx_i8_v4i64_v4i8_zext:
848
860
; CHECK-ZVBB: # %bb.0:
849
- ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
850
- ; CHECK-ZVBB-NEXT: vmv.v.x v9, a0
851
- ; CHECK-ZVBB-NEXT: vsetvli zero, zero, e64, m2, ta, ma
852
- ; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
853
- ; CHECK-ZVBB-NEXT: vzext.vf8 v12, v9
854
- ; CHECK-ZVBB-NEXT: vsll.vv v8, v10, v12
861
+ ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e32, m1, ta, ma
862
+ ; CHECK-ZVBB-NEXT: vzext.vf4 v10, v8
863
+ ; CHECK-ZVBB-NEXT: vwsll.vx v8, v10, a0
855
864
; CHECK-ZVBB-NEXT: ret
856
865
%head = insertelement <4 x i8 > poison, i8 %b , i32 0
857
866
%splat = shufflevector <4 x i8 > %head , <4 x i8 > poison, <4 x i32 > zeroinitializer
@@ -869,12 +878,19 @@ define <4 x i64> @vwsll_vi_v4i64_v4i8(<4 x i8> %a) {
869
878
; CHECK-NEXT: vsll.vi v8, v10, 2
870
879
; CHECK-NEXT: ret
871
880
;
872
- ; CHECK-ZVBB-LABEL: vwsll_vi_v4i64_v4i8:
873
- ; CHECK-ZVBB: # %bb.0:
874
- ; CHECK-ZVBB-NEXT: vsetivli zero, 4, e64, m2, ta, ma
875
- ; CHECK-ZVBB-NEXT: vzext.vf8 v10, v8
876
- ; CHECK-ZVBB-NEXT: vsll.vi v8, v10, 2
877
- ; CHECK-ZVBB-NEXT: ret
881
+ ; CHECK-ZVBB32-LABEL: vwsll_vi_v4i64_v4i8:
882
+ ; CHECK-ZVBB32: # %bb.0:
883
+ ; CHECK-ZVBB32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
884
+ ; CHECK-ZVBB32-NEXT: vzext.vf8 v10, v8
885
+ ; CHECK-ZVBB32-NEXT: vsll.vi v8, v10, 2
886
+ ; CHECK-ZVBB32-NEXT: ret
887
+ ;
888
+ ; CHECK-ZVBB64-LABEL: vwsll_vi_v4i64_v4i8:
889
+ ; CHECK-ZVBB64: # %bb.0:
890
+ ; CHECK-ZVBB64-NEXT: vsetivli zero, 4, e32, m1, ta, ma
891
+ ; CHECK-ZVBB64-NEXT: vzext.vf4 v10, v8
892
+ ; CHECK-ZVBB64-NEXT: vwsll.vi v8, v10, 2
893
+ ; CHECK-ZVBB64-NEXT: ret
878
894
%x = zext <4 x i8 > %a to <4 x i64 >
879
895
%z = shl <4 x i64 > %x , splat (i64 2 )
880
896
ret <4 x i64 > %z
0 commit comments