LLVM  10.0.0svn
Macros | Functions
AMDGPUInstructionSelector.cpp File Reference

This file implements the targeting of the InstructionSelector class for AMDGPU. More...

#include "AMDGPUInstructionSelector.h"
#include "AMDGPUInstrInfo.h"
#include "AMDGPURegisterBankInfo.h"
#include "AMDGPURegisterInfo.h"
#include "AMDGPUSubtarget.h"
#include "AMDGPUTargetMachine.h"
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
#include "SIMachineFunctionInfo.h"
#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
#include "llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h"
#include "llvm/CodeGen/GlobalISel/MIPatternMatch.h"
#include "llvm/CodeGen/GlobalISel/Utils.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "AMDGPUGenGlobalISel.inc"
Include dependency graph for AMDGPUInstructionSelector.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "amdgpu-isel"
 
#define GET_GLOBALISEL_IMPL
 
#define AMDGPUSubtarget   GCNSubtarget
 
#define GET_GLOBALISEL_PREDICATES_INIT
 
#define GET_GLOBALISEL_TEMPORARIES_INIT
 

Functions

static bool isSCC (Register Reg, const MachineRegisterInfo &MRI)
 
static int64_t getConstant (const MachineInstr *MI)
 
static unsigned getLogicalBitOpcode (unsigned Opc, bool Is64)
 
static int getV_CMPOpcode (CmpInst::Predicate P, unsigned Size)
 
static MachineInstrbuildEXP (const TargetInstrInfo &TII, MachineInstr *Insert, unsigned Tgt, unsigned Reg0, unsigned Reg1, unsigned Reg2, unsigned Reg3, unsigned VM, bool Compr, unsigned Enabled, bool Done)
 
static int sizeToSubRegIndex (unsigned Size)
 
static bool shouldUseAndMask (unsigned Size, unsigned &Mask)
 
static bool isConstant (const MachineInstr &MI)
 
static bool signBitIsZero (const MachineOperand &Op, const MachineRegisterInfo &MRI)
 
static bool isStackPtrRelative (const MachinePointerInfo &PtrInfo)
 

Detailed Description

This file implements the targeting of the InstructionSelector class for AMDGPU.

Todo:
This should be generated by TableGen.

Definition in file AMDGPUInstructionSelector.cpp.

Macro Definition Documentation

◆ AMDGPUSubtarget

Definition at line 41 of file AMDGPUInstructionSelector.cpp.

◆ DEBUG_TYPE

#define DEBUG_TYPE   "amdgpu-isel"

◆ GET_GLOBALISEL_IMPL

#define GET_GLOBALISEL_IMPL

Definition at line 40 of file AMDGPUInstructionSelector.cpp.

◆ GET_GLOBALISEL_PREDICATES_INIT

#define GET_GLOBALISEL_PREDICATES_INIT

◆ GET_GLOBALISEL_TEMPORARIES_INIT

#define GET_GLOBALISEL_TEMPORARIES_INIT

Function Documentation

◆ buildEXP()

static MachineInstr* buildEXP ( const TargetInstrInfo TII,
MachineInstr Insert,
unsigned  Tgt,
unsigned  Reg0,
unsigned  Reg1,
unsigned  Reg2,
unsigned  Reg3,
unsigned  VM,
bool  Compr,
unsigned  Enabled,
bool  Done 
)
static

Definition at line 717 of file AMDGPUInstructionSelector.cpp.

◆ getConstant()

static int64_t getConstant ( const MachineInstr MI)
static

◆ getLogicalBitOpcode()

static unsigned getLogicalBitOpcode ( unsigned  Opc,
bool  Is64 
)
static

Definition at line 251 of file AMDGPUInstructionSelector.cpp.

References llvm::MCID::Add, llvm::MachineInstrBuilder::add(), add(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstr::addOperand(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), llvm::RegisterBankInfo::constrainGenericRegister(), llvm::constrainSelectedInstRegOperands(), llvm::InstructionSelector::CoverageInfo, llvm::MachineOperand::CreateImm(), llvm::MachineOperand::CreateReg(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::RegState::Dead, E, llvm::MachineInstr::eraseFromParent(), llvm::SIRegisterInfo::getBoolRC(), llvm::SIRegisterInfo::getConstrainedRegClassForOperand(), llvm::MachineInstr::getDebugLoc(), llvm::RegisterBank::getID(), llvm::MachineOperand::getImm(), getIntrinsicID(), llvm::MachineInstr::getNumExplicitDefs(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::RegisterBankInfo::getRegBank(), llvm::MachineRegisterInfo::getRegBankOrNull(), llvm::SIRegisterInfo::getRegClassForSizeOnBank(), llvm::MachineRegisterInfo::getRegClassOrNull(), llvm::MachineFunction::getRegInfo(), llvm::SIRegisterInfo::getRegSplitParts(), llvm::LLT::getSizeInBits(), llvm::AMDGPURegisterInfo::getSubRegFromChannel(), llvm::MachineRegisterInfo::getType(), llvm::getUndefRegState(), llvm::SIRegisterInfo::getWaveMaskRegClass(), llvm::GCNSubtarget::hasAddNoCarry(), I, llvm::MipsISD::Ins, llvm::Register::isPhysicalRegister(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUndef(), llvm::RegState::Kill, llvm_unreachable, llvm::InstructionSelector::MF, MI, MRI, llvm::MachineInstr::operands(), llvm::MachineInstr::setDesc(), llvm::MachineRegisterInfo::setRegClass(), Size, and SubReg.

◆ getV_CMPOpcode()

static int getV_CMPOpcode ( CmpInst::Predicate  P,
unsigned  Size 
)
static

◆ isConstant()

static bool isConstant ( const MachineInstr MI)
static

Definition at line 1131 of file AMDGPUInstructionSelector.cpp.

References llvm::MachineInstr::addOperand(), assert(), llvm::BuildMI(), AMDGPUAS::CONSTANT_ADDRESS_32BIT, llvm::RegisterBankInfo::constrainGenericRegister(), llvm::InstructionSelector::CoverageInfo, llvm::MachineOperand::CreateReg(), llvm::dyn_cast(), llvm::MachineInstr::eraseFromParent(), llvm::LLT::getAddressSpace(), llvm::MachineMemOperand::getAddrSpace(), llvm::SIRegisterInfo::getBoolRC(), llvm::MachineOperand::getCImm(), llvm::MachineInstr::getDebugLoc(), llvm::RegisterBank::getID(), llvm::MachineOperand::getMBB(), llvm::Instruction::getMetadata(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::RegisterBankInfo::getRegBank(), llvm::MachineRegisterInfo::getRegClassOrNull(), llvm::MachineFunction::getRegInfo(), llvm::ConstantInt::getSExtValue(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), llvm::MachineMemOperand::getValue(), llvm::SIRegisterInfo::getVCC(), llvm::MachineInstr::hasOneMemOperand(), isSCC(), llvm::GCNSubtarget::ldsRequiresM0Init(), llvm::SPII::Load, AMDGPUAS::LOCAL_ADDRESS, llvm::MachineInstr::memoperands_begin(), llvm::InstructionSelector::MF, MRI, llvm::SmallVectorTemplateBase< T >::push_back(), AMDGPUAS::REGION_ADDRESS, llvm::MachineInstr::setDesc(), and llvm::MachineRegisterInfo::setRegClass().

Referenced by ConstantBuildVector(), llvm::MDBuilder::createAnonymousAliasScope(), ExpandBVWithShuffles(), llvm::HexagonInstrInfo::expandPostRAPseudo(), foldBitcastedFPLogic(), llvm::DIExpression::getElement(), inferDSOLocal(), INITIALIZE_PASS(), isDbgValueDescribedByReg(), isDebug(), LLVMIsGlobalConstant(), and LowerBUILD_VECTOR_i1().

◆ isSCC()

static bool isSCC ( Register  Reg,
const MachineRegisterInfo MRI 
)
static

Definition at line 64 of file AMDGPUInstructionSelector.cpp.

References llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), llvm::RegisterBankInfo::constrainGenericRegister(), llvm::MachineOperand::CreateImm(), llvm::MachineOperand::CreateReg(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::dbgs(), llvm::PointerUnion< PTs >::dyn_cast(), llvm::MachineInstr::eraseFromParent(), llvm::PointerUnion< PTs >::get(), llvm::SIRegisterInfo::getBoolRC(), llvm::SIRegisterInfo::getConstrainedRegClassForOperand(), llvm::MachineInstr::getDebugLoc(), llvm::RegisterBank::getID(), llvm::TargetRegisterClass::getID(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineOperand::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::SIRegisterInfo::getRegClassForTypeOnBank(), llvm::MachineRegisterInfo::getRegClassOrNull(), llvm::MachineRegisterInfo::getRegClassOrRegBank(), llvm::MachineFunction::getRegInfo(), llvm::LLT::getSizeInBits(), llvm::MachineOperand::getSubReg(), llvm::MachineRegisterInfo::getType(), llvm::SIRegisterInfo::getVCC(), llvm::TargetRegisterClass::hasSuperClassEq(), I, llvm::MachineOperand::isDead(), llvm::MachineOperand::isDebug(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isEarlyClobber(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isImplicit(), llvm::MachineOperand::isInternalRead(), llvm::MachineOperand::isKill(), llvm::Register::isPhysicalRegister(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isUndef(), llvm::LLT::isValid(), LLVM_DEBUG, llvm_unreachable, llvm::InstructionSelector::MF, MI, MRI, llvm::MachineInstr::operands(), Reg, llvm::MachineInstr::setDesc(), and llvm::MachineRegisterInfo::setRegClass().

Referenced by getV_CMPOpcode(), and isConstant().

◆ isStackPtrRelative()

static bool isStackPtrRelative ( const MachinePointerInfo PtrInfo)
static

◆ shouldUseAndMask()

static bool shouldUseAndMask ( unsigned  Size,
unsigned Mask 
)
static
Returns
true if a bitmask for Size bits will be an inline immediate.

Definition at line 918 of file AMDGPUInstructionSelector.cpp.

References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstr::addImplicitDefUseOperands(), llvm::MachineInstrBuilder::addReg(), llvm::MachineInstrBuilder::addUse(), llvm::APInt::ashr(), llvm::APFloat::bitcastToAPInt(), llvm::BuildMI(), llvm::MachineOperand::ChangeToImmediate(), llvm::RegisterBankInfo::constrainGenericRegister(), llvm::constrainSelectedInstRegOperands(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::MachineInstr::eraseFromParent(), llvm::MachineOperand::getCImm(), llvm::SIRegisterInfo::getConstrainedRegClassForOperand(), llvm::MachineInstr::getDebugLoc(), llvm::MachineOperand::getFPImm(), llvm::RegisterBank::getID(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::RegisterBankInfo::getRegBank(), llvm::MachineRegisterInfo::getRegBankOrNull(), llvm::SIRegisterInfo::getRegClassForReg(), llvm::MachineFunction::getRegInfo(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::ConstantFP::getValueAPF(), llvm::ConstantInt::getZExtValue(), llvm::APInt::getZExtValue(), llvm::MachineOperand::isCImm(), llvm::MachineOperand::isFPImm(), llvm::LLT::isScalar(), llvm::SIRegisterInfo::isSGPRClass(), llvm::BitmaskEnumDetail::Mask(), llvm::InstructionSelector::MF, MRI, llvm::LLT::scalar(), llvm::MachineInstr::setDesc(), Signed, Size, and llvm::APInt::trunc().

◆ signBitIsZero()

static bool signBitIsZero ( const MachineOperand Op,
const MachineRegisterInfo MRI 
)
static

Definition at line 1575 of file AMDGPUInstructionSelector.cpp.

Referenced by getVPTESTMOpc(), and isStackPtrRelative().

◆ sizeToSubRegIndex()

static int sizeToSubRegIndex ( unsigned  Size)
static