[llvm] [RISCV] Make single source reverse legal in isShuffleMaskLegal (PR #125949)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 5 20:10:21 PST 2025
================
@@ -1308,26 +1213,23 @@ define <8 x float> @reverse_v8f32_2(<4 x float> %a, <4 x float> %b) {
define <16 x float> @reverse_v16f32_2(<8 x float> %a, <8 x float> %b) {
; CHECK-LABEL: reverse_v16f32_2:
; CHECK: # %bb.0:
-; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
-; CHECK-NEXT: vmv2r.v v12, v10
; CHECK-NEXT: csrr a0, vlenb
-; CHECK-NEXT: vid.v v10
+; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
+; CHECK-NEXT: vid.v v12
; CHECK-NEXT: srli a1, a0, 2
+; CHECK-NEXT: srli a0, a0, 1
; CHECK-NEXT: addi a1, a1, -1
-; CHECK-NEXT: vrsub.vx v14, v10, a1
-; CHECK-NEXT: vrgather.vv v11, v8, v14
-; CHECK-NEXT: vrgather.vv v10, v9, v14
-; CHECK-NEXT: vrgather.vv v8, v9, v14
-; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT: vid.v v14
-; CHECK-NEXT: li a1, 255
-; CHECK-NEXT: addi a0, a0, -16
-; CHECK-NEXT: vrsub.vi v16, v14, 7
-; CHECK-NEXT: vmv.s.x v0, a1
-; CHECK-NEXT: vmv1r.v v9, v8
-; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu
-; CHECK-NEXT: vslidedown.vx v8, v8, a0
-; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t
+; CHECK-NEXT: addi a0, a0, -8
+; CHECK-NEXT: vrsub.vx v12, v12, a1
+; CHECK-NEXT: vrgather.vv v15, v8, v12
+; CHECK-NEXT: vrgather.vv v17, v10, v12
+; CHECK-NEXT: vrgather.vv v14, v9, v12
+; CHECK-NEXT: vrgather.vv v16, v11, v12
+; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-NEXT: vslidedown.vx v12, v14, a0
+; CHECK-NEXT: vslidedown.vx v8, v16, a0
+; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
+; CHECK-NEXT: vslideup.vi v8, v12, 8
----------------
lukel97 wrote:
This is the bit I was mentioning could be done as a single slidedown. Maybe we need some sort of `concat(reverse, reverse) -> reverse` combine.
https://github.com/llvm/llvm-project/pull/125949
More information about the llvm-commits
mailing list