[llvm] ab1570e - RISCV: Pass instruction and operand index to isVectorOpUsedAsScalarOp (#219448)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 28 05:45:25 PDT 2026
Author: Matt Arsenault
Date: 2026-08-28T12:45:19Z
New Revision: ab1570e98451b4908925d24d46f9e72fdd5c896d
URL: https://github.com/llvm/llvm-project/commit/ab1570e98451b4908925d24d46f9e72fdd5c896d
DIFF: https://github.com/llvm/llvm-project/commit/ab1570e98451b4908925d24d46f9e72fdd5c896d.diff
LOG: RISCV: Pass instruction and operand index to isVectorOpUsedAsScalarOp (#219448)
Added:
Modified:
llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
index 7f39253a63068..d6ae6d4e2304b 100644
--- a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
+++ b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp
@@ -938,11 +938,11 @@ bool RISCVVLOptimizerImpl::isSupportedInstr(const MachineInstr &MI) const {
return true;
}
-/// Return true if MO is a vector operand but is used as a scalar operand.
-static bool isVectorOpUsedAsScalarOp(const MachineOperand &MO) {
- const MachineInstr *MI = MO.getParent();
+/// Return true if operand \p OpIdx of \p MI is a vector operand but is used as
+/// a scalar operand.
+static bool isVectorOpUsedAsScalarOp(const MachineInstr &MI, unsigned OpIdx) {
const RISCVVPseudosTable::PseudoInfo *RVV =
- RISCVVPseudosTable::getPseudoInfo(MI->getOpcode());
+ RISCVVPseudosTable::getPseudoInfo(MI.getOpcode());
if (!RVV)
return false;
@@ -965,10 +965,10 @@ static bool isVectorOpUsedAsScalarOp(const MachineOperand &MO) {
case RISCV::VFREDUSUM_VS:
case RISCV::VFWREDOSUM_VS:
case RISCV::VFWREDUSUM_VS:
- return MO.getOperandNo() == 3;
+ return OpIdx == 3;
case RISCV::VMV_X_S:
case RISCV::VFMV_F_S:
- return MO.getOperandNo() == 1;
+ return OpIdx == 1;
default:
return false;
}
@@ -1098,7 +1098,7 @@ RISCVVLOptimizerImpl::getMinimumVLForUser(const MachineOperand &UserOp) const {
// Instructions like reductions may use a vector register as a scalar
// register. In this case, we should treat it as only reading the first lane.
- if (isVectorOpUsedAsScalarOp(UserOp)) {
+ if (isVectorOpUsedAsScalarOp(UserMI, UserMI.getOperandNo(&UserOp))) {
LLVM_DEBUG(dbgs() << " Used this operand as a scalar operand\n");
return MachineOperand::CreateImm(1);
}
More information about the llvm-commits
mailing list