LLVM 23.0.0git
SPIRVPreLegalizer.cpp File Reference
#include "SPIRV.h"
#include "SPIRVSubtarget.h"
#include "SPIRVUtils.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/CodeGen/GlobalISel/CSEInfo.h"
#include "llvm/CodeGen/GlobalISel/GISelValueTracking.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/IntrinsicsSPIRV.h"

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 MachineInstrfindAssignTypeInstr (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 SPIRVTypeInst 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, SPIRVTypeInst SpirvTy, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB, MachineRegisterInfo &MRI)
 Helper external function for assigning a SPIRV type to a register, ensuring the register class and type are set in MRI.
void llvm::processInstr (MachineInstr &MI, MachineIRBuilder &MIB, MachineRegisterInfo &MRI, SPIRVGlobalRegistry *GR, SPIRVTypeInst 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)

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "spirv-prelegalizer"

Definition at line 25 of file SPIRVPreLegalizer.cpp.

Function Documentation

◆ addConstantsToTrack()

◆ buildOpBitcast()

◆ cleanupHelperInstructions()

◆ collectInlineAsmInstrOperands()

◆ convertFloatToSPIRVWord()

uint32_t convertFloatToSPIRVWord ( float F)
static

Definition at line 860 of file SPIRVPreLegalizer.cpp.

References F.

Referenced by insertSpirvDecorations().

◆ findAssignTypeInstr()

◆ foldConstantsIntoIntrinsics()

◆ generateAssignInstrs()

void generateAssignInstrs ( MachineFunction & MF,
SPIRVGlobalRegistry * GR,
MachineIRBuilder MIB,
DenseMap< MachineInstr *, Type * > & TargetExtConstTypes )
static

Definition at line 472 of file SPIRVPreLegalizer.cpp.

References llvm::SPIRVIRMapping::add(), llvm::addressSpaceToStorageClass(), llvm::SPIRVGlobalRegistry::addValueAttrs(), assert(), llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::cast(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), 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::APInt::getLowBitsSet(), llvm::getMDOperandAsType(), llvm::MachineOperand::getMetadata(), llvm::MachineIRBuilder::getMF(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MDNode::getOperand(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(), llvm::MachineRegisterInfo::getRegClassOrNull(), llvm::MachineFunction::getRegInfo(), llvm::LLT::getScalarSizeInBits(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::MachineRegisterInfo::getType(), llvm::Value::getType(), llvm::SPIRVGlobalRegistry::getTypeForSPIRVType(), llvm::getVRegDef(), llvm::MachineRegisterInfo::getVRegDef(), I, llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::LLT::isScalar(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), MBB, MI, llvm::post_order(), propagateSPIRVType(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, llvm::MachineRegisterInfo::replaceRegWith(), llvm::LLT::scalar(), llvm::MachineIRBuilder::setInsertPt(), llvm::MachineRegisterInfo::setType(), llvm::updateRegType(), widenBitWidthToNextPow2(), widenCImmType(), and widenScalarType().

◆ insertBitcasts()

◆ insertInlineAsm()

◆ insertInlineAsmProcess()

◆ insertSpirvDecorations()

◆ isImplicitFallthrough()

bool isImplicitFallthrough ( MachineBasicBlock & MBB)
static

Definition at line 1065 of file SPIRVPreLegalizer.cpp.

References E(), llvm::isSpvIntrinsic(), and MBB.

Referenced by removeImplicitFallthroughs().

◆ lowerBitcasts()

◆ processBlockAddr()

◆ processInstrsWithTypeFolding()

void processInstrsWithTypeFolding ( MachineFunction & MF,
SPIRVGlobalRegistry * GR,
MachineIRBuilder MIB )
static

◆ processSwitchesConstants()

◆ propagateSPIRVType()

◆ removeImplicitFallthroughs()

void removeImplicitFallthroughs ( MachineFunction & MF,
MachineIRBuilder MIB )
static

◆ setInsertPtAfterDef()

void setInsertPtAfterDef ( MachineIRBuilder & MIB,
MachineInstr * Def )
static

Definition at line 421 of file SPIRVPreLegalizer.cpp.

References MBB, and llvm::MachineIRBuilder::setInsertPt().

Referenced by llvm::updateRegType().

◆ widenBitWidthToNextPow2()

unsigned widenBitWidthToNextPow2 ( unsigned BitWidth)
static

◆ widenCImmType()

◆ widenScalarType()