[PATCH] D125812: [RISCV] Canonicalize AVL=setvli to AVL=Imm or AVL=VLMAX
Philip Reames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 17 11:46:37 PDT 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG11a7e77c95dd: [RISCV] Canonicalize AVL=setvli to AVL=Imm or AVL=VLMAX (authored by reames).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D125812/new/
https://reviews.llvm.org/D125812
Files:
llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll
Index: llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll
===================================================================
--- llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll
+++ llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.ll
@@ -591,21 +591,20 @@
; CHECK-NEXT: blez a0, .LBB11_3
; CHECK-NEXT: # %bb.1: # %for.body.preheader
; CHECK-NEXT: li a5, 0
-; CHECK-NEXT: li t1, 0
+; CHECK-NEXT: li t0, 0
; CHECK-NEXT: slli a7, a6, 3
; CHECK-NEXT: .LBB11_2: # %for.body
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT: add t0, a2, a5
-; CHECK-NEXT: vsetvli zero, a6, e64, m1, ta, mu
-; CHECK-NEXT: vle64.v v8, (t0)
+; CHECK-NEXT: add a4, a2, a5
+; CHECK-NEXT: vle64.v v8, (a4)
; CHECK-NEXT: add a4, a3, a5
; CHECK-NEXT: vle64.v v9, (a4)
; CHECK-NEXT: vfadd.vv v8, v8, v9
; CHECK-NEXT: add a4, a1, a5
; CHECK-NEXT: vse64.v v8, (a4)
-; CHECK-NEXT: add t1, t1, a6
+; CHECK-NEXT: add t0, t0, a6
; CHECK-NEXT: add a5, a5, a7
-; CHECK-NEXT: blt t1, a0, .LBB11_2
+; CHECK-NEXT: blt t0, a0, .LBB11_2
; CHECK-NEXT: .LBB11_3: # %for.end
; CHECK-NEXT: ret
entry:
@@ -645,7 +644,6 @@
; CHECK-NEXT: vmv.v.i v8, 0
; CHECK-NEXT: .LBB12_2: # %for.body
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT: vsetvli zero, a2, e64, m1, ta, mu
; CHECK-NEXT: vse64.v v8, (a1)
; CHECK-NEXT: add a3, a3, a2
; CHECK-NEXT: add a1, a1, a4
@@ -719,7 +717,7 @@
; CHECK-NEXT: vmv.v.i v8, 0
; CHECK-NEXT: .LBB14_1: # %for.body
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
-; CHECK-NEXT: vsetvli zero, a3, e64, m1, ta, mu
+; CHECK-NEXT: vsetivli zero, 4, e64, m1, ta, mu
; CHECK-NEXT: vse64.v v8, (a1)
; CHECK-NEXT: add a2, a2, a3
; CHECK-NEXT: add a1, a1, a4
Index: llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
===================================================================
--- llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
+++ llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
@@ -1242,6 +1242,29 @@
}
}
}
+
+ // If AVL is defined by a vsetvli with the same vtype, we can
+ // replace the AVL operand with the AVL of the defining vsetvli.
+ // We avoid general register AVLs to avoid extending live ranges
+ // without being sure we can kill the original source reg entirely.
+ // TODO: We can ignore policy bits here, we only need VL to be the same.
+ if (Require.hasAVLReg() && Require.getAVLReg().isVirtual()) {
+ if (MachineInstr *DefMI = MRI->getVRegDef(Require.getAVLReg())) {
+ if (isVectorConfigInstr(*DefMI)) {
+ VSETVLIInfo DefInfo = getInfoForVSETVLI(*DefMI);
+ if (DefInfo.hasSameVTYPE(Require) &&
+ (DefInfo.hasAVLImm() || DefInfo.getAVLReg() == RISCV::X0)) {
+ MachineOperand &VLOp = MI.getOperand(getVLOpNum(MI));
+ if (DefInfo.hasAVLImm())
+ VLOp.ChangeToImmediate(DefInfo.getAVLImm());
+ else
+ VLOp.ChangeToRegister(DefInfo.getAVLReg(), /*IsDef*/ false);
+ CurInfo = computeInfoForInstr(MI, TSFlags, MRI);
+ continue;
+ }
+ }
+ }
+ }
}
CurInfo = computeInfoForInstr(MI, TSFlags, MRI);
continue;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125812.430142.patch
Type: text/x-patch
Size: 3370 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220517/033589d8/attachment.bin>
More information about the llvm-commits
mailing list