[llvm] [RISCV] Adjust LMUL if not used to avoid VL toggle (PR #69259)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 20 14:30:48 PDT 2023
================
@@ -1463,6 +1463,57 @@ static bool canMutatePriorConfig(const MachineInstr &PrevMI,
return areCompatibleVTYPEs(PriorVType, VType, Used);
}
+// If LMUL or the SEW/LMUL ratio aren't demanded and MI and NextMI have the same
+// AVL, then we can try and change MI's LMUL so that we can avoid setting VL in
+// NextMI, e.g:
+//
+// vsetivli zero, 4, e32, m1, ta, ma
+// vsetivli zero, 4, e16, mf4, ta, ma
+//
+// vsetivli zero, 4, e32, mf2, ta, ma
+// vsetvli zero, zero, e16, mf4, ta, ma
+//
+// If possible, returns the new VTYPE that should be used for MI.
+static std::optional<unsigned>
+canAdjustSEWLMULRatio(const MachineInstr &MI, const MachineInstr &NextMI,
+ const DemandedFields &Used) {
+ if (Used.LMUL || Used.SEWLMULRatio)
+ return std::nullopt;
+ if (!NextMI.getOperand(0).isDead())
+ return std::nullopt;
+ // If we end up increasing the SEW/LMUL ratio, then we will decrease VLMAX,
+ // which means we might end up changing VL in the case that AVL > VLMAX. So
+ // bail if the exact VL value is needed.
+ //
+ // TODO: We could potentially relax this when we know we're increasing VLMAX.
+ if (Used.VLAny)
+ return std::nullopt;
+
+ // If NextMI is already zero, zero then bail. If MI is zero, zero then we
+ // won't be able to tell if it has the same AVL as NextMI, so also bail.
+ if (isVLPreservingConfig(MI) || isVLPreservingConfig(NextMI))
+ return std::nullopt;
+
+ VSETVLIInfo NextMIInfo = getInfoForVSETVLI(NextMI);
----------------
lukel97 wrote:
Yeah, in my local branch I've rewritten this to just operate on the MI, it's not too bad we don't need getInfoForVSETVLI here.
https://github.com/llvm/llvm-project/pull/69259
More information about the llvm-commits
mailing list