[PATCH] D157417: [RISCV][SelectionDAG] Lower shuffles as bitrotates with vror.vi when possible
Luke Lau via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 17 03:53:21 PDT 2023
luke added a comment.
Herald added a subscriber: sunshaoce.
In D157417#4593411 <https://reviews.llvm.org/D157417#4593411>, @reames wrote:
> Broader point is that maybe we should be doing this even without zbb.
For reference, this is the new sequence we would be generating without zvbb:
define <8 x i16> @shuffle_v8i16_as_i32(<8 x i16> %v) {
; CHECK-LABEL: shuffle_v8i16_as_i32:
; CHECK: # %bb.0:
-; CHECK-NEXT: lui a0, %hi(.LCPI18_0)
-; CHECK-NEXT: addi a0, a0, %lo(.LCPI18_0)
-; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT: vle16.v v10, (a0)
-; CHECK-NEXT: vrgather.vv v9, v8, v10
-; CHECK-NEXT: vmv.v.v v8, v9
+; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-NEXT: vmv.v.i v9, 0
+; CHECK-NEXT: li a0, 16
+; CHECK-NEXT: vwsubu.vx v10, v9, a0
+; CHECK-NEXT: li a1, 31
+; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma
+; CHECK-NEXT: vand.vx v9, v10, a1
+; CHECK-NEXT: vsrl.vv v9, v8, v9
+; CHECK-NEXT: vmv.v.x v10, a0
+; CHECK-NEXT: vand.vx v10, v10, a1
+; CHECK-NEXT: vsll.vv v8, v8, v10
+; CHECK-NEXT: vor.vv v8, v8, v9
; CHECK-NEXT: ret
;
; ZVBB_V-LABEL: shuffle_v8i16_as_i32:
; ZVBB_V: # %bb.0:
; ZVBB_V-NEXT: vsetivli zero, 4, e32, m1, ta, ma
; ZVBB_V-NEXT: vror.vi v8, v8, 16
; ZVBB_V-NEXT: ret
;
; ZVBB_ZVE32X-LABEL: shuffle_v8i16_as_i32:
; ZVBB_ZVE32X: # %bb.0:
; ZVBB_ZVE32X-NEXT: vsetivli zero, 4, e32, m4, ta, ma
; ZVBB_ZVE32X-NEXT: vror.vi v8, v8, 16
; ZVBB_ZVE32X-NEXT: ret
%shuffle = shufflevector <8 x i16> %v, <8 x i16> poison, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
ret <8 x i16> %shuffle
}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157417/new/
https://reviews.llvm.org/D157417
More information about the llvm-commits
mailing list