LLVM 19.0.0git
Namespaces | Classes | Typedefs | Enumerations | Functions
llvm::SPIRV Namespace Reference

Lowers a builtin funtion call using the provided DemangledCall skeleton and external instruction Set. More...

Namespaces

namespace  AccessQualifier
 
namespace  AddressingModel
 
namespace  BuiltIn
 
namespace  Capability
 
namespace  Decoration
 
namespace  Dim
 
namespace  ExecutionMode
 
namespace  ExecutionModel
 
namespace  Extension
 
namespace  FPFastMathMode
 
namespace  FPRoundingMode
 
namespace  FunctionControl
 
namespace  FunctionParameterAttribute
 
namespace  GLSLExtInst
 
namespace  GroupOperation
 
namespace  ImageChannelDataType
 
namespace  ImageChannelOrder
 
namespace  ImageFormat
 
namespace  ImageOperand
 
namespace  InstructionSet
 
namespace  KernelEnqueueFlags
 
namespace  KernelProfilingInfo
 
namespace  LinkageType
 
namespace  LoopControl
 
namespace  MemoryModel
 
namespace  MemoryOperand
 
namespace  MemorySemantics
 
namespace  NonSemanticExtInst
 
namespace  Opcode
 
namespace  OpenCLExtInst
 
namespace  OperandCategory
 
namespace  SamplerAddressingMode
 
namespace  SamplerFilterMode
 
namespace  Scope
 
namespace  SelectionControl
 
namespace  SourceLanguage
 
namespace  StorageClass
 

Classes

struct  AtomicFloatingBuiltin
 
struct  BuiltinType
 
struct  CapabilityEntry
 
class  ConvergenceRegion
 
class  ConvergenceRegionAnalyzer
 
class  ConvergenceRegionInfo
 
struct  ConvertBuiltin
 
struct  DemangledBuiltin
 
class  DTSortableEntry
 
struct  ExtendedBuiltin
 
struct  ExtensionEntry
 
struct  GetBuiltin
 
struct  GroupBuiltin
 
struct  GroupUniformBuiltin
 
union  ImageAttrs
 
struct  ImageQueryBuiltin
 
struct  IncomingCall
 
struct  IntelSubgroupsBuiltin
 
struct  ModuleAnalysisInfo
 
struct  NativeBuiltin
 
struct  OpenCLType
 
struct  RequirementHandler
 
struct  Requirements
 
struct  SymbolicOperand
 
struct  VectorLoadStoreBuiltin
 

Typedefs

using SpecialTypeDescriptor = std::tuple< const Type *, unsigned, unsigned >
 
using InstrList = SmallVector< MachineInstr * >
 
using LocalToGlobalRegTable = std::map< Register, Register >
 
using RegisterAliasMapTy = std::map< const MachineFunction *, LocalToGlobalRegTable >
 

Enumerations

enum  SpecialTypeKind {
  STK_Empty = 0 , STK_Image , STK_SampledImage , STK_Sampler ,
  STK_Pipe , STK_DeviceEvent , STK_Pointer , STK_Last = -1
}
 
enum  AsmComments { ASM_PRINTER_WIDTH16 = MachineInstr::TAsmComments }
 
enum  ModuleSectionType {
  MB_EntryPoints , MB_DebugNames , MB_DebugModuleProcessed , MB_Annotations ,
  MB_TypeConstVars , MB_ExtFuncDecls , NUM_MODULE_SECTIONS
}
 

Functions

std::optional< IntrinsicInst * > getConvergenceToken (BasicBlock *BB)
 
std::optional< const IntrinsicInst * > getConvergenceToken (const BasicBlock *BB)
 
ConvergenceRegionInfo getConvergenceRegions (Function &F, DominatorTree &DT, LoopInfo &LI)
 
std::optional< boollowerBuiltin (const StringRef DemangledCall, SPIRV::InstructionSet::InstructionSet Set, MachineIRBuilder &MIRBuilder, const Register OrigRet, const Type *OrigRetTy, const SmallVectorImpl< Register > &Args, SPIRVGlobalRegistry *GR)
 
TypeparseBuiltinCallArgumentBaseType (const StringRef DemangledCall, unsigned ArgIdx, LLVMContext &Ctx)
 Parses the provided ArgIdx argument base type in the DemangledCall skeleton.
 
TargetExtTypeparseBuiltinTypeNameToTargetExtType (std::string TypeName, LLVMContext &Context)
 Translates a string representing a SPIR-V or OpenCL builtin type to a TargetExtType that can be further lowered with lowerBuiltinType().
 
SPIRVTypelowerBuiltinType (const Type *OpaqueType, SPIRV::AccessQualifier::AccessQualifier AccessQual, MachineIRBuilder &MIRBuilder, SPIRVGlobalRegistry *GR)
 
std::optional< boollowerBuiltin (const StringRef DemangledCall, InstructionSet::InstructionSet Set, MachineIRBuilder &MIRBuilder, const Register OrigRet, const Type *OrigRetTy, const SmallVectorImpl< Register > &Args, SPIRVGlobalRegistry *GR)
 Lowers a builtin funtion call using the provided DemangledCall skeleton and external instruction Set.
 
SPIRVTypelowerBuiltinType (const Type *Type, AccessQualifier::AccessQualifier AccessQual, MachineIRBuilder &MIRBuilder, SPIRVGlobalRegistry *GR)
 Handles the translation of the provided special opaque/builtin type Type to SPIR-V type.
 
SpecialTypeDescriptor make_descr_image (const Type *SampledTy, unsigned Dim, unsigned Depth, unsigned Arrayed, unsigned MS, unsigned Sampled, unsigned ImageFormat, unsigned AQ=0)
 
SpecialTypeDescriptor make_descr_sampled_image (const Type *SampledTy, const MachineInstr *ImageTy)
 
SpecialTypeDescriptor make_descr_sampler ()
 
SpecialTypeDescriptor make_descr_pipe (uint8_t AQ)
 
SpecialTypeDescriptor make_descr_event ()
 
SpecialTypeDescriptor make_descr_pointee (const Type *ElementType, unsigned AddressSpace)
 

Detailed Description

Lowers a builtin funtion call using the provided DemangledCall skeleton and external instruction Set.

Typedef Documentation

◆ InstrList

Definition at line 126 of file SPIRVModuleAnalysis.h.

◆ LocalToGlobalRegTable

Definition at line 128 of file SPIRVModuleAnalysis.h.

◆ RegisterAliasMapTy

Definition at line 129 of file SPIRVModuleAnalysis.h.

◆ SpecialTypeDescriptor

Definition at line 66 of file SPIRVDuplicatesTracker.h.

Enumeration Type Documentation

◆ AsmComments

Enumerator
ASM_PRINTER_WIDTH16 

Definition at line 59 of file SPIRVInstrInfo.h.

◆ ModuleSectionType

Enumerator
MB_EntryPoints 
MB_DebugNames 
MB_DebugModuleProcessed 
MB_Annotations 
MB_TypeConstVars 
MB_ExtFuncDecls 
NUM_MODULE_SECTIONS 

Definition at line 32 of file SPIRVModuleAnalysis.h.

◆ SpecialTypeKind

Enumerator
STK_Empty 
STK_Image 
STK_SampledImage 
STK_Sampler 
STK_Pipe 
STK_DeviceEvent 
STK_Pointer 
STK_Last 

Definition at line 55 of file SPIRVDuplicatesTracker.h.

Function Documentation

◆ getConvergenceRegions()

ConvergenceRegionInfo llvm::SPIRV::getConvergenceRegions ( Function F,
DominatorTree DT,
LoopInfo LI 
)

◆ getConvergenceToken() [1/2]

std::optional< IntrinsicInst * > llvm::SPIRV::getConvergenceToken ( BasicBlock BB)

◆ getConvergenceToken() [2/2]

std::optional< const IntrinsicInst * > llvm::SPIRV::getConvergenceToken ( const BasicBlock BB)

Definition at line 119 of file SPIRVConvergenceRegionAnalysis.cpp.

◆ lowerBuiltin() [1/2]

std::optional< bool > llvm::SPIRV::lowerBuiltin ( const StringRef  DemangledCall,
InstructionSet::InstructionSet  Set,
MachineIRBuilder MIRBuilder,
const Register  OrigRet,
const Type OrigRetTy,
const SmallVectorImpl< Register > &  Args,
SPIRVGlobalRegistry GR 
)

Lowers a builtin funtion call using the provided DemangledCall skeleton and external instruction Set.

Returns
the lowering success status if the called function is a recognized builtin, std::nullopt otherwise.

DemangledCall is the skeleton of the lowered builtin function call. Set is the external instruction set containing the given builtin. OrigRet is the single original virtual return register if defined, Register(0) otherwise. OrigRetTy is the type of the OrigRet. Args are the arguments of the lowered builtin call.

◆ lowerBuiltin() [2/2]

std::optional< bool > llvm::SPIRV::lowerBuiltin ( const StringRef  DemangledCall,
SPIRV::InstructionSet::InstructionSet  Set,
MachineIRBuilder MIRBuilder,
const Register  OrigRet,
const Type OrigRetTy,
const SmallVectorImpl< Register > &  Args,
SPIRVGlobalRegistry GR 
)

◆ lowerBuiltinType() [1/2]

SPIRVType * llvm::SPIRV::lowerBuiltinType ( const Type OpaqueType,
SPIRV::AccessQualifier::AccessQualifier  AccessQual,
MachineIRBuilder MIRBuilder,
SPIRVGlobalRegistry GR 
)

◆ lowerBuiltinType() [2/2]

SPIRVType * llvm::SPIRV::lowerBuiltinType ( const Type Type,
AccessQualifier::AccessQualifier  AccessQual,
MachineIRBuilder MIRBuilder,
SPIRVGlobalRegistry GR 
)

Handles the translation of the provided special opaque/builtin type Type to SPIR-V type.

Generates the corresponding machine instructions for the target type or gets the already existing OpType<...> register from the global registry GR.

Returns
A machine instruction representing the OpType<...> SPIR-V type.

Type is the special opaque/builtin type to be lowered.

◆ make_descr_event()

SpecialTypeDescriptor llvm::SPIRV::make_descr_event ( )
inline

◆ make_descr_image()

SpecialTypeDescriptor llvm::SPIRV::make_descr_image ( const Type SampledTy,
unsigned  Dim,
unsigned  Depth,
unsigned  Arrayed,
unsigned  MS,
unsigned  Sampled,
unsigned  ImageFormat,
unsigned  AQ = 0 
)
inline

Definition at line 94 of file SPIRVDuplicatesTracker.h.

References llvm::Depth, and STK_Image.

Referenced by llvm::SPIRVGlobalRegistry::getOrCreateOpTypeImage().

◆ make_descr_pipe()

SpecialTypeDescriptor llvm::SPIRV::make_descr_pipe ( uint8_t  AQ)
inline

Definition at line 121 of file SPIRVDuplicatesTracker.h.

References STK_Pipe.

Referenced by llvm::SPIRVGlobalRegistry::getOrCreateOpTypePipe().

◆ make_descr_pointee()

SpecialTypeDescriptor llvm::SPIRV::make_descr_pointee ( const Type ElementType,
unsigned  AddressSpace 
)
inline

◆ make_descr_sampled_image()

SpecialTypeDescriptor llvm::SPIRV::make_descr_sampled_image ( const Type SampledTy,
const MachineInstr ImageTy 
)
inline

◆ make_descr_sampler()

SpecialTypeDescriptor llvm::SPIRV::make_descr_sampler ( )
inline

◆ parseBuiltinCallArgumentBaseType()

Type * llvm::SPIRV::parseBuiltinCallArgumentBaseType ( const StringRef  DemangledCall,
unsigned  ArgIdx,
LLVMContext Ctx 
)

Parses the provided ArgIdx argument base type in the DemangledCall skeleton.

A base type is either a basic type (e.g. i32 for int), pointer element type (e.g. i8 for char*), or builtin type (TargetExtType).

Returns
LLVM Type or nullptr if unrecognized

DemangledCall is the skeleton of the lowered builtin function call. ArgIdx is the index of the argument to parse.

Definition at line 2481 of file SPIRVBuiltins.cpp.

References assert(), llvm::StringRef::consume_back(), llvm::StringRef::consume_front(), llvm::StringRef::ends_with(), llvm::StringRef::find(), llvm::StringRef::find_first_of(), llvm::VectorType::get(), llvm::StringRef::getAsInteger(), llvm::Type::getInt8Ty(), llvm::hasBuiltinTypePrefix(), llvm::parseBasicTypeName(), parseBuiltinTypeNameToTargetExtType(), llvm::SmallVectorBase< Size_T >::size(), llvm::StringRef::slice(), llvm::StringRef::split(), llvm::StringRef::str(), and llvm::StringRef::substr().

◆ parseBuiltinTypeNameToTargetExtType()

TargetExtType * llvm::SPIRV::parseBuiltinTypeNameToTargetExtType ( std::string  TypeName,
LLVMContext Context 
)

Translates a string representing a SPIR-V or OpenCL builtin type to a TargetExtType that can be further lowered with lowerBuiltinType().

Returns
A TargetExtType representing the builtin SPIR-V type.

TypeName is the full string representation of the SPIR-V or OpenCL builtin type.

Definition at line 2650 of file SPIRVBuiltins.cpp.

References assert(), llvm::StringRef::contains(), llvm::StringRef::find(), llvm::TargetExtType::get(), isDigit(), llvm::parseTypeString(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::report_fatal_error(), llvm::SPIRV::OpenCLType::SpirvTypeLiteral, llvm::StringRef::starts_with(), and llvm::StringRef::substr().

Referenced by llvm::SPIRVGlobalRegistry::getOrCreateSPIRVTypeByName(), lowerBuiltinType(), and parseBuiltinCallArgumentBaseType().