[llvm] [RISCV] Minimally modify incoming state in transferBefore (PR #72352)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 19 21:25:17 PST 2023
================
@@ -1013,73 +1015,76 @@ bool RISCVInsertVSETVLI::needVSETVLI(const MachineInstr &MI,
return true;
}
-// Given an incoming state reaching MI, modifies that state so that it is minimally
-// compatible with MI. The resulting state is guaranteed to be semantically legal
-// for MI, but may not be the state requested by MI.
+// Given an incoming state reaching MI, minimally modifies that state so that it
+// is compatible with MI. The resulting state is guaranteed to be semantically
+// legal for MI, but may not be the state requested by MI.
void RISCVInsertVSETVLI::transferBefore(VSETVLIInfo &Info,
const MachineInstr &MI) const {
uint64_t TSFlags = MI.getDesc().TSFlags;
if (!RISCVII::hasSEWOp(TSFlags))
return;
- const VSETVLIInfo NewInfo = computeInfoForInstr(MI, TSFlags, MRI);
+ VSETVLIInfo NewInfo = computeInfoForInstr(MI, TSFlags, MRI);
if (Info.isValid() && !needVSETVLI(MI, NewInfo, Info))
return;
- const VSETVLIInfo PrevInfo = Info;
- Info = NewInfo;
+ if (Info.hasSEWLMULRatioOnly() || !Info.isValid() || Info.isUnknown())
+ Info = NewInfo;
- if (!RISCVII::hasVLOp(TSFlags))
- return;
+ DemandedFields Demanded = getDemanded(MI, MRI, ST);
// If we don't use LMUL or the SEW/LMUL ratio, then adjust LMUL so that we
// maintain the SEW/LMUL ratio. This allows us to eliminate VL toggles in more
// places.
- DemandedFields Demanded = getDemanded(MI, MRI, ST);
if (!Demanded.LMUL && !Demanded.SEWLMULRatio && Info.isValid() &&
- PrevInfo.isValid() && !Info.isUnknown() && !PrevInfo.isUnknown()) {
- if (auto NewVLMul = RISCVVType::getSameRatioLMUL(
- PrevInfo.getSEW(), PrevInfo.getVLMUL(), Info.getSEW()))
- Info.setVLMul(*NewVLMul);
- }
-
- // For vmv.s.x and vfmv.s.f, there are only two behaviors, VL = 0 and
- // VL > 0. We can discard the user requested AVL and just use the last
- // one if we can prove it equally zero. This removes a vsetvli entirely
- // if the types match or allows use of cheaper avl preserving variant
- // if VLMAX doesn't change. If VLMAX might change, we couldn't use
- // the 'vsetvli x0, x0, vtype" variant, so we avoid the transform to
- // prevent extending live range of an avl register operand.
- // TODO: We can probably relax this for immediates.
- if (isScalarInsertInstr(MI) && PrevInfo.isValid() &&
----------------
lukel97 wrote:
Done in 69f64dedb09bf39bd3ad66bcbc2c947b23342a11
https://github.com/llvm/llvm-project/pull/72352
More information about the llvm-commits
mailing list