diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h @@ -16,7 +16,6 @@ #include "MCTargetDesc/RISCVMCTargetDesc.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" -#include "llvm/CodeGen/MachineInstr.h" #include "llvm/MC/MCInstrDesc.h" #include "llvm/MC/SubtargetFeature.h" #include "llvm/Support/RISCVISAInfo.h" @@ -433,7 +432,6 @@ } // namespace RISCVVType -bool isFaultFirstLoad(const MachineInstr &MI); } // namespace llvm #endif diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp @@ -182,9 +182,4 @@ OS << ", mu"; } -bool isFaultFirstLoad(const MachineInstr &MI) { - return MI.getNumExplicitDefs() == 2 && MI.modifiesRegister(RISCV::VL) && - !MI.isInlineAsm(); -} - } // namespace llvm diff --git a/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp b/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp --- a/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp +++ b/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp @@ -1412,9 +1412,12 @@ } void RISCVInsertVSETVLI::insertReadVL(MachineBasicBlock &MBB) { + const MachineFunction *MF = MBB.getParent(); + const RISCVInstrInfo *TII = MF->getSubtarget().getInstrInfo(); + for (auto I = MBB.begin(), E = MBB.end(); I != E;) { MachineInstr &MI = *I++; - if (isFaultFirstLoad(MI)) { + if (TII->isFaultFirstLoad(MI)) { Register VLOutput = MI.getOperand(1).getReg(); if (!MRI->use_nodbg_empty(VLOutput)) BuildMI(MBB, I, MI.getDebugLoc(), TII->get(RISCV::PseudoReadVL), diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.h b/llvm/lib/Target/RISCV/RISCVInstrInfo.h --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.h +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.h @@ -185,6 +185,8 @@ Optional> isRVVSpillForZvlsseg(unsigned Opcode) const; + bool isFaultFirstLoad(const MachineInstr &MI) const; + protected: const RISCVSubtarget &STI; }; diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp @@ -1930,3 +1930,8 @@ return std::make_pair(8u, 1u); } } + +bool RISCVInstrInfo::isFaultFirstLoad(const MachineInstr &MI) const { + return MI.getNumExplicitDefs() == 2 && MI.modifiesRegister(RISCV::VL) && + !MI.isInlineAsm(); +} diff --git a/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp b/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp --- a/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp +++ b/llvm/lib/Target/RISCV/RISCVMCInstLower.cpp @@ -145,6 +145,8 @@ const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo(); + const RISCVInstrInfo *TII = MF->getSubtarget().getInstrInfo(); + assert(TRI && "TargetRegisterInfo expected"); uint64_t TSFlags = MI->getDesc().TSFlags; @@ -158,7 +160,7 @@ if (RISCVII::hasSEWOp(TSFlags)) --NumOps; - bool hasVLOutput = isFaultFirstLoad(*MI); + bool hasVLOutput = TII->isFaultFirstLoad(*MI); for (unsigned OpNo = 0; OpNo != NumOps; ++OpNo) { const MachineOperand &MO = MI->getOperand(OpNo); // Skip vl ouput. It should be the second output.