LLVM 23.0.0git
SPIRVPostLegalizer.cpp File Reference
#include "SPIRV.h"
#include "SPIRVSubtarget.h"
#include "SPIRVUtils.h"
#include "llvm/CodeGen/GlobalISel/GenericMachineInstrs.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/IR/IntrinsicsSPIRV.h"
#include "llvm/Support/Debug.h"
#include <stack>

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-postlegalizer"

Functions

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 SPIRVTypeInst deduceIntTypeFromResult (Register ResVReg, MachineIRBuilder &MIB, SPIRVGlobalRegistry *GR)
static SPIRVTypeInst deduceTypeFromSingleOperand (MachineInstr *I, MachineIRBuilder &MIB, SPIRVGlobalRegistry *GR, unsigned OpIdx)
static SPIRVTypeInst deduceTypeFromOperandRange (MachineInstr *I, MachineIRBuilder &MIB, SPIRVGlobalRegistry *GR, unsigned StartOp, unsigned EndOp)
static SPIRVTypeInst deduceTypeFromResultRegister (MachineInstr *Use, Register UseRegister, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static SPIRVTypeInst deducePointerTypeFromResultRegister (MachineInstr *Use, Register UseRegister, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static SPIRVTypeInst deduceTypeFromPointerOperand (MachineInstr *Use, Register UseRegister, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static SPIRVTypeInst deduceTypeFromUses (Register Reg, MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static SPIRVTypeInst deduceGEPType (MachineInstr *I, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static SPIRVTypeInst deduceResultTypeFromOperands (MachineInstr *I, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static bool deduceAndAssignTypeForGUnmerge (MachineInstr *I, MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static bool deduceAndAssignSpirvType (MachineInstr *I, MachineFunction &MF, SPIRVGlobalRegistry *GR, MachineIRBuilder &MIB)
static bool requiresSpirvType (MachineInstr &I, SPIRVGlobalRegistry *GR, MachineRegisterInfo &MRI)
static void registerSpirvTypeForNewInstructions (MachineFunction &MF, SPIRVGlobalRegistry *GR)
static bool hasAssignType (Register Reg, MachineRegisterInfo &MRI)
static void generateAssignType (MachineInstr &MI, Register ResultRegister, SPIRVTypeInst ResultType, SPIRVGlobalRegistry *GR, MachineRegisterInfo &MRI)
static void ensureAssignTypeForTypeFolding (MachineFunction &MF, SPIRVGlobalRegistry *GR)

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "spirv-postlegalizer"

Definition at line 25 of file SPIRVPostLegalizer.cpp.

Function Documentation

◆ deduceAndAssignSpirvType()

◆ deduceAndAssignTypeForGUnmerge()

◆ deduceGEPType()

◆ deduceIntTypeFromResult()

◆ deducePointerTypeFromResultRegister()

SPIRVTypeInst deducePointerTypeFromResultRegister ( MachineInstr * Use,
Register UseRegister,
SPIRVGlobalRegistry * GR,
MachineIRBuilder & MIB )
static

◆ deduceResultTypeFromOperands()

◆ deduceTypeFromOperandRange()

SPIRVTypeInst deduceTypeFromOperandRange ( MachineInstr * I,
MachineIRBuilder & MIB,
SPIRVGlobalRegistry * GR,
unsigned StartOp,
unsigned EndOp )
static

Definition at line 73 of file SPIRVPostLegalizer.cpp.

References assert(), deduceTypeFromSingleOperand(), and I.

Referenced by deduceResultTypeFromOperands().

◆ deduceTypeFromPointerOperand()

SPIRVTypeInst deduceTypeFromPointerOperand ( MachineInstr * Use,
Register UseRegister,
SPIRVGlobalRegistry * GR,
MachineIRBuilder & MIB )
static

◆ deduceTypeFromResultRegister()

◆ deduceTypeFromSingleOperand()

◆ deduceTypeFromUses()

◆ ensureAssignTypeForTypeFolding()

◆ generateAssignType()

◆ hasAssignType()

bool hasAssignType ( Register Reg,
MachineRegisterInfo & MRI )
static

Definition at line 471 of file SPIRVPostLegalizer.cpp.

References MRI, and Reg.

Referenced by ensureAssignTypeForTypeFolding().

◆ registerSpirvTypeForNewInstructions()

◆ requiresSpirvType()