/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Dialect Declarations *| |* *| |* Automatically generated file, do not edit! *| |* From: XeGPU.td *| |* *| \*===----------------------------------------------------------------------===*/ namespace mlir::xegpu { /// The XeGPU dialect that models Intel GPU's ISA /// The XeGPU dialect closely models a subset of the Xe GPU's ISA, providing an /// abstraction to support high-performance GEMM code generation. It serves as a /// bridge dialect in the MLIR gradual lowering process, working with MLIR memref /// and vector types, and complements the Arith, Math, Vector, and Memref dialects. /// XeGPU operations are introduced for special Xe instructions not modeled by the /// LLVM/SPIR-V dialect, such as DPAS and 2D block load and store. /// /// It supports a tile-based programming model, decomposing the GEMM kernel into /// large predefined tile sizes at the subgroup and workgroup levels. XeGPU allows /// the high-level GEMM algorithm to be easily expressed. Underneath, it uses /// target-specific recipes and hardware features to achieve optimal performance /// on specific hardware. By decomposing GEMM at submatrix granularity and mapping it /// to registers, it naturally supports optimizations like fusing with neighboring /// operations. class XeGPUDialect : public ::mlir::Dialect { explicit XeGPUDialect(::mlir::MLIRContext *context); void initialize(); friend class ::mlir::MLIRContext; public: ~XeGPUDialect() override; static constexpr ::llvm::StringLiteral getDialectNamespace() { return ::llvm::StringLiteral("xegpu"); } /// Parse an attribute registered to this dialect. ::mlir::Attribute parseAttribute(::mlir::DialectAsmParser &parser, ::mlir::Type type) const override; /// Print an attribute registered to this dialect. void printAttribute(::mlir::Attribute attr, ::mlir::DialectAsmPrinter &os) const override; /// Parse a type registered to this dialect. ::mlir::Type parseType(::mlir::DialectAsmParser &parser) const override; /// Print a type registered to this dialect. void printType(::mlir::Type type, ::mlir::DialectAsmPrinter &os) const override; /// Checks if the given memref type represents shared local memory (SLM). /// Returns true if the memory space is address space 3, MemorySpace::SLM, /// xevm::AddrSpace::SHARED, or a GPU workgroup memory address space. static bool isSharedMemory(const MemRefType &memrefTy); /// drops/slices the shape in the specified dims, and return the rest. e.g., /// for shape = [32, 64, 8], dims = [0, 2], it will return [64] template static llvm::SmallVector slice(llvm::ArrayRef shape, llvm::ArrayRef dims) { llvm::SmallVector result; for (auto [i, v]: llvm::enumerate(shape)) { if (!llvm::is_contained(dims, i)) result.push_back(v); } return result; } }; } // namespace mlir::xegpu MLIR_DECLARE_EXPLICIT_TYPE_ID(::mlir::xegpu::XeGPUDialect)