diff --git a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp index 8e952f5184098..b2c5253632027 100644 --- a/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp +++ b/llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp @@ -1271,6 +1271,11 @@ RISCVVLOptimizer::getMinimumVLForUser(MachineOperand &UserOp) { return std::nullopt; } + if (mayReadPastVL(UserMI)) { + LLVM_DEBUG(dbgs() << " Abort because used by unsafe instruction\n"); + return std::nullopt; + } + unsigned VLOpNum = RISCVII::getVLOpNum(Desc); const MachineOperand &VLOp = UserMI.getOperand(VLOpNum); // Looking for an immediate or a register VL that isn't X0. @@ -1333,11 +1338,6 @@ std::optional RISCVVLOptimizer::checkUsers(MachineInstr &MI) { continue; } - if (mayReadPastVL(UserMI)) { - LLVM_DEBUG(dbgs() << " Abort because used by unsafe instruction\n"); - return std::nullopt; - } - auto VLOp = getMinimumVLForUser(UserOp); if (!VLOp) return std::nullopt;