LLVM 20.0.0git
|
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
Public Member Functions | |
virtual | ~LegalizerInfo ()=default |
const LegacyLegalizerInfo & | getLegacyLegalizerInfo () const |
LegacyLegalizerInfo & | getLegacyLegalizerInfo () |
unsigned | getOpcodeIdxForOpcode (unsigned Opcode) const |
unsigned | getActionDefinitionsIdx (unsigned Opcode) const |
void | verify (const MCInstrInfo &MII) const |
Perform simple self-diagnostic and assert if there is anything obviously wrong with the actions set up. | |
const LegalizeRuleSet & | getActionDefinitions (unsigned Opcode) const |
Get the action definitions for the given opcode. | |
LegalizeRuleSet & | getActionDefinitionsBuilder (unsigned Opcode) |
Get the action definition builder for the given opcode. | |
LegalizeRuleSet & | getActionDefinitionsBuilder (std::initializer_list< unsigned > Opcodes) |
Get the action definition builder for the given set of opcodes. | |
void | aliasActionDefinitions (unsigned OpcodeTo, unsigned OpcodeFrom) |
LegalizeActionStep | getAction (const LegalityQuery &Query) const |
Determine what action should be taken to legalize the described instruction. | |
LegalizeActionStep | getAction (const MachineInstr &MI, const MachineRegisterInfo &MRI) const |
Determine what action should be taken to legalize the given generic instruction. | |
bool | isLegal (const LegalityQuery &Query) const |
bool | isLegalOrCustom (const LegalityQuery &Query) const |
bool | isLegal (const MachineInstr &MI, const MachineRegisterInfo &MRI) const |
bool | isLegalOrCustom (const MachineInstr &MI, const MachineRegisterInfo &MRI) const |
virtual bool | legalizeCustom (LegalizerHelper &Helper, MachineInstr &MI, LostDebugLocObserver &LocObserver) const |
Called for instructions with the Custom LegalizationAction. | |
virtual bool | legalizeIntrinsic (LegalizerHelper &Helper, MachineInstr &MI) const |
virtual unsigned | getExtOpcodeForWideningConstant (LLT SmallTy) const |
Return the opcode (SEXT/ZEXT/ANYEXT) that should be performed while widening a constant of type SmallTy which targets can override. | |
Definition at line 1311 of file LegalizerInfo.h.
|
virtualdefault |
Definition at line 314 of file LegalizerInfo.cpp.
References llvm::LegalizeRuleSet::aliasTo(), assert(), and getOpcodeIdxForOpcode().
Referenced by getActionDefinitionsBuilder().
LegalizeActionStep LegalizerInfo::getAction | ( | const LegalityQuery & | Query | ) | const |
Determine what action should be taken to legalize the described instruction.
Requires computeTables to have been called.
Definition at line 323 of file LegalizerInfo.cpp.
References llvm::LegalizeActionStep::Action, llvm::LegalizeRuleSet::apply(), llvm::LegacyLegalizerInfo::getAction(), getActionDefinitions(), getLegacyLegalizerInfo(), and llvm::LegalityQuery::Opcode.
Referenced by getAction(), llvm::CombinerHelper::isLegal(), isLegal(), isLegalOrCustom(), llvm::LegalizerHelper::legalizeInstrStep(), llvm::LegalizerHelper::lowerBitCount(), llvm::LegalizerHelper::lowerFunnelShift(), llvm::CombinerHelper::matchCombineExtendingLoads(), and llvm::LegalizationArtifactCombiner::tryFoldUnmergeCast().
LegalizeActionStep LegalizerInfo::getAction | ( | const MachineInstr & | MI, |
const MachineRegisterInfo & | MRI | ||
) | const |
Determine what action should be taken to legalize the given generic instruction.
Definition at line 333 of file LegalizerInfo.cpp.
References getAction(), getTypeFromTypeIdx(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallBitVector::set().
const LegalizeRuleSet & LegalizerInfo::getActionDefinitions | ( | unsigned | Opcode | ) | const |
Get the action definitions for the given opcode.
Use this to run a LegalityQuery through the definitions.
Definition at line 287 of file LegalizerInfo.cpp.
References getActionDefinitionsIdx().
Referenced by getAction(), and verify().
LegalizeRuleSet & LegalizerInfo::getActionDefinitionsBuilder | ( | std::initializer_list< unsigned > | Opcodes | ) |
Get the action definition builder for the given set of opcodes.
Use this to define the action definitions for multiple opcodes at once. The first opcode given will be considered the representative opcode and will hold the definitions whereas the other opcodes will be configured to refer to the representative opcode. This lowers memory requirements and very slightly improves performance.
It would be very easy to introduce unexpected side-effects as a result of this aliasing if it were permitted to request different but intersecting sets of opcodes but that is difficult to keep track of. It is therefore an error to request the same opcode twice using this API, to request an opcode that already has definitions, or to use the single-opcode API on an opcode that has already been requested by this API.
Definition at line 299 of file LegalizerInfo.cpp.
References aliasActionDefinitions(), assert(), llvm::drop_begin(), and getActionDefinitionsBuilder().
LegalizeRuleSet & LegalizerInfo::getActionDefinitionsBuilder | ( | unsigned | Opcode | ) |
Get the action definition builder for the given opcode.
Use this to define the action definitions.
It is an error to request an opcode that has already been requested by the multiple-opcode variant.
Definition at line 292 of file LegalizerInfo.cpp.
References assert(), and getActionDefinitionsIdx().
Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), llvm::ARMLegalizerInfo::ARMLegalizerInfo(), getActionDefinitionsBuilder(), llvm::M68kLegalizerInfo::M68kLegalizerInfo(), llvm::MipsLegalizerInfo::MipsLegalizerInfo(), llvm::PPCLegalizerInfo::PPCLegalizerInfo(), llvm::RISCVLegalizerInfo::RISCVLegalizerInfo(), llvm::SPIRVLegalizerInfo::SPIRVLegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().
Definition at line 274 of file LegalizerInfo.cpp.
References assert(), llvm::dbgs(), getOpcodeIdxForOpcode(), and LLVM_DEBUG.
Referenced by getActionDefinitions(), and getActionDefinitionsBuilder().
Return the opcode (SEXT/ZEXT/ANYEXT) that should be performed while widening a constant of type SmallTy which targets can override.
For eg, the DAG does (SmallTy.isByteSized() ? G_SEXT : G_ZEXT) which will be the default.
Definition at line 375 of file LegalizerInfo.cpp.
References llvm::LLT::isByteSized().
Referenced by llvm::LegalizerHelper::widenScalar().
|
inline |
Definition at line 1318 of file LegalizerInfo.h.
|
inline |
Definition at line 1315 of file LegalizerInfo.h.
Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), llvm::ARMLegalizerInfo::ARMLegalizerInfo(), llvm::BPFLegalizerInfo::BPFLegalizerInfo(), getAction(), llvm::M68kLegalizerInfo::M68kLegalizerInfo(), llvm::MipsLegalizerInfo::MipsLegalizerInfo(), llvm::PPCLegalizerInfo::PPCLegalizerInfo(), llvm::SPIRVLegalizerInfo::SPIRVLegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().
Definition at line 269 of file LegalizerInfo.cpp.
References assert().
Referenced by aliasActionDefinitions(), and getActionDefinitionsIdx().
|
inline |
Definition at line 1368 of file LegalizerInfo.h.
References llvm::LegalizeActionStep::Action, and getAction().
Referenced by llvm::LegalizerHelper::bitcastConcatVector().
bool LegalizerInfo::isLegal | ( | const MachineInstr & | MI, |
const MachineRegisterInfo & | MRI | ||
) | const |
Definition at line 362 of file LegalizerInfo.cpp.
References llvm::LegalizeActionStep::Action, getAction(), llvm::IRSimilarity::Legal, MI, and MRI.
|
inline |
Definition at line 1372 of file LegalizerInfo.h.
References llvm::LegalizeActionStep::Action, and getAction().
Referenced by llvm::LegalizerHelper::lower(), llvm::LegalizerHelper::lowerRotate(), llvm::CombinerHelper::matchBitfieldExtractFromAnd(), llvm::CombinerHelper::matchBitfieldExtractFromSExtInReg(), llvm::CombinerHelper::matchBitfieldExtractFromShr(), and llvm::CombinerHelper::matchBitfieldExtractFromShrAnd().
bool LegalizerInfo::isLegalOrCustom | ( | const MachineInstr & | MI, |
const MachineRegisterInfo & | MRI | ||
) | const |
Definition at line 367 of file LegalizerInfo.cpp.
References llvm::LegalizeActionStep::Action, llvm::LegalizeActions::Custom, getAction(), llvm::IRSimilarity::Legal, MI, and MRI.
|
inlinevirtual |
Called for instructions with the Custom LegalizationAction.
Reimplemented in llvm::AArch64LegalizerInfo, llvm::AMDGPULegalizerInfo, llvm::ARMLegalizerInfo, llvm::MipsLegalizerInfo, llvm::RISCVLegalizerInfo, llvm::SPIRVLegalizerInfo, and llvm::X86LegalizerInfo.
Definition at line 1382 of file LegalizerInfo.h.
References llvm_unreachable.
Referenced by llvm::LegalizerHelper::legalizeInstrStep().
|
inlinevirtual |
Reimplemented in llvm::AArch64LegalizerInfo, llvm::AMDGPULegalizerInfo, llvm::MipsLegalizerInfo, llvm::RISCVLegalizerInfo, and llvm::X86LegalizerInfo.
Definition at line 1391 of file LegalizerInfo.h.
Referenced by llvm::LegalizerHelper::legalizeInstrStep().
void LegalizerInfo::verify | ( | const MCInstrInfo & | MII | ) | const |
Perform simple self-diagnostic and assert if there is anything obviously wrong with the actions set up.
Definition at line 380 of file LegalizerInfo.cpp.
References llvm::dbgs(), llvm::errs(), llvm::MCInstrInfo::get(), getActionDefinitions(), llvm::MCInstrInfo::getName(), LLVM_DEBUG, llvm::MCInstrDesc::operands(), llvm::report_fatal_error(), llvm::LegalizeRuleSet::verifyImmIdxsCoverage(), and llvm::LegalizeRuleSet::verifyTypeIdxsCoverage().