[Mlir-commits] [mlir] [uArch][XeGPU] Add XeGPU uArch definition. (PR #153706)
Adam Siemieniuk
llvmlistbot at llvm.org
Fri Oct 10 04:31:12 PDT 2025
================
@@ -0,0 +1,297 @@
+//===--- IntelGpuXe2.h ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// \file
+// Xe2 uArch definition. Xe2 is the second generation of Intel Xe GPUs.
+// This file defines the uArch details for Xe2 and its derived architectures.
+// This includes Ponte Vecchio (PVC) and Battlemage (BMG) architectures.
+//
+//===----------------------------------------------------------------------===//
+#ifndef MLIR_DIALECT_XEGPU_UARCH_INTELGPUXE2_H
+#define MLIR_DIALECT_XEGPU_UARCH_INTELGPUXE2_H
+
+#include "mlir/Dialect/XeGPU/uArch/uArchBase.h"
+#include "mlir/IR/BuiltinTypes.h"
+#include "mlir/IR/TypeUtilities.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/DebugLog.h"
+#include <map>
+#include <string>
+
+#define DEBUG_TYPE "xegpu-uarch"
+
+using namespace mlir;
+using namespace mlir::xegpu::uArch;
+
+namespace mlir {
+namespace xegpu {
+namespace uArch {
+
+struct Xe2Plus : public uArch {
+ XeCoreInfo xeCore;
+ Xe2Plus(const std::string &archName, const std::string &archDescription,
+ const XeCoreInfo &xeCore,
+ const std::map<RegisterFileType, RegisterFileInfo> ®Info = {},
+ const llvm::SmallVector<CacheInfo, 4> &cacheInfo = {},
+ const std::map<InstructionKind, std::shared_ptr<Instruction>>
+ &instrs = {})
+ : uArch(archName, archDescription, regInfo, cacheInfo, instrs),
+ xeCore(xeCore) {}
+};
+
+// struct to represent DPAS instruction
+struct DPASInstruction : public Instruction, public MMAInstructionInterface {
+ DPASInstruction()
+ : Instruction(InstructionKind::DPAS, InstructionScope::Subgroup) {}
+
+ // Override all virtuals from MatrixOpInterface
+ virtual llvm::SmallVector<std::pair<uint32_t, uint32_t>, 16>
+ getSupportedShapes(Type dataType, MMAOpndKind matrixType) override;
+ virtual llvm::SmallVector<Type, 8>
----------------
adam-smnk wrote:
I'd suggest skipping storage sizes (`, 8>`, `, 16>` etc.) in the APIs.
Makes for more flexible interfaces.
https://github.com/llvm/llvm-project/pull/153706
More information about the Mlir-commits
mailing list