|
LLVM 22.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/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 "AMDGPUGenInstrInfo.inc"#include "AMDGPUGenSearchableTables.inc"Go to the source code of this file.
Classes | |
| 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_D16ImageDimIntrinsics_IMPL |
| #define | GET_ImageDimIntrinsicTable_IMPL |
| #define | GET_RsrcIntrinsics_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 40 of file SIInstrInfo.cpp.
| #define GENERATE_RENAMED_GFX9_CASES | ( | OPCODE | ) |
Definition at line 10190 of file SIInstrInfo.cpp.
Referenced by isRenamedInGFX9().
| #define GET_D16ImageDimIntrinsics_IMPL |
Definition at line 46 of file SIInstrInfo.cpp.
| #define GET_ImageDimIntrinsicTable_IMPL |
Definition at line 47 of file SIInstrInfo.cpp.
| #define GET_INSTRINFO_CTOR_DTOR |
Definition at line 42 of file SIInstrInfo.cpp.
| #define GET_RsrcIntrinsics_IMPL |
Definition at line 48 of file SIInstrInfo.cpp.
|
static |
Definition at line 111 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 4377 of file SIInstrInfo.cpp.
References MI.
Referenced by llvm::SIInstrInfo::isSchedulingBoundary().
|
static |
Definition at line 4723 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 4876 of file SIInstrInfo.cpp.
References llvm::MachineOperand::isKill(), llvm::MachineOperand::isUndef(), and MI.
Referenced by llvm::SIInstrInfo::buildShrunkInst().
|
static |
Definition at line 6961 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addMBB(), llvm::MachineInstrBuilder::addReg(), llvm::AMDGPU::LaneMaskConstants::AndOpc, llvm::AMDGPU::LaneMaskConstants::AndSaveExecOpc, assert(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), DL, llvm::MachineBasicBlock::end(), llvm::AMDGPU::LaneMaskConstants::ExecReg, llvm::AMDGPU::LaneMaskConstants::get(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getSubtarget(), llvm::getUndefRegState(), I, llvm::RegState::Kill, Merge, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), RegSize, TII, TRI, and llvm::AMDGPU::LaneMaskConstants::XorTermOpc.
Referenced by loadMBUFScalarOperandsFromVGPR().
|
static |
Definition at line 763 of file SIInstrInfo.cpp.
References llvm::MachineInstr::addOperand(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), llvm::MachineOperand::CreateReg(), DL, llvm::SIRegisterInfo::getChannelFromSubReg(), llvm::SIRegisterInfo::getRegSplitParts(), llvm::SIRegisterInfo::getSubRegFromChannel(), I, llvm::RegState::Implicit, MBB, MI, llvm::ArrayRef< T >::size(), std::swap(), and TII.
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
static |
Definition at line 7208 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MachineFunction::getRegInfo(), llvm::Hi_32(), llvm::Lo_32(), MBB, MI, MRI, and TII.
Referenced by llvm::SIInstrInfo::legalizeOperands().
|
static |
Definition at line 4971 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::legalizeOperandsVOP2(), and llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 10818 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::optimizeCompareInstr().
|
static |
Definition at line 10309 of file SIInstrInfo.cpp.
References getRegOrUndef(), llvm::getRegSequenceSubReg(), MI, llvm::TargetInstrInfo::RegSubRegPair::Reg, and llvm::TargetInstrInfo::RegSubRegPair::SubReg.
Referenced by llvm::getVRegSubRegDef().
Definition at line 1813 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillRestoreOpcode().
Definition at line 1622 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillSaveOpcode().
|
static |
Definition at line 4026 of file SIInstrInfo.cpp.
References DefMI, getFoldableImm(), llvm::MachineInstr::getMF(), llvm::MachineOperand::getParent(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::MachineOperand::isReg(), and MRI.
|
static |
Definition at line 4012 of file SIInstrInfo.cpp.
References DefMI, llvm::SIInstrInfo::isFoldableCopy(), MRI, and Reg.
Referenced by getFoldableImm(), and llvm::SIInstrInfo::optimizeCompareInstr().
Definition at line 1484 of file SIInstrInfo.cpp.
References llvm_unreachable.
Referenced by llvm::SIInstrInfo::getIndirectRegWriteMovRelPseudo().
Definition at line 1517 of file SIInstrInfo.cpp.
References llvm_unreachable.
Referenced by llvm::SIInstrInfo::getIndirectRegWriteMovRelPseudo().
Definition at line 1451 of file SIInstrInfo.cpp.
References llvm_unreachable.
Referenced by llvm::SIInstrInfo::getIndirectRegWriteMovRelPseudo().
|
static |
Definition at line 3530 of file SIInstrInfo.cpp.
References llvm_unreachable, and Opc.
Referenced by llvm::SIInstrInfo::foldImmediate().
|
static |
Definition at line 4047 of file SIInstrInfo.cpp.
References llvm_unreachable, and Opc.
|
static |
Definition at line 3562 of file SIInstrInfo.cpp.
References llvm_unreachable, and Opc.
Referenced by llvm::SIInstrInfo::foldImmediate().
Definition at line 76 of file SIInstrInfo.cpp.
References N.
Referenced by llvm::SIInstrInfo::areLoadsFromSameBasePtr().
|
static |
Definition at line 10290 of file SIInstrInfo.cpp.
References assert(), llvm::getRegSubRegPair(), llvm::MachineOperand::isReg(), and llvm::MachineOperand::isUndef().
Referenced by followSubRegDef(), and llvm::getRegSequenceSubReg().
Definition at line 1741 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::loadRegFromStackSlot().
Definition at line 1550 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::storeRegToStackSlot().
Definition at line 1776 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillRestoreOpcode().
Definition at line 1585 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillSaveOpcode().
Definition at line 1848 of file SIInstrInfo.cpp.
References llvm_unreachable, and Size.
Referenced by llvm::SIInstrInfo::getVectorRegSpillRestoreOpcode().
Definition at line 1657 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 643 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), contains(), llvm::RegState::Define, DL, E(), llvm::SIRegisterInfo::getHWRegIndex(), llvm::getKillRegState(), llvm::MachineOperand::getReg(), llvm::SIRegisterInfo::getRegPressureLimit(), I, llvm::RegState::Implicit, llvm::MachineOperand::isImm(), llvm::MachineOperand::isReg(), llvm::RegState::Kill, MBB, MI, and TII.
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
static |
Definition at line 5015 of file SIInstrInfo.cpp.
References llvm::MachineOperand::isFI(), and llvm::MachineOperand::isReg().
Referenced by llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 10197 of file SIInstrInfo.cpp.
References GENERATE_RENAMED_GFX9_CASES.
Referenced by llvm::SIInstrInfo::pseudoToMCOpcode().
Definition at line 353 of file SIInstrInfo.cpp.
References Opc.
Referenced by llvm::SIInstrInfo::getMemOperandsWithOffsetWidth().
|
static |
Definition at line 5019 of file SIInstrInfo.cpp.
References llvm::MachineOperand::getReg(), SubReg, and TRI.
Referenced by llvm::SIInstrInfo::verifyInstruction().
|
static |
Definition at line 7101 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::DominatorTreeBase< NodeT, IsPostDom >::addNewBlock(), llvm::MachineInstrBuilder::addReg(), llvm::MachineBasicBlock::addSuccessor(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::DominatorTreeBase< NodeT, IsPostDom >::changeImmediateDominator(), llvm::MachineFunction::CreateMachineBasicBlock(), DL, emitLoadScalarOpsFromVGPRLoop(), llvm::AMDGPU::LaneMaskConstants::ExecReg, llvm::First, llvm::AMDGPU::LaneMaskConstants::get(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::MachineFunction::insert(), llvm::RegState::Kill, llvm::MachineBasicBlock::LQR_Dead, MBB, MBBI, MI, llvm::AMDGPU::LaneMaskConstants::MovOpc, MRI, llvm::DominatorTreeBase< NodeT, IsPostDom >::properlyDominates(), llvm::MachineBasicBlock::splice(), llvm::MachineBasicBlock::successors(), TII, llvm::MachineBasicBlock::transferSuccessorsAndUpdatePHIs(), and TRI.
Referenced by llvm::SIInstrInfo::legalizeOperands().
|
static |
Definition at line 3900 of file SIInstrInfo.cpp.
References E(), I, and llvm::ArrayRef< T >::size().
|
static |
Definition at line 531 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 85 of file SIInstrInfo.cpp.
References llvm::SDNode::getMachineOpcode(), and llvm::SDNode::getOperand().
Referenced by llvm::SIInstrInfo::areLoadsFromSameBasePtr().
|
static |
Definition at line 3911 of file SIInstrInfo.cpp.
References llvm::LocationSize::getValue(), and llvm::LocationSize::hasValue().
|
static |
Definition at line 10797 of file SIInstrInfo.cpp.
References llvm::MachineInstr::clearRegisterKills(), llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::findRegisterDefOperand(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineInstr::getParent(), llvm::make_range(), and MI.
Referenced by llvm::SIInstrInfo::optimizeCompareInstr().
|
static |
Definition at line 3205 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 626 of file SIInstrInfo.cpp.
References llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::CallingConv::C, DL, llvm::DS_Error, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::getKillRegState(), MBB, MI, and TII.
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
static |
Definition at line 4993 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 10149 of file SIInstrInfo.cpp.
References llvm::AMDGPUSubtarget::GFX10, llvm::SIEncodingFamily::GFX10, llvm::AMDGPUSubtarget::GFX11, llvm::SIEncodingFamily::GFX11, llvm::AMDGPUSubtarget::GFX12, llvm::SIEncodingFamily::GFX12, llvm::SIEncodingFamily::GFX1250, 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 2753 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 2724 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(), llvm::MachineOperand::setTargetFlags(), and SubReg.
Referenced by llvm::SIInstrInfo::commuteInstructionImpl().
|
static |
Definition at line 4035 of file SIInstrInfo.cpp.
References AbstractManglingParser< Derived, Alloc >::NumOps, I, MI, and llvm::LiveVariables::replaceKillInstruction().
Referenced by llvm::SIInstrInfo::convertToThreeAddress().
|
static |
Referenced by llvm::SIInstrInfo::isBranchOffsetInRange().
|
static |
Referenced by llvm::SIInstrInfo::copyPhysReg().
|
staticconstexpr |
Definition at line 3477 of file SIInstrInfo.cpp.
Referenced by llvm::SIInstrInfo::hasAnyModifiersSet(), and llvm::SIInstrInfo::removeModOperands().