[llvm] [RISCV] Support postRA vsetvl insertion pass (PR #70549)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 11 00:35:48 PST 2024
================
@@ -1519,6 +1677,24 @@ void RISCVInsertVSETVLI::doLocalPostpass(MachineBasicBlock &MBB) {
Used.demandVL();
if (NextMI) {
+
+ // A tail undefined vmv.v.i/x or vfmv.v.f with VL=1 can be treated in the
+ // same semantically as vmv.s.x.
+ if (MIInBetween.size() == 1 && isScalarSplatInstr(*MIInBetween[0]) &&
+ MI.getOperand(1).isImm() && MI.getOperand(1).getImm() == 1 &&
+ isLMUL1OrSmaller(RISCVVType::getVLMUL(MI.getOperand(2).getImm())) &&
+ hasUndefinedMergeOp(*MIInBetween[0], *MRI, LIS)) {
+ Used.LMUL = false;
+ Used.SEWLMULRatio = false;
+ Used.VLAny = false;
+ if (isFloatScalarMoveOrScalarSplatInstr(*MIInBetween[0]) &&
+ !ST->hasVInstructionsF64())
+ Used.SEW = DemandedFields::SEWGreaterThanOrEqualAndLessThan64;
+ else
+ Used.SEW = DemandedFields::SEWGreaterThanOrEqual;
+ Used.TailPolicy = false;
+ }
----------------
lukel97 wrote:
Is it possible to split this out into a separate patch? It looks like it would affect preRA vsetvl insertion, can we create a test case for it?
https://github.com/llvm/llvm-project/pull/70549
More information about the llvm-commits
mailing list