Files
gps/tools/local/circt/include/mlir/Dialect/XeGPU/IR/XeGPUDialect.h.inc
T
2026-07-12 11:01:51 +03:00

73 lines
3.5 KiB
C++

/*===- 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<typename T, typename U>
static llvm::SmallVector<T> slice(llvm::ArrayRef<T> shape, llvm::ArrayRef<U> dims) {
llvm::SmallVector<T> 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)