Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
RISCVInstrInfo.cpp File Reference

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
namespace  llvm::RISCVVPseudosTable
namespace  llvm::RISCV

Macros

#define GEN_CHECK_COMPRESS_INSTR
#define GET_INSTRINFO_CTOR_DTOR
#define GET_INSTRINFO_NAMED_OPS
#define DEBUG_TYPE   "riscv-instr-info"
#define GET_RISCVVPseudosTable_IMPL
#define GET_RISCVMaskedPseudosTable_IMPL
#define GET_INSTRINFO_HELPERS
#define OPCODE_LMUL_CASE(OPC)
#define OPCODE_LMUL_MASK_CASE(OPC)
#define RVV_OPC_LMUL_CASE(OPC, INV)
#define RVV_OPC_LMUL_MASK_CASE(OPC, INV)
#define CASE_OPERAND_UIMM(NUM)
#define CASE_OPERAND_SIMM(NUM)
#define CASE_RVV_OPCODE_UNMASK_LMUL(OP, LMUL)
#define CASE_RVV_OPCODE_MASK_LMUL(OP, LMUL)
#define CASE_RVV_OPCODE_LMUL(OP, LMUL)
#define CASE_RVV_OPCODE_UNMASK_WIDEN(OP)
#define CASE_RVV_OPCODE_UNMASK(OP)
#define CASE_RVV_OPCODE_MASK_WIDEN(OP)
#define CASE_RVV_OPCODE_MASK(OP)
#define CASE_RVV_OPCODE_WIDEN(OP)
#define CASE_RVV_OPCODE(OP)
#define CASE_VMA_OPCODE_COMMON(OP, TYPE, LMUL)
#define CASE_VMA_OPCODE_LMULS(OP, TYPE)
#define CASE_VFMA_OPCODE_COMMON(OP, TYPE, LMUL, SEW)
#define CASE_VFMA_OPCODE_LMULS_M1(OP, TYPE, SEW)
#define CASE_VFMA_OPCODE_LMULS_MF2(OP, TYPE, SEW)
#define CASE_VFMA_OPCODE_LMULS_MF4(OP, TYPE, SEW)
#define CASE_VFMA_OPCODE_VV(OP)
#define CASE_VFMA_SPLATS(OP)
#define CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, LMUL)
#define CASE_VMA_CHANGE_OPCODE_LMULS(OLDOP, NEWOP, TYPE)
#define CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, LMUL, SEW)
#define CASE_VFMA_CHANGE_OPCODE_LMULS_M1(OLDOP, NEWOP, TYPE, SEW)
#define CASE_VFMA_CHANGE_OPCODE_LMULS_MF2(OLDOP, NEWOP, TYPE, SEW)
#define CASE_VFMA_CHANGE_OPCODE_LMULS_MF4(OLDOP, NEWOP, TYPE, SEW)
#define CASE_VFMA_CHANGE_OPCODE_VV(OLDOP, NEWOP)
#define CASE_VFMA_CHANGE_OPCODE_SPLATS(OLDOP, NEWOP)
#define CASE_WIDEOP_OPCODE_COMMON(OP, LMUL)
#define CASE_WIDEOP_OPCODE_LMULS(OP)
#define CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, LMUL)
#define CASE_WIDEOP_CHANGE_OPCODE_LMULS(OP)
#define CASE_FP_WIDEOP_OPCODE_COMMON(OP, LMUL, SEW)
#define CASE_FP_WIDEOP_OPCODE_LMULS(OP)
#define CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, LMUL, SEW)
#define CASE_FP_WIDEOP_CHANGE_OPCODE_LMULS(OP)

Enumerations

enum  MachineOutlinerConstructionID { MachineOutlinerTailCall , MachineOutlinerDefault }

Functions

 STATISTIC (NumVRegSpilled, "Number of registers within vector register groups spilled")
 STATISTIC (NumVRegReloaded, "Number of registers within vector register groups reloaded")
static std::optional< unsignedgetLMULForRVVWholeLoadStore (unsigned Opcode)
static bool forwardCopyWillClobberTuple (unsigned DstReg, unsigned SrcReg, unsigned NumRegs)
static bool isConvertibleToVMV_V_V (const RISCVSubtarget &STI, const MachineBasicBlock &MBB, MachineBasicBlock::const_iterator MBBI, MachineBasicBlock::const_iterator &DefMBBI, RISCVVType::VLMUL LMul)
std::optional< unsignedgetFoldedOpcode (MachineFunction &MF, MachineInstr &MI, ArrayRef< unsigned > Ops, const RISCVSubtarget &ST)
static void parseCondBranch (MachineInstr &LastInst, MachineBasicBlock *&Target, SmallVectorImpl< MachineOperand > &Cond)
static bool isLoadImm (const MachineInstr *MI, int64_t &Imm)
unsigned getPredicatedOpcode (unsigned Opcode)
static MachineInstrcanFoldAsPredicatedOp (Register Reg, const MachineRegisterInfo &MRI, const TargetInstrInfo *TII)
 Identify instructions that can be folded into a CCMOV instruction, and return the defining instruction.
static bool isFADD (unsigned Opc)
static bool isFSUB (unsigned Opc)
static bool isFMUL (unsigned Opc)
static bool canCombineFPFusedMultiply (const MachineInstr &Root, const MachineOperand &MO, bool DoRegPressureReduce)
static bool getFPFusedMultiplyPatterns (MachineInstr &Root, SmallVectorImpl< unsigned > &Patterns, bool DoRegPressureReduce)
static bool getFPPatterns (MachineInstr &Root, SmallVectorImpl< unsigned > &Patterns, bool DoRegPressureReduce)
static const MachineInstrcanCombine (const MachineBasicBlock &MBB, const MachineOperand &MO, unsigned CombineOpc)
 Utility routine that checks if.
static bool canCombineShiftIntoShXAdd (const MachineBasicBlock &MBB, const MachineOperand &MO, unsigned OuterShiftAmt)
 Utility routine that checks if.
static unsigned getSHXADDShiftAmount (unsigned Opc)
static unsigned getSHXADDUWShiftAmount (unsigned Opc)
static bool getSHXADDPatterns (const MachineInstr &Root, SmallVectorImpl< unsigned > &Patterns)
static unsigned getFPFusedMultiplyOpcode (unsigned RootOpc, unsigned Pattern)
static unsigned getAddendOperandIdx (unsigned Pattern)
static void combineFPFusedMultiply (MachineInstr &Root, MachineInstr &Prev, unsigned Pattern, SmallVectorImpl< MachineInstr * > &InsInstrs, SmallVectorImpl< MachineInstr * > &DelInstrs)
static void genShXAddAddShift (MachineInstr &Root, unsigned AddOpIdx, SmallVectorImpl< MachineInstr * > &InsInstrs, SmallVectorImpl< MachineInstr * > &DelInstrs, DenseMap< Register, unsigned > &InstrIdxForVirtReg)
static bool memOpsHaveSameBasePtr (const MachineInstr &MI1, ArrayRef< const MachineOperand * > BaseOps1, const MachineInstr &MI2, ArrayRef< const MachineOperand * > BaseOps2)
static bool isCandidatePatchable (const MachineBasicBlock &MBB)
static bool isMIReadsReg (const MachineInstr &MI, const TargetRegisterInfo *TRI, MCRegister RegNo)
static bool isMIModifiesReg (const MachineInstr &MI, const TargetRegisterInfo *TRI, MCRegister RegNo)
static bool cannotInsertTailCall (const MachineBasicBlock &MBB)
static bool analyzeCandidate (outliner::Candidate &C)
static std::optional< int64_t > getEffectiveImm (const MachineOperand &MO)

Variables

static cl::opt< boolPreferWholeRegisterMove ("riscv-prefer-whole-register-move", cl::init(false), cl::Hidden, cl::desc("Prefer whole register move for vector registers."))
static cl::opt< MachineTraceStrategyForceMachineCombinerStrategy ("riscv-force-machine-combiner-strategy", cl::Hidden, cl::desc("Force machine combiner to use a specific strategy for machine " "trace metrics evaluation."), cl::init(MachineTraceStrategy::TS_NumStrategies), cl::values(clEnumValN(MachineTraceStrategy::TS_Local, "local", "Local strategy."), clEnumValN(MachineTraceStrategy::TS_MinInstrCount, "min-instr", "MinInstrCount strategy.")))

Macro Definition Documentation

◆ CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON

#define CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON ( OP,
LMUL,
SEW )
Value:
case RISCV::PseudoV##OP##_##LMUL##_##SEW##_TIED: \
NewOpc = RISCV::PseudoV##OP##_##LMUL##_##SEW; \
break;
#define _
#define OP(OPC)
Definition Instruction.h:46

Definition at line 4378 of file RISCVInstrInfo.cpp.

◆ CASE_FP_WIDEOP_CHANGE_OPCODE_LMULS

#define CASE_FP_WIDEOP_CHANGE_OPCODE_LMULS ( OP)
Value:
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, MF2, E16) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, MF2, E32) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, M1, E16) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, M1, E32) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, M2, E16) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, M2, E32) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, M4, E16) \
CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, M4, E32) \
#define CASE_FP_WIDEOP_CHANGE_OPCODE_COMMON(OP, LMUL, SEW)
unsigned M1(unsigned Val)
Definition VE.h:377

Definition at line 4383 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::convertToThreeAddress().

◆ CASE_FP_WIDEOP_OPCODE_COMMON

#define CASE_FP_WIDEOP_OPCODE_COMMON ( OP,
LMUL,
SEW )
Value:
RISCV::PseudoV##OP##_##LMUL##_##SEW##_TIED

Definition at line 4364 of file RISCVInstrInfo.cpp.

◆ CASE_FP_WIDEOP_OPCODE_LMULS

#define CASE_FP_WIDEOP_OPCODE_LMULS ( OP)
Value:
case CASE_FP_WIDEOP_OPCODE_COMMON(OP, MF2, E16): \
case CASE_FP_WIDEOP_OPCODE_COMMON(OP, MF2, E32): \
case CASE_FP_WIDEOP_OPCODE_COMMON(OP, M2, E16): \
case CASE_FP_WIDEOP_OPCODE_COMMON(OP, M2, E32): \
case CASE_FP_WIDEOP_OPCODE_COMMON(OP, M4, E16): \
#define CASE_FP_WIDEOP_OPCODE_COMMON(OP, LMUL, SEW)

Definition at line 4367 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::convertToThreeAddress().

◆ CASE_OPERAND_SIMM

#define CASE_OPERAND_SIMM ( NUM)
Value:
case RISCVOp::OPERAND_SIMM##NUM: \
Ok = isInt<NUM>(Imm); \
break;
constexpr bool isInt(int64_t x)
Checks if an integer fits into the given bit width.
Definition MathExtras.h:174

Referenced by llvm::RISCVInstrInfo::verifyInstruction().

◆ CASE_OPERAND_UIMM

#define CASE_OPERAND_UIMM ( NUM)
Value:
case RISCVOp::OPERAND_UIMM##NUM: \
Ok = isUInt<NUM>(Imm); \
break;
constexpr bool isUInt(uint64_t x)
Checks if an unsigned integer fits into the given bit width.
Definition MathExtras.h:198

Referenced by llvm::RISCVInstrInfo::verifyInstruction().

◆ CASE_RVV_OPCODE

#define CASE_RVV_OPCODE ( OP)
Value:
#define CASE_RVV_OPCODE_UNMASK(OP)
#define CASE_RVV_OPCODE_MASK(OP)

Definition at line 3701 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::findCommutedOpIndices().

◆ CASE_RVV_OPCODE_LMUL

#define CASE_RVV_OPCODE_LMUL ( OP,
LMUL )
Value:
#define CASE_RVV_OPCODE_UNMASK_LMUL(OP, LMUL)
#define CASE_RVV_OPCODE_MASK_LMUL(OP, LMUL)

Definition at line 3669 of file RISCVInstrInfo.cpp.

◆ CASE_RVV_OPCODE_MASK

#define CASE_RVV_OPCODE_MASK ( OP)
Value:

Definition at line 3693 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::findCommutedOpIndices().

◆ CASE_RVV_OPCODE_MASK_LMUL

#define CASE_RVV_OPCODE_MASK_LMUL ( OP,
LMUL )
Value:
RISCV::Pseudo##OP##_##LMUL##_MASK

Definition at line 3666 of file RISCVInstrInfo.cpp.

◆ CASE_RVV_OPCODE_MASK_WIDEN

#define CASE_RVV_OPCODE_MASK_WIDEN ( OP)

◆ CASE_RVV_OPCODE_UNMASK

#define CASE_RVV_OPCODE_UNMASK ( OP)
Value:

Definition at line 3681 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::findCommutedOpIndices().

◆ CASE_RVV_OPCODE_UNMASK_LMUL

#define CASE_RVV_OPCODE_UNMASK_LMUL ( OP,
LMUL )
Value:
RISCV::Pseudo##OP##_##LMUL

Definition at line 3663 of file RISCVInstrInfo.cpp.

◆ CASE_RVV_OPCODE_UNMASK_WIDEN

#define CASE_RVV_OPCODE_UNMASK_WIDEN ( OP)

◆ CASE_RVV_OPCODE_WIDEN

#define CASE_RVV_OPCODE_WIDEN ( OP)

◆ CASE_VFMA_CHANGE_OPCODE_COMMON

#define CASE_VFMA_CHANGE_OPCODE_COMMON ( OLDOP,
NEWOP,
TYPE,
LMUL,
SEW )
Value:
case RISCV::PseudoV##OLDOP##_##TYPE##_##LMUL##_##SEW: \
Opc = RISCV::PseudoV##NEWOP##_##TYPE##_##LMUL##_##SEW; \
break;

Definition at line 3928 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_CHANGE_OPCODE_LMULS_M1

#define CASE_VFMA_CHANGE_OPCODE_LMULS_M1 ( OLDOP,
NEWOP,
TYPE,
SEW )
Value:
CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M1, SEW) \
CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M2, SEW) \
CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M4, SEW) \
CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M8, SEW)
#define CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, LMUL, SEW)

Definition at line 3933 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_CHANGE_OPCODE_LMULS_MF2

#define CASE_VFMA_CHANGE_OPCODE_LMULS_MF2 ( OLDOP,
NEWOP,
TYPE,
SEW )
Value:
CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, MF2, SEW) \
CASE_VFMA_CHANGE_OPCODE_LMULS_M1(OLDOP, NEWOP, TYPE, SEW)

Definition at line 3939 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_CHANGE_OPCODE_LMULS_MF4

#define CASE_VFMA_CHANGE_OPCODE_LMULS_MF4 ( OLDOP,
NEWOP,
TYPE,
SEW )
Value:
CASE_VFMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, MF4, SEW) \
CASE_VFMA_CHANGE_OPCODE_LMULS_MF2(OLDOP, NEWOP, TYPE, SEW)

Definition at line 3943 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_CHANGE_OPCODE_SPLATS

#define CASE_VFMA_CHANGE_OPCODE_SPLATS ( OLDOP,
NEWOP )
Value:
CASE_VFMA_CHANGE_OPCODE_LMULS_MF4(OLDOP, NEWOP, VFPR16, E16) \
CASE_VFMA_CHANGE_OPCODE_LMULS_MF2(OLDOP, NEWOP, VFPR32, E32) \
CASE_VFMA_CHANGE_OPCODE_LMULS_M1(OLDOP, NEWOP, VFPR64, E64)
#define CASE_VFMA_CHANGE_OPCODE_LMULS_MF4(OLDOP, NEWOP, TYPE, SEW)

Definition at line 3952 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::commuteInstructionImpl().

◆ CASE_VFMA_CHANGE_OPCODE_VV

#define CASE_VFMA_CHANGE_OPCODE_VV ( OLDOP,
NEWOP )
Value:
CASE_VFMA_CHANGE_OPCODE_LMULS_MF4(OLDOP, NEWOP, VV, E16) \
CASE_VFMA_CHANGE_OPCODE_LMULS_MF2(OLDOP, NEWOP, VV, E32) \
CASE_VFMA_CHANGE_OPCODE_LMULS_M1(OLDOP, NEWOP, VV, E64)

Definition at line 3947 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::commuteInstructionImpl().

◆ CASE_VFMA_OPCODE_COMMON

#define CASE_VFMA_OPCODE_COMMON ( OP,
TYPE,
LMUL,
SEW )
Value:
RISCV::PseudoV##OP##_##TYPE##_##LMUL##_##SEW

Definition at line 3720 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_OPCODE_LMULS_M1

#define CASE_VFMA_OPCODE_LMULS_M1 ( OP,
TYPE,
SEW )
Value:
CASE_VFMA_OPCODE_COMMON(OP, TYPE, M1, SEW): \
case CASE_VFMA_OPCODE_COMMON(OP, TYPE, M2, SEW): \
case CASE_VFMA_OPCODE_COMMON(OP, TYPE, M4, SEW): \
case CASE_VFMA_OPCODE_COMMON(OP, TYPE, M8, SEW)
#define CASE_VFMA_OPCODE_COMMON(OP, TYPE, LMUL, SEW)

Definition at line 3723 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_OPCODE_LMULS_MF2

#define CASE_VFMA_OPCODE_LMULS_MF2 ( OP,
TYPE,
SEW )
Value:
CASE_VFMA_OPCODE_COMMON(OP, TYPE, MF2, SEW): \
case CASE_VFMA_OPCODE_LMULS_M1(OP, TYPE, SEW)
#define CASE_VFMA_OPCODE_LMULS_M1(OP, TYPE, SEW)

Definition at line 3729 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_OPCODE_LMULS_MF4

#define CASE_VFMA_OPCODE_LMULS_MF4 ( OP,
TYPE,
SEW )
Value:
CASE_VFMA_OPCODE_COMMON(OP, TYPE, MF4, SEW): \
case CASE_VFMA_OPCODE_LMULS_MF2(OP, TYPE, SEW)
#define CASE_VFMA_OPCODE_LMULS_MF2(OP, TYPE, SEW)

Definition at line 3733 of file RISCVInstrInfo.cpp.

◆ CASE_VFMA_OPCODE_VV

#define CASE_VFMA_OPCODE_VV ( OP)
Value:
case CASE_VFMA_OPCODE_LMULS_MF2(OP, VV, E32): \
#define CASE_VFMA_OPCODE_LMULS_MF4(OP, TYPE, SEW)

Definition at line 3737 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::commuteInstructionImpl(), and llvm::RISCVInstrInfo::findCommutedOpIndices().

◆ CASE_VFMA_SPLATS

#define CASE_VFMA_SPLATS ( OP)

◆ CASE_VMA_CHANGE_OPCODE_COMMON

#define CASE_VMA_CHANGE_OPCODE_COMMON ( OLDOP,
NEWOP,
TYPE,
LMUL )
Value:
case RISCV::PseudoV##OLDOP##_##TYPE##_##LMUL: \
Opc = RISCV::PseudoV##NEWOP##_##TYPE##_##LMUL; \
break;

Definition at line 3913 of file RISCVInstrInfo.cpp.

◆ CASE_VMA_CHANGE_OPCODE_LMULS

#define CASE_VMA_CHANGE_OPCODE_LMULS ( OLDOP,
NEWOP,
TYPE )
Value:
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, MF8) \
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, MF4) \
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, MF2) \
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M1) \
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M2) \
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M4) \
CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, M8)
#define CASE_VMA_CHANGE_OPCODE_COMMON(OLDOP, NEWOP, TYPE, LMUL)

Definition at line 3918 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::commuteInstructionImpl().

◆ CASE_VMA_OPCODE_COMMON

#define CASE_VMA_OPCODE_COMMON ( OP,
TYPE,
LMUL )
Value:
RISCV::PseudoV##OP##_##TYPE##_##LMUL

Definition at line 3707 of file RISCVInstrInfo.cpp.

◆ CASE_VMA_OPCODE_LMULS

#define CASE_VMA_OPCODE_LMULS ( OP,
TYPE )
Value:
CASE_VMA_OPCODE_COMMON(OP, TYPE, MF8): \
case CASE_VMA_OPCODE_COMMON(OP, TYPE, MF4): \
case CASE_VMA_OPCODE_COMMON(OP, TYPE, MF2): \
case CASE_VMA_OPCODE_COMMON(OP, TYPE, M1): \
case CASE_VMA_OPCODE_COMMON(OP, TYPE, M2): \
case CASE_VMA_OPCODE_COMMON(OP, TYPE, M4): \
case CASE_VMA_OPCODE_COMMON(OP, TYPE, M8)
#define CASE_VMA_OPCODE_COMMON(OP, TYPE, LMUL)

Definition at line 3710 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::commuteInstructionImpl(), and llvm::RISCVInstrInfo::findCommutedOpIndices().

◆ CASE_WIDEOP_CHANGE_OPCODE_COMMON

#define CASE_WIDEOP_CHANGE_OPCODE_COMMON ( OP,
LMUL )
Value:
case RISCV::PseudoV##OP##_##LMUL##_TIED: \
NewOpc = RISCV::PseudoV##OP##_##LMUL; \
break;

Definition at line 4350 of file RISCVInstrInfo.cpp.

◆ CASE_WIDEOP_CHANGE_OPCODE_LMULS

#define CASE_WIDEOP_CHANGE_OPCODE_LMULS ( OP)
Value:
CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, MF4) \
CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, MF2) \
CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, M1) \
CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, M2) \
CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, M4)
#define CASE_WIDEOP_CHANGE_OPCODE_COMMON(OP, LMUL)

Definition at line 4355 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::convertToThreeAddress().

◆ CASE_WIDEOP_OPCODE_COMMON

#define CASE_WIDEOP_OPCODE_COMMON ( OP,
LMUL )
Value:
RISCV::PseudoV##OP##_##LMUL##_TIED

Definition at line 4339 of file RISCVInstrInfo.cpp.

◆ CASE_WIDEOP_OPCODE_LMULS

#define CASE_WIDEOP_OPCODE_LMULS ( OP)
Value:

Definition at line 4342 of file RISCVInstrInfo.cpp.

Referenced by llvm::RISCVInstrInfo::convertToThreeAddress().

◆ DEBUG_TYPE

#define DEBUG_TYPE   "riscv-instr-info"

Definition at line 47 of file RISCVInstrInfo.cpp.

◆ GEN_CHECK_COMPRESS_INSTR

#define GEN_CHECK_COMPRESS_INSTR

Definition at line 40 of file RISCVInstrInfo.cpp.

◆ GET_INSTRINFO_CTOR_DTOR

#define GET_INSTRINFO_CTOR_DTOR

Definition at line 43 of file RISCVInstrInfo.cpp.

◆ GET_INSTRINFO_HELPERS

#define GET_INSTRINFO_HELPERS

Definition at line 87 of file RISCVInstrInfo.cpp.

◆ GET_INSTRINFO_NAMED_OPS

#define GET_INSTRINFO_NAMED_OPS

Definition at line 44 of file RISCVInstrInfo.cpp.

◆ GET_RISCVMaskedPseudosTable_IMPL

#define GET_RISCVMaskedPseudosTable_IMPL

Definition at line 78 of file RISCVInstrInfo.cpp.

◆ GET_RISCVVPseudosTable_IMPL

#define GET_RISCVVPseudosTable_IMPL

Definition at line 71 of file RISCVInstrInfo.cpp.

◆ OPCODE_LMUL_CASE

#define OPCODE_LMUL_CASE ( OPC)
Value:
case RISCV::OPC##_M1: \
case RISCV::OPC##_M2: \
case RISCV::OPC##_M4: \
case RISCV::OPC##_M8: \
case RISCV::OPC##_MF2: \
case RISCV::OPC##_MF4: \
case RISCV::OPC##_MF8

◆ OPCODE_LMUL_MASK_CASE

#define OPCODE_LMUL_MASK_CASE ( OPC)
Value:
case RISCV::OPC##_M1_MASK: \
case RISCV::OPC##_M2_MASK: \
case RISCV::OPC##_M4_MASK: \
case RISCV::OPC##_M8_MASK: \
case RISCV::OPC##_MF2_MASK: \
case RISCV::OPC##_MF4_MASK: \
case RISCV::OPC##_MF8_MASK

◆ RVV_OPC_LMUL_CASE

#define RVV_OPC_LMUL_CASE ( OPC,
INV )
Value:
case RISCV::OPC##_M1: \
return RISCV::INV##_M1; \
case RISCV::OPC##_M2: \
return RISCV::INV##_M2; \
case RISCV::OPC##_M4: \
return RISCV::INV##_M4; \
case RISCV::OPC##_M8: \
return RISCV::INV##_M8; \
case RISCV::OPC##_MF2: \
return RISCV::INV##_MF2; \
case RISCV::OPC##_MF4: \
return RISCV::INV##_MF4; \
case RISCV::OPC##_MF8: \
return RISCV::INV##_MF8

Referenced by llvm::RISCVInstrInfo::getInverseOpcode().

◆ RVV_OPC_LMUL_MASK_CASE

#define RVV_OPC_LMUL_MASK_CASE ( OPC,
INV )
Value:
case RISCV::OPC##_M1_MASK: \
return RISCV::INV##_M1_MASK; \
case RISCV::OPC##_M2_MASK: \
return RISCV::INV##_M2_MASK; \
case RISCV::OPC##_M4_MASK: \
return RISCV::INV##_M4_MASK; \
case RISCV::OPC##_M8_MASK: \
return RISCV::INV##_M8_MASK; \
case RISCV::OPC##_MF2_MASK: \
return RISCV::INV##_MF2_MASK; \
case RISCV::OPC##_MF4_MASK: \
return RISCV::INV##_MF4_MASK; \
case RISCV::OPC##_MF8_MASK: \
return RISCV::INV##_MF8_MASK

Referenced by llvm::RISCVInstrInfo::getInverseOpcode().

Enumeration Type Documentation

◆ MachineOutlinerConstructionID

Enumerator
MachineOutlinerTailCall 
MachineOutlinerDefault 

Definition at line 3388 of file RISCVInstrInfo.cpp.

Function Documentation

◆ analyzeCandidate()

◆ canCombine()

const MachineInstr * canCombine ( const MachineBasicBlock & MBB,
const MachineOperand & MO,
unsigned CombineOpc )
static

Utility routine that checks if.

Parameters
MOis defined by an
CombineOpcinstruction in the basic block
MBB

Definition at line 2496 of file RISCVInstrInfo.cpp.

References llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), llvm::Register::isVirtual(), MBB, MI, and MRI.

◆ canCombineFPFusedMultiply()

◆ canCombineShiftIntoShXAdd()

bool canCombineShiftIntoShXAdd ( const MachineBasicBlock & MBB,
const MachineOperand & MO,
unsigned OuterShiftAmt )
static

Utility routine that checks if.

Parameters
MOis defined by a SLLI in
MBBthat can be combined by splitting across 2 SHXADD instructions. The first SHXADD shift amount is given by
OuterShiftAmt.

Definition at line 2517 of file RISCVInstrInfo.cpp.

References canCombine(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOperand(), and MBB.

Referenced by getSHXADDPatterns().

◆ canFoldAsPredicatedOp()

MachineInstr * canFoldAsPredicatedOp ( Register Reg,
const MachineRegisterInfo & MRI,
const TargetInstrInfo * TII )
static

Identify instructions that can be folded into a CCMOV instruction, and return the defining instruction.

Definition at line 1703 of file RISCVInstrInfo.cpp.

References llvm::drop_begin(), getPredicatedOpcode(), MI, MRI, Reg, and TII.

Referenced by llvm::RISCVInstrInfo::optimizeSelect().

◆ cannotInsertTailCall()

◆ combineFPFusedMultiply()

◆ forwardCopyWillClobberTuple()

bool forwardCopyWillClobberTuple ( unsigned DstReg,
unsigned SrcReg,
unsigned NumRegs )
static

Definition at line 250 of file RISCVInstrInfo.cpp.

◆ genShXAddAddShift()

◆ getAddendOperandIdx()

unsigned getAddendOperandIdx ( unsigned Pattern)
static

◆ getEffectiveImm()

◆ getFoldedOpcode()

◆ getFPFusedMultiplyOpcode()

unsigned getFPFusedMultiplyOpcode ( unsigned RootOpc,
unsigned Pattern )
static

Definition at line 2614 of file RISCVInstrInfo.cpp.

References llvm::FMSUB, and llvm_unreachable.

Referenced by combineFPFusedMultiply().

◆ getFPFusedMultiplyPatterns()

◆ getFPPatterns()

bool getFPPatterns ( MachineInstr & Root,
SmallVectorImpl< unsigned > & Patterns,
bool DoRegPressureReduce )
static

◆ getLMULForRVVWholeLoadStore()

std::optional< unsigned > getLMULForRVVWholeLoadStore ( unsigned Opcode)
static

◆ getPredicatedOpcode()

unsigned getPredicatedOpcode ( unsigned Opcode)

◆ getSHXADDPatterns()

◆ getSHXADDShiftAmount()

unsigned getSHXADDShiftAmount ( unsigned Opc)
static

◆ getSHXADDUWShiftAmount()

unsigned getSHXADDUWShiftAmount ( unsigned Opc)
static

Definition at line 2548 of file RISCVInstrInfo.cpp.

References Opc.

Referenced by llvm::RISCVInstrInfo::simplifyInstruction().

◆ isCandidatePatchable()

bool isCandidatePatchable ( const MachineBasicBlock & MBB)
static

Definition at line 3398 of file RISCVInstrInfo.cpp.

References F, llvm::MachineFunction::getFunction(), and MBB.

Referenced by cannotInsertTailCall().

◆ isConvertibleToVMV_V_V()

◆ isFADD()

bool isFADD ( unsigned Opc)
static

◆ isFMUL()

bool isFMUL ( unsigned Opc)
static

◆ isFSUB()

bool isFSUB ( unsigned Opc)
static

Definition at line 2051 of file RISCVInstrInfo.cpp.

References Opc.

Referenced by getFPFusedMultiplyPatterns().

◆ isLoadImm()

bool isLoadImm ( const MachineInstr * MI,
int64_t & Imm )
static

◆ isMIModifiesReg()

bool isMIModifiesReg ( const MachineInstr & MI,
const TargetRegisterInfo * TRI,
MCRegister RegNo )
static

Definition at line 3411 of file RISCVInstrInfo.cpp.

References MI, and TRI.

Referenced by analyzeCandidate(), cannotInsertTailCall(), and llvm::RISCVInstrInfo::getOutliningTypeImpl().

◆ isMIReadsReg()

bool isMIReadsReg ( const MachineInstr & MI,
const TargetRegisterInfo * TRI,
MCRegister RegNo )
static

Definition at line 3405 of file RISCVInstrInfo.cpp.

References MI, and TRI.

Referenced by cannotInsertTailCall().

◆ memOpsHaveSameBasePtr()

◆ parseCondBranch()

◆ STATISTIC() [1/2]

STATISTIC ( NumVRegReloaded ,
"Number of registers within vector register groups reloaded"  )

◆ STATISTIC() [2/2]

STATISTIC ( NumVRegSpilled ,
"Number of registers within vector register groups spilled"  )

Variable Documentation

◆ ForceMachineCombinerStrategy

cl::opt< MachineTraceStrategy > ForceMachineCombinerStrategy("riscv-force-machine-combiner-strategy", cl::Hidden, cl::desc("Force machine combiner to use a specific strategy for machine " "trace metrics evaluation."), cl::init(MachineTraceStrategy::TS_NumStrategies), cl::values(clEnumValN(MachineTraceStrategy::TS_Local, "local", "Local strategy."), clEnumValN(MachineTraceStrategy::TS_MinInstrCount, "min-instr", "MinInstrCount strategy."))) ( "riscv-force-machine-combiner-strategy" ,
cl::Hidden ,
cl::desc("Force machine combiner to use a specific strategy for machine " "trace metrics evaluation.") ,
cl::init(MachineTraceStrategy::TS_NumStrategies) ,
cl::values(clEnumValN(MachineTraceStrategy::TS_Local, "local", "Local strategy."), clEnumValN(MachineTraceStrategy::TS_MinInstrCount, "min-instr", "MinInstrCount strategy."))  )
static

◆ PreferWholeRegisterMove

cl::opt< bool > PreferWholeRegisterMove("riscv-prefer-whole-register-move", cl::init(false), cl::Hidden, cl::desc("Prefer whole register move for vector registers.")) ( "riscv-prefer-whole-register-move" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Prefer whole register move for vector registers.")  )
static

Referenced by isConvertibleToVMV_V_V().