12798b72aSOleksandr "Alex" Zinenko //===- DebugExtensionOps.cpp - Debug extension for the Transform dialect --===// 22798b72aSOleksandr "Alex" Zinenko // 32798b72aSOleksandr "Alex" Zinenko // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42798b72aSOleksandr "Alex" Zinenko // See https://llvm.org/LICENSE.txt for license information. 52798b72aSOleksandr "Alex" Zinenko // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62798b72aSOleksandr "Alex" Zinenko // 72798b72aSOleksandr "Alex" Zinenko //===----------------------------------------------------------------------===// 82798b72aSOleksandr "Alex" Zinenko 92798b72aSOleksandr "Alex" Zinenko #include "mlir/Dialect/Transform/DebugExtension/DebugExtensionOps.h" 102798b72aSOleksandr "Alex" Zinenko 112798b72aSOleksandr "Alex" Zinenko #include "mlir/Dialect/Transform/IR/TransformDialect.h" 122798b72aSOleksandr "Alex" Zinenko #include "mlir/Dialect/Transform/IR/TransformTypes.h" 132798b72aSOleksandr "Alex" Zinenko #include "mlir/IR/OpImplementation.h" 142798b72aSOleksandr "Alex" Zinenko 152798b72aSOleksandr "Alex" Zinenko using namespace mlir; 162798b72aSOleksandr "Alex" Zinenko 172798b72aSOleksandr "Alex" Zinenko #define GET_OP_CLASSES 182798b72aSOleksandr "Alex" Zinenko #include "mlir/Dialect/Transform/DebugExtension/DebugExtensionOps.cpp.inc" 192798b72aSOleksandr "Alex" Zinenko 202798b72aSOleksandr "Alex" Zinenko DiagnosedSilenceableFailure 212798b72aSOleksandr "Alex" Zinenko transform::DebugEmitRemarkAtOp::apply(transform::TransformRewriter &rewriter, 222798b72aSOleksandr "Alex" Zinenko transform::TransformResults &results, 232798b72aSOleksandr "Alex" Zinenko transform::TransformState &state) { 24a5757c5bSChristian Sigg if (isa<TransformHandleTypeInterface>(getAt().getType())) { 252798b72aSOleksandr "Alex" Zinenko auto payload = state.getPayloadOps(getAt()); 262798b72aSOleksandr "Alex" Zinenko for (Operation *op : payload) 272798b72aSOleksandr "Alex" Zinenko op->emitRemark() << getMessage(); 282798b72aSOleksandr "Alex" Zinenko return DiagnosedSilenceableFailure::success(); 292798b72aSOleksandr "Alex" Zinenko } 302798b72aSOleksandr "Alex" Zinenko 31a5757c5bSChristian Sigg assert(isa<transform::TransformValueHandleTypeInterface>(getAt().getType()) && 322798b72aSOleksandr "Alex" Zinenko "unhandled kind of transform type"); 332798b72aSOleksandr "Alex" Zinenko 342798b72aSOleksandr "Alex" Zinenko auto describeValue = [](Diagnostic &os, Value value) { 352798b72aSOleksandr "Alex" Zinenko os << "value handle points to "; 362798b72aSOleksandr "Alex" Zinenko if (auto arg = llvm::dyn_cast<BlockArgument>(value)) { 372798b72aSOleksandr "Alex" Zinenko os << "a block argument #" << arg.getArgNumber() << " in block #" 382798b72aSOleksandr "Alex" Zinenko << std::distance(arg.getOwner()->getParent()->begin(), 392798b72aSOleksandr "Alex" Zinenko arg.getOwner()->getIterator()) 402798b72aSOleksandr "Alex" Zinenko << " in region #" << arg.getOwner()->getParent()->getRegionNumber(); 412798b72aSOleksandr "Alex" Zinenko } else { 422798b72aSOleksandr "Alex" Zinenko os << "an op result #" << llvm::cast<OpResult>(value).getResultNumber(); 432798b72aSOleksandr "Alex" Zinenko } 442798b72aSOleksandr "Alex" Zinenko }; 452798b72aSOleksandr "Alex" Zinenko 462798b72aSOleksandr "Alex" Zinenko for (Value value : state.getPayloadValues(getAt())) { 472798b72aSOleksandr "Alex" Zinenko InFlightDiagnostic diag = ::emitRemark(value.getLoc()) << getMessage(); 482798b72aSOleksandr "Alex" Zinenko describeValue(diag.attachNote(), value); 492798b72aSOleksandr "Alex" Zinenko } 502798b72aSOleksandr "Alex" Zinenko 512798b72aSOleksandr "Alex" Zinenko return DiagnosedSilenceableFailure::success(); 522798b72aSOleksandr "Alex" Zinenko } 532798b72aSOleksandr "Alex" Zinenko 542798b72aSOleksandr "Alex" Zinenko DiagnosedSilenceableFailure transform::DebugEmitParamAsRemarkOp::apply( 552798b72aSOleksandr "Alex" Zinenko transform::TransformRewriter &rewriter, 562798b72aSOleksandr "Alex" Zinenko transform::TransformResults &results, transform::TransformState &state) { 572798b72aSOleksandr "Alex" Zinenko std::string str; 582798b72aSOleksandr "Alex" Zinenko llvm::raw_string_ostream os(str); 592798b72aSOleksandr "Alex" Zinenko if (getMessage()) 602798b72aSOleksandr "Alex" Zinenko os << *getMessage() << " "; 612798b72aSOleksandr "Alex" Zinenko llvm::interleaveComma(state.getParams(getParam()), os); 622798b72aSOleksandr "Alex" Zinenko if (!getAnchor()) { 63*884221edSJOE1994 emitRemark() << str; 642798b72aSOleksandr "Alex" Zinenko return DiagnosedSilenceableFailure::success(); 652798b72aSOleksandr "Alex" Zinenko } 662798b72aSOleksandr "Alex" Zinenko for (Operation *payload : state.getPayloadOps(getAnchor())) 67*884221edSJOE1994 ::mlir::emitRemark(payload->getLoc()) << str; 682798b72aSOleksandr "Alex" Zinenko return DiagnosedSilenceableFailure::success(); 692798b72aSOleksandr "Alex" Zinenko } 70