LLVM: lib/Target/SPIRV/SPIRVPreLegalizer.cpp File Reference (original) (raw)

Go to the source code of this file.

Namespaces
namespace llvm
This is an optimization pass for GlobalISel generic memory operations.
Macros
#define DEBUG_TYPE "spirv-prelegalizer"
Functions
static void addConstantsToTrack (MachineFunction &MF, SPIRVGlobalRegistry *GR, const SPIRVSubtarget &STI, DenseMap< MachineInstr *, Type * > &TargetExtConstTypes)
static void foldConstantsIntoIntrinsics (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static MachineInstr * findAssignTypeInstr (Register Reg, MachineRegisterInfo *MRI)
static void buildOpBitcast (SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB, Register ResVReg, Register OpReg)
static void lowerBitcasts (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static void insertBitcasts (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static SPIRVType * propagateSPIRVType (MachineInstr *MI, SPIRVGlobalRegistry *GR, MachineRegisterInfo &MRI, MachineIRBuilder &MIB)
static unsigned widenBitWidthToNextPow2 (unsigned BitWidth)
static void widenScalarType (Register Reg, MachineRegisterInfo &MRI)
static void widenCImmType (MachineOperand &MOP)
static void setInsertPtAfterDef (MachineIRBuilder &MIB, MachineInstr *Def)
void llvm::updateRegType (Register Reg, Type *Ty, SPIRVType *SpirvTy, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB, MachineRegisterInfo &MRI)
Helper external function for assigning SPIRVType to a register, ensuring the register class and type are set in MRI.
void llvm::processInstr (MachineInstr &MI, MachineIRBuilder &MIB, MachineRegisterInfo &MRI, SPIRVGlobalRegistry *GR, SPIRVType *KnownResType)
static void generateAssignInstrs (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB, DenseMap< MachineInstr *, Type * > &TargetExtConstTypes)
static void processInstrsWithTypeFolding (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static Register collectInlineAsmInstrOperands (MachineInstr *MI, SmallVector< unsigned, 4 > *Ops=nullptr)
static void insertInlineAsmProcess (MachineFunction &MF, SPIRVGlobalRegistry *GR, const SPIRVSubtarget &ST, MachineIRBuilder MIRBuilder, const SmallVector< MachineInstr * > &ToProcess)
static void insertInlineAsm (MachineFunction &MF, SPIRVGlobalRegistry *GR, const SPIRVSubtarget &ST, MachineIRBuilder MIRBuilder)
static uint32_t convertFloatToSPIRVWord (float F)
static void insertSpirvDecorations (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static void processSwitchesConstants (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static void cleanupHelperInstructions (MachineFunction &MF, SPIRVGlobalRegistry *GR)
static void processBlockAddr (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static bool isImplicitFallthrough (MachineBasicBlock &MBB)
static void removeImplicitFallthroughs (MachineFunction &MF, MachineIRBuilder MIB)

DEBUG_TYPE

#define DEBUG_TYPE "spirv-prelegalizer"

addConstantsToTrack()

Definition at line 45 of file SPIRVPreLegalizer.cpp.

References llvm::SPIRVIRMapping::add(), llvm::SPIRVGlobalRegistry::addGlobalObject(), llvm::MachineInstr::addOperand(), assert(), llvm::cast(), llvm::MachineOperand::CreateReg(), llvm::dyn_cast(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::SPIRVIRMapping::find(), llvm::MachineFunction::front(), llvm::MachineBasicBlock::getFirstNonPHI(), llvm::SPIRVSubtarget::getInstrInfo(), llvm::MachineInstr::getOpcode(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), llvm::MachineFunction::getRegInfo(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), MBB, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, and llvm::MachineInstr::setDesc().

buildOpBitcast()

Definition at line 176 of file SPIRVPreLegalizer.cpp.

References llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::getMRI(), llvm::SPIRVGlobalRegistry::getRegClass(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::SPIRVGlobalRegistry::isBitcastCompatible(), MRI, and llvm::report_fatal_error().

Referenced by lowerBitcasts().

cleanupHelperInstructions()

collectInlineAsmInstrOperands()

Definition at line 658 of file SPIRVPreLegalizer.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, F, llvm::MachineOperand::getImm(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isMetadata(), llvm::MachineOperand::isReg(), MI, and llvm::InlineAsm::MIOp_FirstOperand.

Referenced by insertInlineAsmProcess().

convertFloatToSPIRVWord()

findAssignTypeInstr()

foldConstantsIntoIntrinsics()

generateAssignInstrs()

Definition at line 470 of file SPIRVPreLegalizer.cpp.

References llvm::SPIRVIRMapping::add(), llvm::addressSpaceToStorageClass(), llvm::SPIRVGlobalRegistry::addValueAttrs(), assert(), llvm::cast(), E(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::SPIRVIRMapping::find(), llvm::VectorType::get(), llvm::MachineOperand::getCImm(), llvm::MachineOperand::getFPImm(), llvm::getMDOperandAsType(), llvm::MachineOperand::getMetadata(), llvm::MachineIRBuilder::getMF(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MDNode::getOperand(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(), llvm::MachineFunction::getRegInfo(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::Value::getType(), llvm::SPIRVGlobalRegistry::getTypeForSPIRVType(), llvm::getVRegDef(), I, llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), MBB, MI, MRI, llvm::post_order(), propagateSPIRVType(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, llvm::MachineIRBuilder::setInsertPt(), llvm::updateRegType(), widenCImmType(), and widenScalarType().

insertBitcasts()

Definition at line 244 of file SPIRVPreLegalizer.cpp.

References llvm::addressSpaceToStorageClass(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::MachineIRBuilder::buildBitcast(), findAssignTypeInstr(), llvm::getMDOperandAsType(), llvm::MachineIRBuilder::getMF(), llvm::MachineIRBuilder::getMRI(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isa(), llvm::isSpvIntrinsic(), MBB, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().

insertInlineAsm()

insertInlineAsmProcess()

Definition at line 687 of file SPIRVPreLegalizer.cpp.

References llvm::SPIRVIRMapping::add(), llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addImm(), llvm::addStringImm(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::MachineIRBuilder::buildInstr(), llvm::cast(), collectInlineAsmInstrOperands(), llvm::InlineAsm::Extra_HasSideEffects, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::getMDOperandAsType(), llvm::SPIRVGlobalRegistry::getOrCreateOpTypeFunctionWithArgs(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), llvm::MachineFunction::getRegInfo(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::Type::getVoidTy(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), MI, llvm::InlineAsm::MIOp_AsmString, llvm::InlineAsm::MIOp_ExtraInfo, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::LLT::scalar(), llvm::MachineIRBuilder::setInsertPt(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by insertInlineAsm().

insertSpirvDecorations()

Definition at line 798 of file SPIRVPreLegalizer.cpp.

References llvm::SPIRVGlobalRegistry::buildMemAliasingOpDecorate(), llvm::buildOpDecorate(), llvm::buildOpSpirvDecorations(), llvm::cast(), convertFloatToSPIRVWord(), llvm::APFloat::convertToFloat(), llvm::mdconst::dyn_extract(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getSubtarget(), llvm::ConstantFP::getValueAPF(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), MBB, MI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().

isImplicitFallthrough()

lowerBitcasts()

Definition at line 206 of file SPIRVPreLegalizer.cpp.

References assert(), llvm::MachineIRBuilder::buildCopy(), buildOpBitcast(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), MBB, MI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().

processBlockAddr()

Definition at line 892 of file SPIRVPreLegalizer.cpp.

References assert(), llvm::MachineOperand::CreateMBB(), llvm::Constant::destroyConstant(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::BlockAddress::getBasicBlock(), llvm::MachineOperand::getBlockAddress(), llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::Type::getInt32Ty(), llvm::ConstantExpr::getIntToPtr(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineFunction::getRegInfo(), llvm::Value::getType(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::MachineOperand::isBlockAddress(), llvm::isSpvIntrinsic(), MBB, MI, MRI, llvm::Next, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, llvm::Value::replaceAllUsesWith(), llvm::report_fatal_error(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

processInstrsWithTypeFolding()

processSwitchesConstants()

Definition at line 840 of file SPIRVPreLegalizer.cpp.

References assert(), llvm::MachineOperand::CreateCImm(), llvm::MachineOperand::getCImm(), llvm::getDefInstrMaybeConstant(), llvm::MachineInstr::getOperand(), llvm::MachineFunction::getRegInfo(), llvm::isSpvIntrinsic(), MBB, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, and llvm::SmallVectorTemplateCommon< T, typename >::size().

propagateSPIRVType()

Definition at line 302 of file SPIRVPreLegalizer.cpp.

References llvm::addressSpaceToStorageClass(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::SPIRVGlobalRegistry::changePointerStorageClass(), llvm::TypedPointerType::get(), llvm::LLT::getAddressSpace(), llvm::SPIRVGlobalRegistry::getDeducedGlobalValueType(), llvm::MachineIRBuilder::getMF(), llvm::MachineInstr::getOpcode(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVIntegerType(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVVectorType(), llvm::SPIRVGlobalRegistry::getPointerStorageClass(), llvm::SPIRVGlobalRegistry::getRegClass(), llvm::SPIRVGlobalRegistry::getScalarOrVectorBitWidth(), llvm::SPIRVGlobalRegistry::getScalarOrVectorComponentCount(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::Global, llvm::LLT::isPointer(), MI, MRI, propagateSPIRVType(), Reg, llvm::MachineIRBuilder::setInsertPt(), llvm::storageClassToAddressSpace(), and llvm::toTypedPointer().

Referenced by generateAssignInstrs(), and propagateSPIRVType().

removeImplicitFallthroughs()

setInsertPtAfterDef()

widenBitWidthToNextPow2()

widenCImmType()

widenScalarType()