[llvm] [RISCV] Vectorize phi for loop carried @llvm.vector.reduce.fadd (PR #78244)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 16 01:44:22 PST 2024


================
@@ -44,21 +44,21 @@ define float @reduce_fadd(ptr nocapture noundef readonly %f, i32 noundef signext
 ; CHECK-NEXT:    mv a2, a0
 ; CHECK-NEXT:    mv a0, s2
 ; CHECK-NEXT:    and a2, a2, s3
+; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vmv.s.x v8, zero
 ; CHECK-NEXT:    slli a3, s1, 1
-; CHECK-NEXT:    fmv.w.x fa0, zero
-; CHECK-NEXT:    vsetvli a4, zero, e32, m2, ta, ma
 ; CHECK-NEXT:    mv a4, s2
 ; CHECK-NEXT:    mv a5, a2
 ; CHECK-NEXT:  .LBB0_5: # %vector.body
 ; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT:    vl2re32.v v8, (a4)
-; CHECK-NEXT:    vfmv.s.f v10, fa0
-; CHECK-NEXT:    vfredosum.vs v8, v8, v10
-; CHECK-NEXT:    vfmv.f.s fa0, v8
+; CHECK-NEXT:    vl2re32.v v10, (a4)
+; CHECK-NEXT:    vsetvli a6, zero, e32, m2, ta, ma
----------------
lukel97 wrote:

This looks like a gap in RISCVInsertVSETVLI. Previously we were doing PRE, but now that the `vmv.s.x` was moved to the loop preheader it no longer kicks in. The M2 vsetvli could subsume the vsetvl in the preheader entirely.

This happens with and without 286a366d057112a112507b9e34c68d35b3b820f7

https://github.com/llvm/llvm-project/pull/78244


More information about the llvm-commits mailing list