[Mlir-commits] [mlir] [MLIR][DLTI][Transform] Introduce transform.dlti.query (PR #101561)
Rolf Morel
llvmlistbot at llvm.org
Tue Aug 20 03:47:59 PDT 2024
================
@@ -0,0 +1,94 @@
+
+//===- DLTITransformOps.cpp - Implementation of DLTI transform ops --------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir/Dialect/DLTI/TransformOps/DLTITransformOps.h"
+
+#include "mlir/Dialect/DLTI/DLTI.h"
+#include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.h"
+#include "mlir/Dialect/Transform/Utils/Utils.h"
+#include "mlir/Interfaces/DataLayoutInterfaces.h"
+
+using namespace mlir;
+using namespace mlir::transform;
+
+#define DEBUG_TYPE "dlti-transforms"
+
+//===----------------------------------------------------------------------===//
+// QueryOp
+//===----------------------------------------------------------------------===//
+
+void transform::QueryOp::getEffects(
+ SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
+ onlyReadsHandle(getTargetMutable(), effects);
+ producesHandle(getOperation()->getOpResults(), effects);
+ onlyReadsPayload(effects);
+}
+
+DiagnosedSilenceableFailure transform::QueryOp::applyToOne(
+ transform::TransformRewriter &rewriter, Operation *target,
+ transform::ApplyToEachResultList &results, TransformState &state) {
+ StringAttr deviceId = getDeviceAttr();
+ StringAttr key = getKeyAttr();
+
+ DataLayoutEntryInterface entry;
+ if (deviceId) {
+ TargetSystemSpecInterface sysSpec = dlti::getTargetSystemSpec(target);
+ if (!sysSpec)
+ return mlir::emitDefiniteFailure(target->getLoc())
+ << "no target system spec associated to: " << target;
+
+ if (auto targetSpec = sysSpec.getDeviceSpecForDeviceID(deviceId))
+ entry = targetSpec->getSpecForIdentifier(key);
+ else
+ return mlir::emitDefiniteFailure(target->getLoc())
+ << "no " << deviceId << " target device spec found";
+ } else {
+ DataLayoutSpecInterface dlSpec = dlti::getDataLayoutSpec(target);
+ if (!dlSpec)
+ return mlir::emitDefiniteFailure(target->getLoc())
+ << "no data layout spec associated to: " << target;
+
+ entry = dlSpec.getSpecForIdentifier(key);
+ }
+
+ if (!entry)
+ return mlir::emitDefiniteFailure(target->getLoc())
----------------
rolfmorel wrote:
In https://github.com/llvm/llvm-project/pull/104595/ I have changed `transform.dlti.query` to return a silenceable failure when a query fails.
@rengolin, the Transform-dialect silenceable failures are "catchable", or interceptable, as Alex puts it above. While fairly heavyweight, this is one option for a mechanism for dealing with a failing DLTI-query in schedules.
https://github.com/llvm/llvm-project/pull/101561
More information about the Mlir-commits
mailing list