1//===- TuneExtensionOps.cpp - Tune extension for the Transform dialect ----===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "mlir/Dialect/Transform/IR/TransformOps.h"
10#include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.h"
11#include "mlir/IR/OpImplementation.h"
12#include "mlir/IR/PatternMatch.h"
13#include "llvm/Support/Debug.h"
14
15#include "mlir/Dialect/Transform/TuneExtension/TuneExtensionOps.h"
16
17using namespace mlir;
18
19#define GET_OP_CLASSES
20#include "mlir/Dialect/Transform/TuneExtension/TuneExtensionOps.cpp.inc"
21
22#define DEBUG_TYPE "transform-tune"
23#define DBGS() (llvm::dbgs() << "[" DEBUG_TYPE "] ")
24
25//===----------------------------------------------------------------------===//
26// KnobOp
27//===----------------------------------------------------------------------===//
28
29void transform::tune::KnobOp::getEffects(
30 SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
31 producesHandle(handles: getOperation()->getOpResults(), effects);
32 onlyReadsPayload(effects);
33}
34
35DiagnosedSilenceableFailure
36transform::tune::KnobOp::apply(transform::TransformRewriter &rewriter,
37 transform::TransformResults &results,
38 transform::TransformState &state) {
39 if (getSelected()) {
40 results.setParams(value: llvm::cast<OpResult>(Val: getResult()), params: *getSelected());
41 return DiagnosedSilenceableFailure::success();
42 }
43
44 return emitDefiniteFailure()
45 << "non-deterministic choice " << getName()
46 << " is only resolved through providing a `selected` attr";
47}
48
49LogicalResult transform::tune::KnobOp::verify() {
50 if (auto selected = getSelected()) {
51 if (auto optionsArray = dyn_cast<ArrayAttr>(Val: getOptions())) {
52 if (!llvm::is_contained(Range&: optionsArray, Element: selected))
53 return emitOpError(message: "provided `selected` attribute is not an element of "
54 "`options` array of attributes");
55 } else
56 LLVM_DEBUG(DBGS() << "cannot verify `selected` attribute " << selected
57 << " is an element of `options` attribute "
58 << getOptions());
59 }
60
61 return success();
62}
63

source code of mlir/lib/Dialect/Transform/TuneExtension/TuneExtensionOps.cpp