|
LLVM 24.0.0git
|
SI Implementation of TargetInstrInfo. More...
#include "SIInstrInfo.h"#include "AMDGPU.h"#include "AMDGPUInstrInfo.h"#include "AMDGPULaneMaskUtils.h"#include "GCNHazardRecognizer.h"#include "GCNSubtarget.h"#include "SIMachineFunctionInfo.h"#include "Utils/AMDGPUBaseInfo.h"#include "llvm/ADT/STLExtras.h"#include "llvm/Analysis/ValueTracking.h"#include "llvm/CodeGen/GlobalISel/GenericMachineInstrs.h"#include "llvm/CodeGen/LiveIntervals.h"#include "llvm/CodeGen/LiveVariables.h"#include "llvm/CodeGen/MachineCycleAnalysis.h"#include "llvm/CodeGen/MachineDominators.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineScheduler.h"#include "llvm/CodeGen/RegisterScavenging.h"#include "llvm/CodeGen/ScheduleDAG.h"#include "llvm/IR/DiagnosticInfo.h"#include "llvm/IR/IntrinsicsAMDGPU.h"#include "llvm/MC/MCContext.h"#include "llvm/Support/CommandLine.h"#include "llvm/Target/TargetMachine.h"#include <tuple>#include "AMDGPUGenInstrInfo.inc"#include "AMDGPUGenSearchableTables.inc"Go to the source code of this file.
Classes | |
| struct | llvm::AMDGPU::AMDGPUBlockingCyclesInfo |
| struct | llvm::SIInstrInfo::ThreeAddressUpdates |
| Helper struct for the implementation of 3-address conversion to communicate updates made to instruction operands. More... | |
Namespaces | |
| namespace | llvm |
| This is an optimization pass for GlobalISel generic memory operations. | |
| namespace | llvm::AMDGPU |
Macros | |
| #define | DEBUG_TYPE "si-instr-info" |
| #define | GET_INSTRINFO_CTOR_DTOR |
| #define | GET_ImageDimIntrinsicTable_IMPL |
| #define | GET_RsrcIntrinsics_IMPL |
| #define | GET_GFX1250BlockingCyclesTable_DECL |
| #define | GET_GFX1250BlockingCyclesTable_IMPL |
| #define | GENERATE_RENAMED_GFX9_CASES(OPCODE) |
Variables | |
| static cl::opt< unsigned > | BranchOffsetBits ("amdgpu-s-branch-bits", cl::ReallyHidden, cl::init(16), cl::desc("Restrict range of branch instructions (DEBUG)")) |
| static cl::opt< bool > | Fix16BitCopies ("amdgpu-fix-16-bit-physreg-copies", cl::desc("Fix copies between 32 and 16 bit registers by extending to 32 bit"), cl::init(true), cl::ReallyHidden) |
| static constexpr AMDGPU::OpName | ModifierOpNames [] |
SI Implementation of TargetInstrInfo.
Definition in file SIInstrInfo.cpp.
| #define DEBUG_TYPE "si-instr-info" |
Definition at line 42 of file SIInstrInfo.cpp.
| #define GENERATE_RENAMED_GFX9_CASES | ( | OPCODE | ) |
Definition at line 10831 of file SIInstrInfo.cpp.
Referenced by isRenamedInGFX9().
| #define GET_GFX1250BlockingCyclesTable_DECL |
Definition at line 50 of file SIInstrInfo.cpp.
| #define GET_GFX1250BlockingCyclesTable_IMPL |
Definition at line 51 of file SIInstrInfo.cpp.
| #define GET_ImageDimIntrinsicTable_IMPL |
Definition at line 48 of file SIInstrInfo.cpp.
| #define GET_INSTRINFO_CTOR_DTOR |
Definition at line 44 of file SIInstrInfo.cpp.
| #define GET_RsrcIntrinsics_IMPL |
Definition at line 49 of file SIInstrInfo.cpp.
|
static |
Definition at line 120 of file SIInstrInfo.cpp.
References llvm::all_of(), llvm::SIInstrInfo::isSALU(), llvm::SIInstrInfo::isSDWA(), llvm::SIInstrInfo::isSMRD(), llvm::SIInstrInfo::isVOP1(), llvm::SIInstrInfo::isVOP2(), llvm::SIInstrInfo::isVOP3(), and MI.
Referenced by llvm::SIInstrInfo::isReMaterializableImpl().
|
static |
Definition at line 4697 of file SIInstrInfo.cpp.
References MI.
Referenced by llvm::SIInstrInfo::isSchedulingBoundary().
|
static |
Definition at line 5051 of file SIInstrInfo.cpp.
References llvm::MachineOperand::getImm(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getType(), llvm_unreachable, llvm::MachineOperand::MO_Immediate, and llvm::MachineOperand::MO_Register.
Referenced by llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 5226 of file SIInstrInfo.cpp.
References llvm::MachineOperand::isKill(), llvm::MachineOperand::isUndef(), and MI.
Referenced by llvm::SIInstrInfo::buildShrunkInst().
|
static |
Definition at line 7326 of file SIInstrInfo.cpp.
|
static |
Definition at line 894 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), DL, llvm::SIRegisterInfo::getChannelFromSubReg(), llvm::SIRegisterInfo::getRegSplitParts(), llvm::SIRegisterInfo::getSubRegFromChannel(), I, llvm::Implicit, MBB, MI, llvm::ArrayRef< T >::size(), std::swap(), and TII.
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
static |
Definition at line 7679 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::MachineFunction::getRegInfo(), llvm::Hi_32(), llvm::Lo_32(), MBB, MI, TII, and uint64_t.
Referenced by llvm::SIInstrInfo::legalizeOperands().
|
static |
Definition at line 5331 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::legalizeOperandsVOP2(), and llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 11586 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::optimizeCompareInstr().
|
static |
Definition at line 10954 of file SIInstrInfo.cpp.
References getRegOrUndef(), llvm::getRegSequenceSubReg(), MI, llvm::TargetInstrInfo::RegSubRegPair::Reg, and llvm::TargetInstrInfo::RegSubRegPair::SubReg.
Referenced by llvm::getVRegSubRegDef().
|
static |
Definition at line 7568 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::createWaterFallForSiCall(), and llvm::SIInstrInfo::legalizeOperands().
Definition at line 1912 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillRestoreOpcode().
Definition at line 1694 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillSaveOpcode().
Definition at line 1539 of file SIInstrInfo.cpp.
References llvm_unreachable.
Referenced by llvm::SIInstrInfo::getIndirectRegWriteMovRelPseudo().
Definition at line 1572 of file SIInstrInfo.cpp.
References llvm_unreachable.
Referenced by llvm::SIInstrInfo::getIndirectRegWriteMovRelPseudo().
Definition at line 1506 of file SIInstrInfo.cpp.
References llvm_unreachable.
Referenced by llvm::SIInstrInfo::getIndirectRegWriteMovRelPseudo().
|
static |
Definition at line 3833 of file SIInstrInfo.cpp.
References llvm_unreachable, and Opc.
Referenced by llvm::SIInstrInfo::foldImmediate().
|
static |
Definition at line 4366 of file SIInstrInfo.cpp.
References llvm_unreachable, and Opc.
|
static |
Definition at line 3867 of file SIInstrInfo.cpp.
References llvm_unreachable, and Opc.
Referenced by llvm::SIInstrInfo::foldImmediate().
Definition at line 85 of file SIInstrInfo.cpp.
References N.
Referenced by llvm::SIInstrInfo::areLoadsFromSameBasePtr().
|
static |
Definition at line 10935 of file SIInstrInfo.cpp.
References assert(), llvm::getRegSubRegPair(), llvm::MachineOperand::isReg(), and llvm::MachineOperand::isUndef().
Referenced by followSubRegDef(), and llvm::getRegSequenceSubReg().
Definition at line 1840 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::loadRegFromStackSlot().
Definition at line 1605 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Definition at line 1875 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillRestoreOpcode().
Definition at line 1646 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillSaveOpcode().
Definition at line 1947 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillRestoreOpcode().
Definition at line 1739 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillSaveOpcode().
|
static |
Handle copying from SGPR to AGPR, or from AGPR to AGPR on GFX908.
It is not possible to have a direct copy in these cases on GFX908, so an intermediate VGPR copy is required.
Definition at line 781 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), contains(), DL, E(), llvm::SIRegisterInfo::getHWRegIndex(), llvm::getKillRegState(), llvm::MachineOperand::getReg(), llvm::SIRegisterInfo::getRegPressureLimit(), I, llvm::Implicit, llvm::MachineOperand::isImm(), llvm::MachineOperand::isReg(), llvm::Kill, MBB, MI, and TII.
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
static |
Definition at line 5375 of file SIInstrInfo.cpp.
References llvm::MachineOperand::isFI(), and llvm::MachineOperand::isReg().
Referenced by llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 10838 of file SIInstrInfo.cpp.
References GENERATE_RENAMED_GFX9_CASES.
Referenced by llvm::SIInstrInfo::pseudoToMCOpcode().
|
static |
Definition at line 11498 of file SIInstrInfo.cpp.
References MBB.
Definition at line 491 of file SIInstrInfo.cpp.
References Opc.
Referenced by llvm::SIInstrInfo::getMemOperandsWithOffsetWidth().
|
static |
Definition at line 5379 of file SIInstrInfo.cpp.
References llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::Register::isPhysical(), and TRI.
Referenced by llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 4242 of file SIInstrInfo.cpp.
References E(), I, and llvm::ArrayRef< T >::size().
|
static |
Definition at line 669 of file SIInstrInfo.cpp.
References llvm::ArrayRef< T >::front(), llvm::getUnderlyingObject(), llvm::MachineInstr::hasOneMemOperand(), llvm::isa(), and llvm::MachineInstr::memoperands_begin().
Referenced by llvm::RISCVInstrInfo::shouldClusterMemOps(), and llvm::SIInstrInfo::shouldClusterMemOps().
Returns true if both nodes have the same value for the given operand Op, or if both nodes do not have this operand.
Definition at line 94 of file SIInstrInfo.cpp.
References llvm::SDNode::getMachineOpcode(), and llvm::SDNode::getOperand().
Referenced by llvm::SIInstrInfo::areLoadsFromSameBasePtr().
|
static |
Definition at line 4253 of file SIInstrInfo.cpp.
References llvm::LocationSize::getValue(), and llvm::LocationSize::hasValue().
|
static |
Definition at line 3403 of file SIInstrInfo.cpp.
References llvm::MachineOperand::isKill(), llvm::MachineOperand::isUndef(), llvm::MachineOperand::setIsKill(), and llvm::MachineOperand::setIsUndef().
Referenced by llvm::SIInstrInfo::insertBranch(), and llvm::SIInstrInfo::insertSelect().
|
static |
Definition at line 764 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), C(), DL, llvm::DS_Error, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::getKillRegState(), MBB, MI, Msg, and TII.
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
static |
Definition at line 11597 of file SIInstrInfo.cpp.
References llvm::MachineOperand::isDead(), and TII.
Referenced by llvm::SIInstrInfo::optimizeCompareInstr().
|
static |
Definition at line 5353 of file SIInstrInfo.cpp.
References llvm::SIInstrInfo::isSALU(), llvm::SIInstrInfo::isSMRD(), llvm::SIInstrInfo::isVALU(), and MI.
Referenced by llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 140 of file SIInstrInfo.cpp.
References llvm_unreachable, llvm::SIInstrInfo::MO_ABS32_HI, llvm::SIInstrInfo::MO_ABS32_LO, llvm::SIInstrInfo::MO_ABS64, llvm::SIInstrInfo::MO_GOTPCREL, llvm::SIInstrInfo::MO_GOTPCREL32_HI, llvm::SIInstrInfo::MO_GOTPCREL32_LO, llvm::SIInstrInfo::MO_GOTPCREL64, llvm::SIInstrInfo::MO_MASK, llvm::SIInstrInfo::MO_REL32_HI, llvm::SIInstrInfo::MO_REL32_LO, and llvm::SIInstrInfo::MO_REL64.
Referenced by llvm::SIInstrInfo::expandPostRAPseudo().
|
static |
Definition at line 10782 of file SIInstrInfo.cpp.
References llvm::AMDGPUSubtarget::GFX10, llvm::SIEncodingFamily::GFX10, llvm::AMDGPUSubtarget::GFX11, llvm::SIEncodingFamily::GFX11, llvm::SIEncodingFamily::GFX1170, llvm::AMDGPUSubtarget::GFX12, llvm::SIEncodingFamily::GFX12, llvm::SIEncodingFamily::GFX1250, llvm::AMDGPUSubtarget::GFX13, llvm::SIEncodingFamily::GFX13, llvm::SIEncodingFamily::GFX80, llvm::AMDGPUSubtarget::GFX9, llvm_unreachable, llvm::AMDGPUSubtarget::SEA_ISLANDS, llvm::SIEncodingFamily::SI, llvm::AMDGPUSubtarget::SOUTHERN_ISLANDS, llvm::SIEncodingFamily::VI, and llvm::AMDGPUSubtarget::VOLCANIC_ISLANDS.
Referenced by llvm::SIInstrInfo::pseudoToMCOpcode().
|
static |
Definition at line 2935 of file SIInstrInfo.cpp.
References llvm::MachineOperand::getImm(), llvm::MachineOperand::getTargetFlags(), MI, llvm::MachineOperand::setImm(), and llvm::MachineOperand::setTargetFlags().
Referenced by llvm::SIInstrInfo::commuteInstructionImpl().
|
static |
Definition at line 2906 of file SIInstrInfo.cpp.
References llvm::MachineOperand::ChangeToFrameIndex(), llvm::MachineOperand::ChangeToGA(), llvm::MachineOperand::ChangeToImmediate(), llvm::MachineOperand::ChangeToRegister(), llvm::MachineOperand::getGlobal(), llvm::MachineOperand::getImm(), llvm::MachineOperand::getIndex(), llvm::MachineOperand::getOffset(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::MachineOperand::getTargetFlags(), IsDead, llvm::MachineOperand::isDead(), llvm::MachineOperand::isDebug(), llvm::MachineOperand::isFI(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isKill(), llvm::MachineOperand::isUndef(), MI, Reg, llvm::MachineOperand::setSubReg(), and llvm::MachineOperand::setTargetFlags().
Referenced by llvm::SIInstrInfo::commuteInstructionImpl().
|
static |
Definition at line 4354 of file SIInstrInfo.cpp.
References AbstractManglingParser< Derived, Alloc >::NumOps, I, MI, and llvm::LiveVariables::replaceKillInstruction().
Referenced by llvm::SIInstrInfo::convertToThreeAddress().
|
static |
Definition at line 6475 of file SIInstrInfo.cpp.
References llvm::enumerate(), I, and MI.
Referenced by llvm::SIInstrInfo::isLegalRegOperand(), and llvm::SIInstrInfo::legalizeOpWithMove().
|
static |
Referenced by llvm::SIInstrInfo::isBranchOffsetInRange().
|
static |
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
staticconstexpr |
Definition at line 3780 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::hasAnyModifiersSet(), and llvm::SIInstrInfo::removeModOperands().