Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.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 selectOpBitcasts (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static void insertBitcasts (MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder MIB)
static SPIRVTypepropagateSPIRVType (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::insertAssignInstr (Register Reg, Type *Ty, SPIRVType *SpirvTy, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB, MachineRegisterInfo &MRI)
 Helper external function for inserting ASSIGN_TYPE instuction between Reg and its definition, set the new register as a destination of the definition, assign SPIRVType to both registers.
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)

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 831 of file SPIRVPreLegalizer.cpp.

References F.

Referenced by insertSpirvDecorations().

◆ findAssignTypeInstr()

MachineInstr * findAssignTypeInstr ( Register Reg,
MachineRegisterInfo * MRI )
static

Definition at line 162 of file SPIRVPreLegalizer.cpp.

References I, llvm::isSpvIntrinsic(), MRI, Reg, and UseMI.

Referenced by insertBitcasts().

◆ foldConstantsIntoIntrinsics()

◆ generateAssignInstrs()

◆ insertBitcasts()

◆ insertInlineAsm()

◆ insertInlineAsmProcess()

◆ insertSpirvDecorations()

◆ isImplicitFallthrough()

bool isImplicitFallthrough ( MachineBasicBlock & MBB)
static

Definition at line 1035 of file SPIRVPreLegalizer.cpp.

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

Referenced by removeImplicitFallthroughs().

◆ processBlockAddr()

◆ processInstrsWithTypeFolding()

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

◆ processSwitchesConstants()

◆ propagateSPIRVType()

◆ removeImplicitFallthroughs()

void removeImplicitFallthroughs ( MachineFunction & MF,
MachineIRBuilder MIB )
static

◆ selectOpBitcasts()

◆ setInsertPtAfterDef()

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

Definition at line 409 of file SPIRVPreLegalizer.cpp.

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

Referenced by llvm::insertAssignInstr().

◆ widenBitWidthToNextPow2()

unsigned widenBitWidthToNextPow2 ( unsigned BitWidth)
static

Definition at line 382 of file SPIRVPreLegalizer.cpp.

References llvm::BitWidth, and llvm::Log2_32_Ceil().

Referenced by widenCImmType(), and widenScalarType().

◆ widenCImmType()

◆ widenScalarType()

void widenScalarType ( Register Reg,
MachineRegisterInfo & MRI )
static