MLIR  18.0.0git
Namespaces | Classes | Typedefs | Functions | Variables
mlir::spirv Namespace Reference

Namespaces

 AttrNames
 
 detail
 

Classes

class  MemorySpaceToStorageClassConverter
 Type converter for converting numeric MemRef memory spaces into SPIR-V symbolic ones. More...
 
class  InterfaceVarABIAttr
 An attribute that specifies the information regarding the interface variable: descriptor set, binding, storage class. More...
 
class  VerCapExtAttr
 An attribute that specifies the SPIR-V (version, capabilities, extensions) triple. More...
 
class  TargetEnvAttr
 An attribute that specifies the target version, allowed extensions and capabilities, and resource limits. More...
 
class  SPIRVType
 
class  ScalarType
 
class  CompositeType
 
class  ArrayType
 
class  ImageType
 
class  PointerType
 
class  RuntimeArrayType
 
class  SampledImageType
 
class  StructType
 SPIR-V struct type. More...
 
class  CooperativeMatrixType
 
class  CooperativeMatrixNVType
 
class  JointMatrixINTELType
 
class  MatrixType
 
class  TargetEnv
 A wrapper class around a spirv::TargetEnvAttr to provide query methods for allowed version/capabilities/extensions. More...
 
struct  SerializationOptions
 
struct  ElementwiseOpPattern
 Converts elementwise unary, binary and ternary standard operations to SPIR-V operations. More...
 
struct  BlockMergeInfo
 A struct for containing a header block's merge and continue targets. More...
 
struct  DebugLine
 A struct for containing OpLine instruction information. More...
 
struct  DeferredStructTypeInfo
 A "deferred struct type" is a struct type with one or more member types not known when the Deserializer first encounters the struct. More...
 
struct  SpecConstOperationMaterializationInfo
 A struct that collects the info needed to materialize/emit a SpecConstantOperation op. More...
 
class  Deserializer
 A SPIR-V module serializer. More...
 
class  Serializer
 A SPIR-V module serializer. More...
 

Typedefs

using MemorySpaceToStorageClassMap = std::function< std::optional< spirv::StorageClass >(Attribute)>
 Mapping from numeric MemRef memory spaces into SPIR-V symbolic ones. More...
 
using SymbolRenameListener = function_ref< void(spirv::ModuleOp originalModule, StringRef oldSymbol, StringRef newSymbol)>
 The listener function to receive symbol renaming events. More...
 
using GetTargetEnvFn = std::function< spirv::TargetEnvAttr(spirv::ModuleOp)>
 Creates an operation pass that unifies access of multiple aliased resources into access of one single resource. More...
 
using BlockMergeInfoMap = DenseMap< Block *, BlockMergeInfo >
 Map from a selection/loop's header block to its merge (and continue) target. More...
 

Functions

std::optional< spirv::StorageClass > mapMemorySpaceToVulkanStorageClass (Attribute)
 Maps MemRef memory spaces to storage classes for Vulkan-flavored SPIR-V using the default rule. More...
 
std::optional< unsigned > mapVulkanStorageClassToMemorySpace (spirv::StorageClass)
 Maps storage classes for Vulkan-flavored SPIR-V to MemRef memory spaces using the default rule. More...
 
std::optional< spirv::StorageClass > mapMemorySpaceToOpenCLStorageClass (Attribute)
 Maps MemRef memory spaces to storage classes for OpenCL-flavored SPIR-V using the default rule. More...
 
std::optional< unsigned > mapOpenCLStorageClassToMemorySpace (spirv::StorageClass)
 Maps storage classes for OpenCL-flavored SPIR-V to MemRef memory spaces using the default rule. More...
 
std::unique_ptr< ConversionTargetgetMemorySpaceToStorageClassTarget (MLIRContext &)
 Creates the target that populates legality of ops with MemRef types. More...
 
void populateMemorySpaceToStorageClassPatterns (MemorySpaceToStorageClassConverter &typeConverter, RewritePatternSet &patterns)
 Appends to a pattern list additional patterns for converting numeric MemRef memory spaces into SPIR-V symbolic ones. More...
 
ArrayRef< Extension > getImpliedExtensions (Version version)
 Returns the implied extensions for the given version. More...
 
ArrayRef< Capability > getDirectImpliedCapabilities (Capability cap)
 Returns the directly implied capabilities for the given capability. More...
 
SmallVector< Capability, 0 > getRecursiveImpliedCapabilities (Capability cap)
 Returns the recursively implied capabilities for the given capability. More...
 
void populateSPIRVGLCanonicalizationPatterns (RewritePatternSet &results)
 Populates patterns to run canoncalization that involves GL ops. More...
 
llvm::hash_code hash_value (const StructType::MemberDecorationInfo &memberDecorationInfo)
 
StringRef getInterfaceVarABIAttrName ()
 Returns the attribute name for specifying argument ABI information. More...
 
InterfaceVarABIAttr getInterfaceVarABIAttr (unsigned descriptorSet, unsigned binding, std::optional< StorageClass > storageClass, MLIRContext *context)
 Gets the InterfaceVarABIAttr given its fields. More...
 
bool needsInterfaceVarABIAttrs (TargetEnvAttr targetAttr)
 Returns whether the given SPIR-V target (described by TargetEnvAttr) needs ABI attributes for interface variables (spirv.interface_var_abi). More...
 
StringRef getEntryPointABIAttrName ()
 Returns the attribute name for specifying entry point information. More...
 
EntryPointABIAttr getEntryPointABIAttr (MLIRContext *context, ArrayRef< int32_t > workgroupSize={}, std::optional< int > subgroupSize={})
 Gets the EntryPointABIAttr given its fields. More...
 
EntryPointABIAttr lookupEntryPointABI (Operation *op)
 Queries the entry point ABI on the nearest function-like op containing the given op. More...
 
DenseI32ArrayAttr lookupLocalWorkGroupSize (Operation *op)
 Queries the local workgroup size from entry point ABI on the nearest function-like op containing the given op. More...
 
ResourceLimitsAttr getDefaultResourceLimits (MLIRContext *context)
 Returns a default resource limits attribute that uses numbers from "Table 46. Required Limits" of the Vulkan spec. More...
 
StringRef getTargetEnvAttrName ()
 Returns the attribute name for specifying SPIR-V target environment. More...
 
TargetEnvAttr getDefaultTargetEnv (MLIRContext *context)
 Returns the default target environment: SPIR-V 1.0 with Shader capability and no extra extensions. More...
 
TargetEnvAttr lookupTargetEnv (Operation *op)
 Queries the target environment recursively from enclosing symbol table ops containing the given op. More...
 
TargetEnvAttr lookupTargetEnvOrDefault (Operation *op)
 Queries the target environment recursively from enclosing symbol table ops containing the given op or returns the default target environment as returned by getDefaultTargetEnv() if not provided. More...
 
AddressingModel getAddressingModel (TargetEnvAttr targetAttr, bool use64bitAddress)
 Returns addressing model selected based on target environment. More...
 
FailureOr< ExecutionModel > getExecutionModel (TargetEnvAttr targetAttr)
 Returns execution model selected based on target environment. More...
 
FailureOr< MemoryModel > getMemoryModel (TargetEnvAttr targetAttr)
 Returns memory model selected based on target environment. More...
 
OwningOpRef< spirv::ModuleOp > combine (ArrayRef< spirv::ModuleOp > inputModules, OpBuilder &combinedModuleBuilder, SymbolRenameListener symRenameListener)
 Combines a list of SPIR-V inputModules into one. More...
 
std::unique_ptr< OperationPass< spirv::ModuleOp > > createUnifyAliasedResourcePass (GetTargetEnvFn getTargetEnv=nullptr)
 
Value getBuiltinVariableValue (Operation *op, BuiltIn builtin, Type integerType, OpBuilder &builder, StringRef prefix="__builtin__", StringRef suffix="__")
 Returns the value for the given builtin variable. More...
 
Value getPushConstantValue (Operation *op, unsigned elementCount, unsigned offset, Type integerType, OpBuilder &builder)
 Gets the value at the given offset of the push constant storage with a total of elementCount integerType integers. More...
 
Value linearizeIndex (ValueRange indices, ArrayRef< int64_t > strides, int64_t offset, Type integerType, Location loc, OpBuilder &builder)
 Generates IR to perform index linearization with the given indices and their corresponding strides, adding an initial offset. More...
 
Value getElementPtr (const SPIRVTypeConverter &typeConverter, MemRefType baseType, Value basePtr, ValueRange indices, Location loc, OpBuilder &builder)
 Performs the index computation to get to the element at indices of the memory pointed to by basePtr, using the layout map of baseType. More...
 
Value getOpenCLElementPtr (const SPIRVTypeConverter &typeConverter, MemRefType baseType, Value basePtr, ValueRange indices, Location loc, OpBuilder &builder)
 
Value getVulkanElementPtr (const SPIRVTypeConverter &typeConverter, MemRefType baseType, Value basePtr, ValueRange indices, Location loc, OpBuilder &builder)
 
void populateSPIRVExpandExtendedMultiplicationPatterns (RewritePatternSet &patterns)
 Appends to a pattern list additional patterns to expand extended multiplication ops into regular arithmetic ops. More...
 
OwningOpRef< spirv::ModuleOp > deserialize (ArrayRef< uint32_t > binary, MLIRContext *context)
 Deserializes the given SPIR-V binary module and creates a MLIR ModuleOp in the given context. More...
 
LogicalResult serialize (ModuleOp module, SmallVectorImpl< uint32_t > &binary, const SerializationOptions &options={})
 Serializes the given SPIR-V module and writes to binary. More...
 
void appendModuleHeader (SmallVectorImpl< uint32_t > &header, spirv::Version version, uint32_t idBound)
 Appends a SPRI-V module header to header with the given version and idBound. More...
 
uint32_t getPrefixedOpcode (uint32_t wordCount, spirv::Opcode opcode)
 Returns the word-count-prefixed opcode for an SPIR-V instruction. More...
 
void encodeStringLiteralInto (SmallVectorImpl< uint32_t > &binary, StringRef literal)
 Encodes an SPIR-V literal string into the given binary vector. More...
 
StringRef decodeStringLiteral (ArrayRef< uint32_t > words, unsigned &wordIndex)
 Decodes a string literal in words starting at wordIndex. More...
 
static ParseResult parseAtomicUpdateOp (OpAsmParser &parser, OperationState &state, bool hasValue)
 
static void printAtomicUpdateOp (Operation *op, OpAsmPrinter &printer)
 
template<typename T >
static StringRef stringifyTypeName ()
 
template<>
StringRef stringifyTypeName< IntegerType > ()
 
template<>
StringRef stringifyTypeName< FloatType > ()
 
template<typename ExpectedElementType >
static LogicalResult verifyAtomicUpdateOp (Operation *op)
 
template<typename T >
static void printAtomicCompareExchangeImpl (T atomOp, OpAsmPrinter &printer)
 
static ParseResult parseAtomicCompareExchangeImpl (OpAsmParser &parser, OperationState &state)
 
template<typename T >
static LogicalResult verifyAtomicCompareExchangeImpl (T atomOp)
 
static LogicalResult verifyCastOp (Operation *op, bool requireSameBitWidth=true, bool skipBitWidthCheck=false)
 
template<typename EnumAttrClass , typename EnumClass >
static ParseResult parseControlAttribute (OpAsmParser &parser, OperationState &state, StringRef attrName=spirv::attributeName< EnumClass >())
 Parses Function, Selection and Loop control attributes. More...
 
static bool hasOneBranchOpTo (Block &srcBlock, Block &dstBlock)
 Returns true if the given srcBlock contains only one spirv.Branch to the given dstBlock. More...
 
static bool isMergeBlock (Block &block)
 Returns true if the given block only contains one spirv.mlir.merge op. More...
 
static LogicalResult verifyCoopMatrixAccess (Operation *op, Type pointer, Type coopMatrix, spirv::MemoryAccessAttr memoryOperand)
 
static LogicalResult verifyPointerAndCoopMatrixNVType (Operation *op, Type pointer, Type coopMatrix)
 
static LogicalResult verifyCoopMatrixMulAddNV (NVCooperativeMatrixMulAddOp op)
 
static ParseResult parseGroupNonUniformArithmeticOp (OpAsmParser &parser, OperationState &state)
 
static void printGroupNonUniformArithmeticOp (Operation *groupOp, OpAsmPrinter &printer)
 
static LogicalResult verifyGroupNonUniformArithmeticOp (Operation *groupOp)
 
template<typename OpTy >
static LogicalResult verifyGroupNonUniformShuffleOp (OpTy op)
 
template<typename Op >
static LogicalResult verifyGroupOp (Op op)
 
static LogicalResult verifyIntegerDotProduct (Operation *op)
 
static std::optional< spirv::Version > getIntegerDotProductMinVersion ()
 
static std::optional< spirv::Version > getIntegerDotProductMaxVersion ()
 
static SmallVector< ArrayRef< spirv::Extension >, 1 > getIntegerDotProductExtensions ()
 
static SmallVector< ArrayRef< spirv::Capability >, 1 > getIntegerDotProductCapabilities (Operation *op)
 
static ParseResult parseSourceMemoryAccessAttributes (OpAsmParser &parser, OperationState &state)
 
template<typename MemoryOpTy >
static void printSourceMemoryAccessAttribute (MemoryOpTy memoryOp, OpAsmPrinter &printer, SmallVectorImpl< StringRef > &elidedAttrs, std::optional< spirv::MemoryAccess > memoryAccessAtrrValue=std::nullopt, std::optional< uint32_t > alignmentAttrValue=std::nullopt)
 
template<typename MemoryOpTy >
static void printMemoryAccessAttribute (MemoryOpTy memoryOp, OpAsmPrinter &printer, SmallVectorImpl< StringRef > &elidedAttrs, std::optional< spirv::MemoryAccess > memoryAccessAtrrValue=std::nullopt, std::optional< uint32_t > alignmentAttrValue=std::nullopt)
 
template<typename LoadStoreOpTy >
static LogicalResult verifyLoadStorePtrAndValTypes (LoadStoreOpTy op, Value ptr, Value val)
 
template<typename MemoryOpTy >
static LogicalResult verifyMemoryAccessAttribute (MemoryOpTy memoryOp)
 
template<typename MemoryOpTy >
static LogicalResult verifySourceMemoryAccessAttribute (MemoryOpTy memoryOp)
 
static Type getElementPtrType (Type type, ValueRange indices, Location baseLoc)
 
template<typename Op >
static void printAccessChain (Op op, ValueRange indices, OpAsmPrinter &printer)
 
template<typename Op >
static LogicalResult verifyAccessChain (Op accessChainOp, ValueRange indices)
 
static ParseResult parsePtrAccessChainOpImpl (StringRef opName, OpAsmParser &parser, OperationState &state)
 
template<typename Op >
static auto concatElemAndIndices (Op op)
 
static bool isNestedInFunctionOpInterface (Operation *op)
 Returns true if the given op is a function-like op or nested in a function-like op without a module-like op in the middle. More...
 
static bool isDirectInModuleLikeOp (Operation *op)
 Returns true if the given op is an module-like op that maintains a symbol table. More...
 
static Type getUnaryOpResultType (Type operandType)
 Result of a logical op must be a scalar or vector of boolean type. More...
 
static ParseResult parseImageOperands (OpAsmParser &parser, spirv::ImageOperandsAttr &attr)
 
static void printImageOperands (OpAsmPrinter &printer, Operation *imageOp, spirv::ImageOperandsAttr attr)
 
unsigned getBitWidth (Type type)
 Returns the bit width of the type. More...
 
void printVariableDecorations (Operation *op, OpAsmPrinter &printer, SmallVectorImpl< StringRef > &elidedAttrs)
 
LogicalResult extractValueFromConstOp (Operation *op, int32_t &value)
 
LogicalResult verifyMemorySemantics (Operation *op, spirv::MemorySemantics memorySemantics)
 
ParseResult parseMemoryAccessAttributes (OpAsmParser &parser, OperationState &state, StringRef attrName=AttrNames::kMemoryAccessAttrName)
 Parses optional memory access (a.k.a. More...
 
ParseResult parseVariableDecorations (OpAsmParser &parser, OperationState &state)
 
template<typename Ty >
ArrayAttr getStrArrayAttrForEnumList (Builder &builder, ArrayRef< Ty > enumValues, function_ref< StringRef(Ty)> stringifyFn)
 
template<typename EnumClass , typename ParserType >
ParseResult parseEnumKeywordAttr (EnumClass &value, ParserType &parser, StringRef attrName=spirv::attributeName< EnumClass >())
 Parses the next keyword in parser as an enumerant of the given EnumClass. More...
 
template<typename EnumClass >
ParseResult parseEnumStrAttr (EnumClass &value, OpAsmParser &parser, StringRef attrName=spirv::attributeName< EnumClass >())
 Parses the next string attribute in parser as an enumerant of the given EnumClass. More...
 
template<typename EnumAttrClass , typename EnumClass = typename EnumAttrClass::ValueType>
ParseResult parseEnumStrAttr (EnumClass &value, OpAsmParser &parser, OperationState &state, StringRef attrName=spirv::attributeName< EnumClass >())
 Parses the next string attribute in parser as an enumerant of the given EnumClass and inserts the enumerant into state as an 32-bit integer attribute with the enum class's name as attribute name. More...
 
template<typename EnumAttrClass , typename EnumClass = typename EnumAttrClass::ValueType>
ParseResult parseEnumKeywordAttr (EnumClass &value, OpAsmParser &parser, OperationState &state, StringRef attrName=spirv::attributeName< EnumClass >())
 Parses the next keyword in parser as an enumerant of the given EnumClass and inserts the enumerant into state as an 32-bit integer attribute with the enum class's name as attribute name. More...
 
template<>
LogicalResult Deserializer::processOp< spirv::EntryPointOp > (ArrayRef< uint32_t > words)
 
template<>
LogicalResult Deserializer::processOp< spirv::ExecutionModeOp > (ArrayRef< uint32_t > words)
 
template<>
LogicalResult Deserializer::processOp< spirv::FunctionCallOp > (ArrayRef< uint32_t > operands)
 
template<>
LogicalResult Deserializer::processOp< spirv::CopyMemoryOp > (ArrayRef< uint32_t > words)
 
template<>
LogicalResult Deserializer::processOp< spirv::GenericCastToPtrExplicitOp > (ArrayRef< uint32_t > words)
 
template<>
LogicalResult Serializer::processOp< spirv::EntryPointOp > (spirv::EntryPointOp op)
 
template<>
LogicalResult Serializer::processOp< spirv::ExecutionModeOp > (spirv::ExecutionModeOp op)
 
template<>
LogicalResult Serializer::processOp< spirv::FunctionCallOp > (spirv::FunctionCallOp op)
 
template<>
LogicalResult Serializer::processOp< spirv::CopyMemoryOp > (spirv::CopyMemoryOp op)
 
template<>
LogicalResult Serializer::processOp< spirv::GenericCastToPtrExplicitOp > (spirv::GenericCastToPtrExplicitOp op)
 
void encodeInstructionInto (SmallVectorImpl< uint32_t > &binary, spirv::Opcode op, ArrayRef< uint32_t > operands)
 Encodes an SPIR-V instruction with the given opcode and operands into the given binary vector. More...
 
template<>
LogicalResult Serializer::processTypeDecoration< spirv::ArrayType > (Location loc, spirv::ArrayType type, uint32_t resultID)
 
template<>
LogicalResult Serializer::processTypeDecoration< spirv::RuntimeArrayType > (Location loc, spirv::RuntimeArrayType type, uint32_t resultID)
 

Variables

constexpr unsigned kHeaderWordCount = 5
 SPIR-V binary header word count. More...
 
constexpr uint32_t kMagicNumber = 0x07230203
 SPIR-V magic number. More...
 
constexpr uint32_t kGeneratorNumber = 22
 The serializer tool ID registered to the Khronos Group. More...
 

Typedef Documentation

◆ BlockMergeInfoMap

Map from a selection/loop's header block to its merge (and continue) target.

Definition at line 60 of file Deserializer.h.

◆ GetTargetEnvFn

using mlir::spirv::GetTargetEnvFn = typedef std::function<spirv::TargetEnvAttr(spirv::ModuleOp)>

Creates an operation pass that unifies access of multiple aliased resources into access of one single resource.

Definition at line 36 of file Passes.h.

◆ MemorySpaceToStorageClassMap

using mlir::spirv::MemorySpaceToStorageClassMap = typedef std::function<std::optional<spirv::StorageClass>(Attribute)>

Mapping from numeric MemRef memory spaces into SPIR-V symbolic ones.

Definition at line 25 of file MemRefToSPIRV.h.

◆ SymbolRenameListener

using mlir::spirv::SymbolRenameListener = typedef function_ref<void( spirv::ModuleOp originalModule, StringRef oldSymbol, StringRef newSymbol)>

The listener function to receive symbol renaming events.

originalModule is the input spirv::ModuleOp that contains the renamed symbol. oldSymbol and newSymbol are the original and renamed symbol. Note that it's the responsibility of the caller to properly retain the storage underlying the passed StringRefs if the listener callback outlives this function call.

Definition at line 32 of file ModuleCombiner.h.

Function Documentation

◆ appendModuleHeader()

void mlir::spirv::appendModuleHeader ( SmallVectorImpl< uint32_t > &  header,
spirv::Version  version,
uint32_t  idBound 
)

Appends a SPRI-V module header to header with the given version and idBound.

Definition at line 18 of file SPIRVBinaryUtils.cpp.

References kGeneratorNumber, kMagicNumber, and MIN_VERSION_CASE.

Referenced by mlir::spirv::Serializer::collect().

◆ combine()

OwningOpRef< spirv::ModuleOp > mlir::spirv::combine ( ArrayRef< spirv::ModuleOp >  inputModules,
OpBuilder combinedModuleBuilder,
SymbolRenameListener  symRenameListener 
)

Combines a list of SPIR-V inputModules into one.

Returns the combined module on success; returns a null module otherwise.

Parameters
inputModulesthe list of modules to combine. They won't be modified.
combinedMdouleBuilderan OpBuilder for building the combined module.
symbRenameListenera listener that gets called everytime a symbol in one of the input modules is renamed.

To combine multiple SPIR-V modules, we move all the module-level ops from all the input modules into one big combined module. To that end, the combination process proceeds in 2 phases:

  1. resolve conflicts between pairs of ops from different modules,
  2. deduplicate equivalent ops/sub-ops in the merged module.

For the conflict resolution phase, the following rules are employed to resolve such conflicts:

  • If 2 spirv.func's have the same symbol name, then rename one of the functions.
  • If an spirv.func and another op have the same symbol name, then rename the other symbol.
  • If none of the 2 conflicting ops are spirv.func, then rename either.

For deduplication, the following 3 cases are taken into consideration:

  • If 2 spirv.GlobalVariable's have either the same descriptor set + binding or the same build_in attribute value, then replace one of them using the other.
  • If 2 spirv.SpecConstant's have the same spec_id attribute value, then replace one of them using the other.
  • Deduplicating functions are not supported right now.

In all cases, the references to the updated symbol (whether renamed or deduplicated) are also updated to reflect the change.

Definition at line 90 of file ModuleCombiner.cpp.

References mlir::OpBuilder::create(), and mlir::OpBuilder::setInsertionPointToStart().

◆ concatElemAndIndices()

template<typename Op >
static auto mlir::spirv::concatElemAndIndices ( Op  op)
static

Definition at line 593 of file MemoryOps.cpp.

◆ createUnifyAliasedResourcePass()

std::unique_ptr< mlir::OperationPass< spirv::ModuleOp > > mlir::spirv::createUnifyAliasedResourcePass ( spirv::GetTargetEnvFn  getTargetEnv = nullptr)

Definition at line 627 of file UnifyAliasedResourcePass.cpp.

◆ decodeStringLiteral()

StringRef mlir::spirv::decodeStringLiteral ( ArrayRef< uint32_t >  words,
unsigned &  wordIndex 
)
inline

Decodes a string literal in words starting at wordIndex.

Update the latter to point to the position in words after the string literal.

Definition at line 47 of file SPIRVBinaryUtils.h.

Referenced by Deserializer::processOp< spirv::EntryPointOp >().

◆ deserialize()

OwningOpRef< spirv::ModuleOp > mlir::spirv::deserialize ( ArrayRef< uint32_t >  binary,
MLIRContext context 
)

Deserializes the given SPIR-V binary module and creates a MLIR ModuleOp in the given context.

Returns the ModuleOp on success; otherwise, reports errors to the error handler registered with context and returns a null module.

Definition at line 15 of file Deserialization.cpp.

References mlir::spirv::Deserializer::collect(), mlir::spirv::Deserializer::deserialize(), and mlir::failed().

Referenced by deserializeModule(), and roundTripModule().

◆ Deserializer::processOp< spirv::CopyMemoryOp >()

template<>
LogicalResult mlir::spirv::Deserializer::processOp< spirv::CopyMemoryOp > ( ArrayRef< uint32_t >  words)

Definition at line 456 of file DeserializeOps.cpp.

References mlir::emitError(), and mlir::success().

◆ Deserializer::processOp< spirv::EntryPointOp >()

template<>
LogicalResult mlir::spirv::Deserializer::processOp< spirv::EntryPointOp > ( ArrayRef< uint32_t >  words)

◆ Deserializer::processOp< spirv::ExecutionModeOp >()

template<>
LogicalResult mlir::spirv::Deserializer::processOp< spirv::ExecutionModeOp > ( ArrayRef< uint32_t >  words)

Definition at line 381 of file DeserializeOps.cpp.

References mlir::emitError(), mlir::get(), and mlir::success().

◆ Deserializer::processOp< spirv::FunctionCallOp >()

template<>
LogicalResult mlir::spirv::Deserializer::processOp< spirv::FunctionCallOp > ( ArrayRef< uint32_t >  operands)

Definition at line 414 of file DeserializeOps.cpp.

References mlir::emitError(), mlir::get(), and mlir::success().

◆ Deserializer::processOp< spirv::GenericCastToPtrExplicitOp >()

template<>
LogicalResult mlir::spirv::Deserializer::processOp< spirv::GenericCastToPtrExplicitOp > ( ArrayRef< uint32_t >  words)

Definition at line 528 of file DeserializeOps.cpp.

References mlir::emitError().

◆ encodeInstructionInto()

void mlir::spirv::encodeInstructionInto ( SmallVectorImpl< uint32_t > &  binary,
spirv::Opcode  op,
ArrayRef< uint32_t >  operands 
)

Encodes an SPIR-V instruction with the given opcode and operands into the given binary vector.

Definition at line 78 of file Serializer.cpp.

◆ encodeStringLiteralInto()

void mlir::spirv::encodeStringLiteralInto ( SmallVectorImpl< uint32_t > &  binary,
StringRef  literal 
)

Encodes an SPIR-V literal string into the given binary vector.

Definition at line 66 of file SPIRVBinaryUtils.cpp.

◆ extractValueFromConstOp()

LogicalResult mlir::spirv::extractValueFromConstOp ( Operation op,
int32_t &  value 
)

Definition at line 51 of file SPIRVOps.cpp.

Referenced by verifyGroupNonUniformArithmeticOp().

◆ getAddressingModel()

spirv::AddressingModel mlir::spirv::getAddressingModel ( spirv::TargetEnvAttr  targetAttr,
bool  use64bitAddress 
)

Returns addressing model selected based on target environment.

Definition at line 209 of file TargetAndABI.cpp.

References mlir::spirv::TargetEnvAttr::getCapabilities().

◆ getBitWidth()

unsigned mlir::spirv::getBitWidth ( Type  type)
inline

Returns the bit width of the type.

Definition at line 14 of file SPIRVOpUtils.h.

References mlir::Type::getIntOrFloatBitWidth(), and mlir::Type::isIntOrFloat().

◆ getBuiltinVariableValue()

Value mlir::spirv::getBuiltinVariableValue ( Operation op,
BuiltIn  builtin,
Type  integerType,
OpBuilder builder,
StringRef  prefix = "__builtin__",
StringRef  suffix = "__" 
)

Returns the value for the given builtin variable.

This function gets or inserts the global variable associated for the builtin within the nearest symbol table enclosing op. Returns null Value on error.

The global name being generated will be mangled using preffix and suffix.

◆ getDefaultResourceLimits()

spirv::ResourceLimitsAttr mlir::spirv::getDefaultResourceLimits ( MLIRContext context)

Returns a default resource limits attribute that uses numbers from "Table 46. Required Limits" of the Vulkan spec.

Definition at line 157 of file TargetAndABI.cpp.

References mlir::get(), and mlir::Builder::getI32ArrayAttr().

Referenced by getDefaultTargetEnv().

◆ getDefaultTargetEnv()

spirv::TargetEnvAttr mlir::spirv::getDefaultTargetEnv ( MLIRContext context)

Returns the default target environment: SPIR-V 1.0 with Shader capability and no extra extensions.

Definition at line 175 of file TargetAndABI.cpp.

References mlir::spirv::TargetEnvAttr::get(), mlir::spirv::VerCapExtAttr::get(), getDefaultResourceLimits(), and mlir::spirv::TargetEnvAttr::kUnknownDeviceID.

◆ getDirectImpliedCapabilities()

ArrayRef<Capability> mlir::spirv::getDirectImpliedCapabilities ( Capability  cap)

Returns the directly implied capabilities for the given capability.

These capabilities are implicitly declared by the given capability.

◆ getElementPtr()

Value mlir::spirv::getElementPtr ( const SPIRVTypeConverter typeConverter,
MemRefType  baseType,
Value  basePtr,
ValueRange  indices,
Location  loc,
OpBuilder builder 
)

Performs the index computation to get to the element at indices of the memory pointed to by basePtr, using the layout map of baseType.

Returns null if index computation cannot be performed.

Definition at line 1061 of file SPIRVConversion.cpp.

References mlir::SPIRVTypeConverter::allows(), getOpenCLElementPtr(), and getVulkanElementPtr().

◆ getElementPtrType()

static Type mlir::spirv::getElementPtrType ( Type  type,
ValueRange  indices,
Location  baseLoc 
)
static

Definition at line 217 of file MemoryOps.cpp.

References mlir::emitError().

Referenced by verifyAccessChain().

◆ getEntryPointABIAttr()

spirv::EntryPointABIAttr mlir::spirv::getEntryPointABIAttr ( MLIRContext context,
ArrayRef< int32_t >  workgroupSize = {},
std::optional< int >  subgroupSize = {} 
)

Gets the EntryPointABIAttr given its fields.

Definition at line 124 of file TargetAndABI.cpp.

References mlir::detail::DenseArrayAttrImpl< int32_t >::get(), and mlir::get().

◆ getEntryPointABIAttrName()

StringRef mlir::spirv::getEntryPointABIAttrName ( )

Returns the attribute name for specifying entry point information.

Definition at line 121 of file TargetAndABI.cpp.

Referenced by lowerAsEntryFunction(), and lowerEntryPointABIAttr().

◆ getExecutionModel()

FailureOr< spirv::ExecutionModel > mlir::spirv::getExecutionModel ( spirv::TargetEnvAttr  targetAttr)

Returns execution model selected based on target environment.

Returns failure if it cannot be selected.

Definition at line 226 of file TargetAndABI.cpp.

References mlir::failure(), and mlir::spirv::TargetEnvAttr::getCapabilities().

Referenced by lowerEntryPointABIAttr().

◆ getImpliedExtensions()

ArrayRef<Extension> mlir::spirv::getImpliedExtensions ( Version  version)

Returns the implied extensions for the given version.

These extensions are incorporated into the current version so they are implicitly declared when targeting the given version.

Referenced by mlir::spirv::TargetEnv::TargetEnv().

◆ getIntegerDotProductCapabilities()

static SmallVector<ArrayRef<spirv::Capability>, 1> mlir::spirv::getIntegerDotProductCapabilities ( Operation op)
static

Definition at line 100 of file IntegerDotProductOps.cpp.

◆ getIntegerDotProductExtensions()

static SmallVector<ArrayRef<spirv::Extension>, 1> mlir::spirv::getIntegerDotProductExtensions ( )
static

Definition at line 92 of file IntegerDotProductOps.cpp.

◆ getIntegerDotProductMaxVersion()

static std::optional<spirv::Version> mlir::spirv::getIntegerDotProductMaxVersion ( )
static

Definition at line 87 of file IntegerDotProductOps.cpp.

◆ getIntegerDotProductMinVersion()

static std::optional<spirv::Version> mlir::spirv::getIntegerDotProductMinVersion ( )
static

Definition at line 83 of file IntegerDotProductOps.cpp.

◆ getInterfaceVarABIAttr()

InterfaceVarABIAttr mlir::spirv::getInterfaceVarABIAttr ( unsigned  descriptorSet,
unsigned  binding,
std::optional< StorageClass >  storageClass,
MLIRContext context 
)

Gets the InterfaceVarABIAttr given its fields.

Referenced by getDefaultABIAttrs().

◆ getInterfaceVarABIAttrName()

StringRef mlir::spirv::getInterfaceVarABIAttrName ( )

Returns the attribute name for specifying argument ABI information.

Definition at line 99 of file TargetAndABI.cpp.

Referenced by getDefaultABIAttrs(), lowerAsEntryFunction(), and verifyRegionAttribute().

◆ getMemoryModel()

FailureOr< spirv::MemoryModel > mlir::spirv::getMemoryModel ( spirv::TargetEnvAttr  targetAttr)

Returns memory model selected based on target environment.

Returns failure if it cannot be selected.

Definition at line 237 of file TargetAndABI.cpp.

References mlir::failure(), mlir::spirv::TargetEnvAttr::getCapabilities(), and mlir::gpu::amd::OpenCL.

◆ getMemorySpaceToStorageClassTarget()

std::unique_ptr< ConversionTarget > mlir::spirv::getMemorySpaceToStorageClassTarget ( MLIRContext context)

Creates the target that populates legality of ops with MemRef types.

Definition at line 240 of file MapMemRefStorageClassPass.cpp.

References isLegalOp().

◆ getOpenCLElementPtr()

Value mlir::spirv::getOpenCLElementPtr ( const SPIRVTypeConverter typeConverter,
MemRefType  baseType,
Value  basePtr,
ValueRange  indices,
Location  loc,
OpBuilder builder 
)

◆ getPrefixedOpcode()

uint32_t mlir::spirv::getPrefixedOpcode ( uint32_t  wordCount,
spirv::Opcode  opcode 
)

Returns the word-count-prefixed opcode for an SPIR-V instruction.

Definition at line 61 of file SPIRVBinaryUtils.cpp.

◆ getPushConstantValue()

Value mlir::spirv::getPushConstantValue ( Operation op,
unsigned  elementCount,
unsigned  offset,
Type  integerType,
OpBuilder builder 
)

Gets the value at the given offset of the push constant storage with a total of elementCount integerType integers.

A global variable will be created in the nearest symbol table enclosing op for the push constant storage if not existing. Load ops will be created via the given builder to load values from the push constant. Returns null Value on error.

Definition at line 945 of file SPIRVConversion.cpp.

◆ getRecursiveImpliedCapabilities()

SmallVector<Capability, 0> mlir::spirv::getRecursiveImpliedCapabilities ( Capability  cap)

Returns the recursively implied capabilities for the given capability.

These capabilities are implicitly declared by the given capability. Compared to the above function, this function collects implied capabilities recursively: if an implicitly declared capability implicitly declares a third one, the third one will also be returned.

Referenced by mlir::spirv::TargetEnv::TargetEnv().

◆ getStrArrayAttrForEnumList()

template<typename Ty >
ArrayAttr mlir::spirv::getStrArrayAttrForEnumList ( Builder builder,
ArrayRef< Ty >  enumValues,
function_ref< StringRef(Ty)>  stringifyFn 
)

Definition at line 54 of file SPIRVParsingUtils.h.

References mlir::Builder::getStrArrayAttr().

◆ getTargetEnvAttrName()

StringRef mlir::spirv::getTargetEnvAttrName ( )

Returns the attribute name for specifying SPIR-V target environment.

Definition at line 173 of file TargetAndABI.cpp.

◆ getUnaryOpResultType()

static Type mlir::spirv::getUnaryOpResultType ( Type  operandType)
static

Result of a logical op must be a scalar or vector of boolean type.

Definition at line 41 of file SPIRVOpDefinition.cpp.

References mlir::get(), mlir::Type::getContext(), and mlir::Builder::getIntegerType().

◆ getVulkanElementPtr()

Value mlir::spirv::getVulkanElementPtr ( const SPIRVTypeConverter typeConverter,
MemRefType  baseType,
Value  basePtr,
ValueRange  indices,
Location  loc,
OpBuilder builder 
)

◆ hash_value()

llvm::hash_code mlir::spirv::hash_value ( const StructType::MemberDecorationInfo memberDecorationInfo)

◆ hasOneBranchOpTo()

static bool mlir::spirv::hasOneBranchOpTo ( Block srcBlock,
Block dstBlock 
)
static

Returns true if the given srcBlock contains only one spirv.Branch to the given dstBlock.

Definition at line 243 of file ControlFlowOps.cpp.

References mlir::Block::back().

◆ isDirectInModuleLikeOp()

static bool mlir::spirv::isDirectInModuleLikeOp ( Operation op)
static

Returns true if the given op is an module-like op that maintains a symbol table.

Definition at line 36 of file SPIRVOpDefinition.cpp.

◆ isMergeBlock()

static bool mlir::spirv::isMergeBlock ( Block block)
static

Returns true if the given block only contains one spirv.mlir.merge op.

Definition at line 253 of file ControlFlowOps.cpp.

References mlir::Block::begin(), mlir::Block::empty(), mlir::Block::end(), and mlir::Block::front().

◆ isNestedInFunctionOpInterface()

static bool mlir::spirv::isNestedInFunctionOpInterface ( Operation op)
static

Returns true if the given op is a function-like op or nested in a function-like op without a module-like op in the middle.

Definition at line 24 of file SPIRVOpDefinition.cpp.

◆ linearizeIndex()

Value mlir::spirv::linearizeIndex ( ValueRange  indices,
ArrayRef< int64_t >  strides,
int64_t  offset,
Type  integerType,
Location  loc,
OpBuilder builder 
)

Generates IR to perform index linearization with the given indices and their corresponding strides, adding an initial offset.

Definition at line 971 of file SPIRVConversion.cpp.

References mlir::OpBuilder::create(), mlir::detail::enumerate(), and mlir::get().

Referenced by getOpenCLElementPtr(), and getVulkanElementPtr().

◆ lookupEntryPointABI()

spirv::EntryPointABIAttr mlir::spirv::lookupEntryPointABI ( Operation op)

Queries the entry point ABI on the nearest function-like op containing the given op.

Returns null attribute if not found.

Definition at line 136 of file TargetAndABI.cpp.

◆ lookupLocalWorkGroupSize()

DenseI32ArrayAttr mlir::spirv::lookupLocalWorkGroupSize ( Operation op)

Queries the local workgroup size from entry point ABI on the nearest function-like op containing the given op.

Returns null attribute if not found.

Definition at line 149 of file TargetAndABI.cpp.

◆ lookupTargetEnv()

spirv::TargetEnvAttr mlir::spirv::lookupTargetEnv ( Operation op)

Queries the target environment recursively from enclosing symbol table ops containing the given op.

Definition at line 185 of file TargetAndABI.cpp.

Referenced by lowerEntryPointABIAttr().

◆ lookupTargetEnvOrDefault()

spirv::TargetEnvAttr mlir::spirv::lookupTargetEnvOrDefault ( Operation op)

Queries the target environment recursively from enclosing symbol table ops containing the given op or returns the default target environment as returned by getDefaultTargetEnv() if not provided.

Definition at line 201 of file TargetAndABI.cpp.

◆ mapMemorySpaceToOpenCLStorageClass()

std::optional< spirv::StorageClass > mlir::spirv::mapMemorySpaceToOpenCLStorageClass ( Attribute  memorySpaceAttr)

Maps MemRef memory spaces to storage classes for OpenCL-flavored SPIR-V using the default rule.

Returns std::nullopt if the memory space is unknown.

Definition at line 114 of file MapMemRefStorageClassPass.cpp.

References OPENCL_STORAGE_SPACE_MAP_LIST, and STORAGE_SPACE_MAP_FN.

◆ mapMemorySpaceToVulkanStorageClass()

std::optional< spirv::StorageClass > mlir::spirv::mapMemorySpaceToVulkanStorageClass ( Attribute  memorySpaceAttr)

Maps MemRef memory spaces to storage classes for Vulkan-flavored SPIR-V using the default rule.

Returns std::nullopt if the memory space is unknown.

Definition at line 60 of file MapMemRefStorageClassPass.cpp.

References STORAGE_SPACE_MAP_FN, and VULKAN_STORAGE_SPACE_MAP_LIST.

◆ mapOpenCLStorageClassToMemorySpace()

std::optional< unsigned > mlir::spirv::mapOpenCLStorageClassToMemorySpace ( spirv::StorageClass  storageClass)

Maps storage classes for OpenCL-flavored SPIR-V to MemRef memory spaces using the default rule.

Returns std::nullopt if the storage class is unsupported.

Definition at line 141 of file MapMemRefStorageClassPass.cpp.

References OPENCL_STORAGE_SPACE_MAP_LIST, and STORAGE_SPACE_MAP_FN.

◆ mapVulkanStorageClassToMemorySpace()

std::optional< unsigned > mlir::spirv::mapVulkanStorageClassToMemorySpace ( spirv::StorageClass  storageClass)

Maps storage classes for Vulkan-flavored SPIR-V to MemRef memory spaces using the default rule.

Returns std::nullopt if the storage class is unsupported.

Definition at line 87 of file MapMemRefStorageClassPass.cpp.

References STORAGE_SPACE_MAP_FN, and VULKAN_STORAGE_SPACE_MAP_LIST.

◆ needsInterfaceVarABIAttrs()

bool mlir::spirv::needsInterfaceVarABIAttrs ( spirv::TargetEnvAttr  targetAttr)

Returns whether the given SPIR-V target (described by TargetEnvAttr) needs ABI attributes for interface variables (spirv.interface_var_abi).

Definition at line 111 of file TargetAndABI.cpp.

References mlir::spirv::TargetEnvAttr::getCapabilities().

Referenced by getDefaultABIAttrs().

◆ parseAtomicCompareExchangeImpl()

static ParseResult mlir::spirv::parseAtomicCompareExchangeImpl ( OpAsmParser parser,
OperationState state 
)
static

Definition at line 112 of file AtomicOps.cpp.

◆ parseAtomicUpdateOp()

static ParseResult mlir::spirv::parseAtomicUpdateOp ( OpAsmParser parser,
OperationState state,
bool  hasValue 
)
static

Definition at line 24 of file AtomicOps.cpp.

◆ parseControlAttribute()

template<typename EnumAttrClass , typename EnumClass >
static ParseResult mlir::spirv::parseControlAttribute ( OpAsmParser parser,
OperationState state,
StringRef  attrName = spirv::attributeName<EnumClass>() 
)
static

Parses Function, Selection and Loop control attributes.

If no control is specified, "None" is used as a default.

Definition at line 27 of file ControlFlowOps.cpp.

◆ parseEnumKeywordAttr() [1/2]

template<typename EnumAttrClass , typename EnumClass = typename EnumAttrClass::ValueType>
ParseResult mlir::spirv::parseEnumKeywordAttr ( EnumClass &  value,
OpAsmParser parser,
OperationState state,
StringRef  attrName = spirv::attributeName<EnumClass>() 
)

Parses the next keyword in parser as an enumerant of the given EnumClass and inserts the enumerant into state as an 32-bit integer attribute with the enum class's name as attribute name.

Definition at line 135 of file SPIRVParsingUtils.h.

◆ parseEnumKeywordAttr() [2/2]

template<typename EnumClass , typename ParserType >
ParseResult mlir::spirv::parseEnumKeywordAttr ( EnumClass &  value,
ParserType &  parser,
StringRef  attrName = spirv::attributeName<EnumClass>() 
)

Parses the next keyword in parser as an enumerant of the given EnumClass.

Definition at line 71 of file SPIRVParsingUtils.h.

References mlir::failure(), and mlir::success().

Referenced by parseCooperativeMatrixNVType(), parseCooperativeMatrixType(), and parseJointMatrixType().

◆ parseEnumStrAttr() [1/2]

template<typename EnumAttrClass , typename EnumClass = typename EnumAttrClass::ValueType>
ParseResult mlir::spirv::parseEnumStrAttr ( EnumClass &  value,
OpAsmParser parser,
OperationState state,
StringRef  attrName = spirv::attributeName<EnumClass>() 
)

Parses the next string attribute in parser as an enumerant of the given EnumClass and inserts the enumerant into state as an 32-bit integer attribute with the enum class's name as attribute name.

Definition at line 119 of file SPIRVParsingUtils.h.

◆ parseEnumStrAttr() [2/2]

template<typename EnumClass >
ParseResult mlir::spirv::parseEnumStrAttr ( EnumClass &  value,
OpAsmParser parser,
StringRef  attrName = spirv::attributeName<EnumClass>() 
)

Parses the next string attribute in parser as an enumerant of the given EnumClass.

Definition at line 92 of file SPIRVParsingUtils.h.

References mlir::AsmParser::emitError(), mlir::failure(), mlir::AsmParser::getBuilder(), mlir::AsmParser::getCurrentLocation(), mlir::Builder::getNoneType(), mlir::AsmParser::parseAttribute(), and mlir::success().

Referenced by parseImageOperands().

◆ parseGroupNonUniformArithmeticOp()

static ParseResult mlir::spirv::parseGroupNonUniformArithmeticOp ( OpAsmParser parser,
OperationState state 
)
static

Definition at line 23 of file GroupOps.cpp.

◆ parseImageOperands()

static ParseResult mlir::spirv::parseImageOperands ( OpAsmParser parser,
spirv::ImageOperandsAttr &  attr 
)
static

◆ parseMemoryAccessAttributes()

ParseResult mlir::spirv::parseMemoryAccessAttributes ( OpAsmParser parser,
OperationState state,
StringRef  attrName = AttrNames::kMemoryAccessAttrName 
)

Parses optional memory access (a.k.a.

memory operand) attributes attached to a memory access operand/pointer. Specifically, parses the following syntax: ([ memory-access ])? where: memory-access ::= "None" | "Volatile" | "Aligned", integer-literal | "NonTemporal"

Definition at line 21 of file SPIRVParsingUtils.cpp.

◆ parsePtrAccessChainOpImpl()

static ParseResult mlir::spirv::parsePtrAccessChainOpImpl ( StringRef  opName,
OpAsmParser parser,
OperationState state 
)
static

Definition at line 550 of file MemoryOps.cpp.

◆ parseSourceMemoryAccessAttributes()

static ParseResult mlir::spirv::parseSourceMemoryAccessAttributes ( OpAsmParser parser,
OperationState state 
)
static

Definition at line 28 of file MemoryOps.cpp.

◆ parseVariableDecorations()

ParseResult mlir::spirv::parseVariableDecorations ( OpAsmParser parser,
OperationState state 
)

Definition at line 50 of file SPIRVParsingUtils.cpp.

◆ populateMemorySpaceToStorageClassPatterns()

void mlir::spirv::populateMemorySpaceToStorageClassPatterns ( spirv::MemorySpaceToStorageClassConverter typeConverter,
RewritePatternSet patterns 
)

Appends to a pattern list additional patterns for converting numeric MemRef memory spaces into SPIR-V symbolic ones.

Definition at line 297 of file MapMemRefStorageClassPass.cpp.

References mlir::RewritePatternSet::add(), and mlir::RewritePatternSet::getContext().

◆ populateSPIRVExpandExtendedMultiplicationPatterns()

void mlir::spirv::populateSPIRVExpandExtendedMultiplicationPatterns ( RewritePatternSet patterns)

Appends to a pattern list additional patterns to expand extended multiplication ops into regular arithmetic ops.

Extended multiplication ops are not supported by the WebGPU Shading Language (WGSL).

Definition at line 190 of file SPIRVWebGPUTransforms.cpp.

References mlir::RewritePatternSet::add(), and mlir::RewritePatternSet::getContext().

◆ populateSPIRVGLCanonicalizationPatterns()

void mlir::spirv::populateSPIRVGLCanonicalizationPatterns ( RewritePatternSet results)

Populates patterns to run canoncalization that involves GL ops.

These patterns cannot be run in default canonicalization because GL ops aren't always available. So they should be involed specifically when needed.

Definition at line 25 of file SPIRVGLCanonicalization.cpp.

References mlir::RewritePatternSet::add(), and mlir::RewritePatternSet::getContext().

◆ printAccessChain()

template<typename Op >
static void mlir::spirv::printAccessChain ( Op  op,
ValueRange  indices,
OpAsmPrinter printer 
)
static

Definition at line 324 of file MemoryOps.cpp.

◆ printAtomicCompareExchangeImpl()

template<typename T >
static void mlir::spirv::printAtomicCompareExchangeImpl ( atomOp,
OpAsmPrinter printer 
)
static

Definition at line 105 of file AtomicOps.cpp.

◆ printAtomicUpdateOp()

static void mlir::spirv::printAtomicUpdateOp ( Operation op,
OpAsmPrinter printer 
)
static

Definition at line 55 of file AtomicOps.cpp.

◆ printGroupNonUniformArithmeticOp()

static void mlir::spirv::printGroupNonUniformArithmeticOp ( Operation groupOp,
OpAsmPrinter printer 
)
static

◆ printImageOperands()

static void mlir::spirv::printImageOperands ( OpAsmPrinter printer,
Operation imageOp,
spirv::ImageOperandsAttr  attr 
)
static

Definition at line 64 of file SPIRVOpDefinition.cpp.

◆ printMemoryAccessAttribute()

template<typename MemoryOpTy >
static void mlir::spirv::printMemoryAccessAttribute ( MemoryOpTy  memoryOp,
OpAsmPrinter printer,
SmallVectorImpl< StringRef > &  elidedAttrs,
std::optional< spirv::MemoryAccess >  memoryAccessAtrrValue = std::nullopt,
std::optional< uint32_t >  alignmentAttrValue = std::nullopt 
)
static

◆ printSourceMemoryAccessAttribute()

template<typename MemoryOpTy >
static void mlir::spirv::printSourceMemoryAccessAttribute ( MemoryOpTy  memoryOp,
OpAsmPrinter printer,
SmallVectorImpl< StringRef > &  elidedAttrs,
std::optional< spirv::MemoryAccess >  memoryAccessAtrrValue = std::nullopt,
std::optional< uint32_t >  alignmentAttrValue = std::nullopt 
)
static

◆ printVariableDecorations()

void mlir::spirv::printVariableDecorations ( Operation op,
OpAsmPrinter printer,
SmallVectorImpl< StringRef > &  elidedAttrs 
)

Definition at line 95 of file SPIRVOps.cpp.

◆ serialize()

LogicalResult mlir::spirv::serialize ( ModuleOp  module,
SmallVectorImpl< uint32_t > &  binary,
const SerializationOptions options = {} 
)

Serializes the given SPIR-V module and writes to binary.

On failure, reports errors to the error handler registered with the MLIR context for module.

Referenced by roundTripModule(), and serializeModule().

◆ Serializer::processOp< spirv::CopyMemoryOp >()

template<>
LogicalResult mlir::spirv::Serializer::processOp< spirv::CopyMemoryOp > ( spirv::CopyMemoryOp  op)

Definition at line 678 of file SerializeOps.cpp.

◆ Serializer::processOp< spirv::EntryPointOp >()

template<>
LogicalResult mlir::spirv::Serializer::processOp< spirv::EntryPointOp > ( spirv::EntryPointOp  op)

Definition at line 587 of file SerializeOps.cpp.

◆ Serializer::processOp< spirv::ExecutionModeOp >()

template<>
LogicalResult mlir::spirv::Serializer::processOp< spirv::ExecutionModeOp > ( spirv::ExecutionModeOp  op)

Definition at line 622 of file SerializeOps.cpp.

◆ Serializer::processOp< spirv::FunctionCallOp >()

template<>
LogicalResult mlir::spirv::Serializer::processOp< spirv::FunctionCallOp > ( spirv::FunctionCallOp  op)

Definition at line 651 of file SerializeOps.cpp.

◆ Serializer::processOp< spirv::GenericCastToPtrExplicitOp >()

template<>
LogicalResult mlir::spirv::Serializer::processOp< spirv::GenericCastToPtrExplicitOp > ( spirv::GenericCastToPtrExplicitOp  op)

Definition at line 723 of file SerializeOps.cpp.

◆ Serializer::processTypeDecoration< spirv::ArrayType >()

template<>
LogicalResult mlir::spirv::Serializer::processTypeDecoration< spirv::ArrayType > ( Location  loc,
spirv::ArrayType  type,
uint32_t  resultID 
)

Definition at line 283 of file Serializer.cpp.

References mlir::spirv::ArrayType::getArrayStride(), and mlir::success().

◆ Serializer::processTypeDecoration< spirv::RuntimeArrayType >()

template<>
LogicalResult mlir::spirv::Serializer::processTypeDecoration< spirv::RuntimeArrayType > ( Location  loc,
spirv::RuntimeArrayType  type,
uint32_t  resultID 
)

◆ stringifyTypeName()

template<typename T >
static StringRef mlir::spirv::stringifyTypeName ( )
static

◆ stringifyTypeName< FloatType >()

template<>
StringRef mlir::spirv::stringifyTypeName< FloatType > ( )

Definition at line 74 of file AtomicOps.cpp.

◆ stringifyTypeName< IntegerType >()

template<>
StringRef mlir::spirv::stringifyTypeName< IntegerType > ( )

Definition at line 69 of file AtomicOps.cpp.

◆ verifyAccessChain()

template<typename Op >
static LogicalResult mlir::spirv::verifyAccessChain ( Op  accessChainOp,
ValueRange  indices 
)
static

◆ verifyAtomicCompareExchangeImpl()

template<typename T >
static LogicalResult mlir::spirv::verifyAtomicCompareExchangeImpl ( atomOp)
static

Definition at line 145 of file AtomicOps.cpp.

References mlir::success().

◆ verifyAtomicUpdateOp()

template<typename ExpectedElementType >
static LogicalResult mlir::spirv::verifyAtomicUpdateOp ( Operation op)
static

Definition at line 80 of file AtomicOps.cpp.

◆ verifyCastOp()

static LogicalResult mlir::spirv::verifyCastOp ( Operation op,
bool  requireSameBitWidth = true,
bool  skipBitWidthCheck = false 
)
static

Definition at line 24 of file CastOps.cpp.

◆ verifyCoopMatrixAccess()

static LogicalResult mlir::spirv::verifyCoopMatrixAccess ( Operation op,
Type  pointer,
Type  coopMatrix,
spirv::MemoryAccessAttr  memoryOperand 
)
static

Definition at line 25 of file CooperativeMatrixOps.cpp.

◆ verifyCoopMatrixMulAddNV()

static LogicalResult mlir::spirv::verifyCoopMatrixMulAddNV ( NVCooperativeMatrixMulAddOp  op)
static

Definition at line 256 of file CooperativeMatrixOps.cpp.

◆ verifyGroupNonUniformArithmeticOp()

static LogicalResult mlir::spirv::verifyGroupNonUniformArithmeticOp ( Operation groupOp)
static

◆ verifyGroupNonUniformShuffleOp()

template<typename OpTy >
static LogicalResult mlir::spirv::verifyGroupNonUniformShuffleOp ( OpTy  op)
static

Definition at line 168 of file GroupOps.cpp.

◆ verifyGroupOp()

template<typename Op >
static LogicalResult mlir::spirv::verifyGroupOp ( Op  op)
static

Definition at line 379 of file GroupOps.cpp.

◆ verifyIntegerDotProduct()

static LogicalResult mlir::spirv::verifyIntegerDotProduct ( Operation op)
static

Definition at line 28 of file IntegerDotProductOps.cpp.

◆ verifyLoadStorePtrAndValTypes()

template<typename LoadStoreOpTy >
static LogicalResult mlir::spirv::verifyLoadStorePtrAndValTypes ( LoadStoreOpTy  op,
Value  ptr,
Value  val 
)
static

Definition at line 115 of file MemoryOps.cpp.

◆ verifyMemoryAccessAttribute()

template<typename MemoryOpTy >
static LogicalResult mlir::spirv::verifyMemoryAccessAttribute ( MemoryOpTy  memoryOp)
static

Definition at line 130 of file MemoryOps.cpp.

◆ verifyMemorySemantics()

LogicalResult mlir::spirv::verifyMemorySemantics ( Operation op,
spirv::MemorySemantics  memorySemantics 
)

Definition at line 71 of file SPIRVOps.cpp.

◆ verifyPointerAndCoopMatrixNVType()

static LogicalResult mlir::spirv::verifyPointerAndCoopMatrixNVType ( Operation op,
Type  pointer,
Type  coopMatrix 
)
static

Definition at line 189 of file CooperativeMatrixOps.cpp.

◆ verifySourceMemoryAccessAttribute()

template<typename MemoryOpTy >
static LogicalResult mlir::spirv::verifySourceMemoryAccessAttribute ( MemoryOpTy  memoryOp)
static

Definition at line 174 of file MemoryOps.cpp.

Variable Documentation

◆ kGeneratorNumber

constexpr uint32_t mlir::spirv::kGeneratorNumber = 22
constexpr

The serializer tool ID registered to the Khronos Group.

Definition at line 31 of file SPIRVBinaryUtils.h.

Referenced by appendModuleHeader().

◆ kHeaderWordCount

constexpr unsigned mlir::spirv::kHeaderWordCount = 5
constexpr

SPIR-V binary header word count.

Definition at line 25 of file SPIRVBinaryUtils.h.

Referenced by mlir::spirv::Serializer::collect().

◆ kMagicNumber

constexpr uint32_t mlir::spirv::kMagicNumber = 0x07230203
constexpr

SPIR-V magic number.

Definition at line 28 of file SPIRVBinaryUtils.h.

Referenced by appendModuleHeader().