Skip to content

Commit 28db401

Browse files
committed
[RISCV] Add test coverage for bad interaction of exact vlen and rotate shuffles
1 parent 549bee8 commit 28db401

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-shuffle-rotate.ll

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,3 +853,55 @@ define <8 x float> @shuffle_v8f32_as_i64(<8 x float> %v) {
853853
%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>
854854
ret <8 x float> %shuffle
855855
}
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

Comments
 (0)