@@ -853,3 +853,55 @@ define <8 x float> @shuffle_v8f32_as_i64(<8 x float> %v) {
853
853
%shuffle = shufflevector <8 x float > %v , <8 x float > poison, <8 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 , i32 5 , i32 4 , i32 7 , i32 6 >
854
854
ret <8 x float > %shuffle
855
855
}
856
+
857
+ define <8 x float > @shuffle_v8f32_as_i64_exact (<8 x float > %v ) vscale_range(2 ,2 ) {
858
+ ; RV32-LABEL: shuffle_v8f32_as_i64_exact:
859
+ ; RV32: # %bb.0:
860
+ ; RV32-NEXT: li a0, 32
861
+ ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
862
+ ; RV32-NEXT: vmv.v.x v10, a0
863
+ ; RV32-NEXT: vrsub.vi v11, v10, 0
864
+ ; RV32-NEXT: li a0, 63
865
+ ; RV32-NEXT: vand.vx v11, v11, a0
866
+ ; RV32-NEXT: vsrl.vv v12, v8, v11
867
+ ; RV32-NEXT: vand.vx v10, v10, a0
868
+ ; RV32-NEXT: vsll.vv v8, v8, v10
869
+ ; RV32-NEXT: vor.vv v8, v8, v12
870
+ ; RV32-NEXT: vsrl.vv v11, v9, v11
871
+ ; RV32-NEXT: vsll.vv v9, v9, v10
872
+ ; RV32-NEXT: vor.vv v9, v9, v11
873
+ ; RV32-NEXT: ret
874
+ ;
875
+ ; RV64-LABEL: shuffle_v8f32_as_i64_exact:
876
+ ; RV64: # %bb.0:
877
+ ; RV64-NEXT: li a0, 32
878
+ ; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma
879
+ ; RV64-NEXT: vsrl.vx v10, v8, a0
880
+ ; RV64-NEXT: vsll.vx v8, v8, a0
881
+ ; RV64-NEXT: vor.vv v8, v8, v10
882
+ ; RV64-NEXT: vsrl.vx v10, v9, a0
883
+ ; RV64-NEXT: vsll.vx v9, v9, a0
884
+ ; RV64-NEXT: vor.vv v9, v9, v10
885
+ ; RV64-NEXT: ret
886
+ ;
887
+ ; ZVKB-V-LABEL: shuffle_v8f32_as_i64_exact:
888
+ ; ZVKB-V: # %bb.0:
889
+ ; ZVKB-V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
890
+ ; ZVKB-V-NEXT: vror.vi v8, v8, 32
891
+ ; ZVKB-V-NEXT: vror.vi v9, v9, 32
892
+ ; ZVKB-V-NEXT: ret
893
+ ;
894
+ ; ZVKB-ZVE32X-LABEL: shuffle_v8f32_as_i64_exact:
895
+ ; ZVKB-ZVE32X: # %bb.0:
896
+ ; ZVKB-ZVE32X-NEXT: lui a0, 8240
897
+ ; ZVKB-ZVE32X-NEXT: addi a0, a0, 1
898
+ ; ZVKB-ZVE32X-NEXT: vsetivli zero, 4, e32, m1, ta, ma
899
+ ; ZVKB-ZVE32X-NEXT: vmv.s.x v10, a0
900
+ ; ZVKB-ZVE32X-NEXT: vsext.vf4 v12, v10
901
+ ; ZVKB-ZVE32X-NEXT: vrgather.vv v11, v9, v12
902
+ ; ZVKB-ZVE32X-NEXT: vrgather.vv v10, v8, v12
903
+ ; ZVKB-ZVE32X-NEXT: vmv2r.v v8, v10
904
+ ; ZVKB-ZVE32X-NEXT: ret
905
+ %shuffle = shufflevector <8 x float > %v , <8 x float > poison, <8 x i32 > <i32 1 , i32 0 , i32 3 , i32 2 , i32 5 , i32 4 , i32 7 , i32 6 >
906
+ ret <8 x float > %shuffle
907
+ }
0 commit comments