CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
101 lines
4.5 KiB
TableGen
101 lines
4.5 KiB
TableGen
//===-- MyExtension.td - Transform dialect tutorial --------*- tablegen -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines Transform dialect extension operations used in the
|
|
// Chapter 3 of the Transform dialect tutorial.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef MY_EXTENSION
|
|
#define MY_EXTENSION
|
|
|
|
include "MyExtensionTypes.td"
|
|
include "mlir/Dialect/Transform/IR/TransformDialect.td"
|
|
include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.td"
|
|
include "mlir/Dialect/Transform/IR/TransformTypes.td"
|
|
include "mlir/IR/OpBase.td"
|
|
include "mlir/Interfaces/SideEffectInterfaces.td"
|
|
|
|
// Define the new operation. By convention, prefix its name with the name of the dialect
|
|
// extension, "my.". The full operation name will be further prefixed with "transform.".
|
|
def ChangeCallTargetOp : Op<Transform_Dialect, "my.change_call_target",
|
|
// Indicate that the operation implements the required TransformOpInterface and
|
|
// MemoryEffectsOpInterface. Use the TransformEach trait to provide the
|
|
// implementation for TransformOpInterface.
|
|
[TransformOpInterface, TransformEachOpTrait,
|
|
DeclareOpInterfaceMethods<MemoryEffectsOpInterface>]> {
|
|
// Provide a brief and a full description. It is recommended that the latter describes
|
|
// the effects on the operands and how the operation processes various failure modes.
|
|
let summary = "Changes the callee of a call operation to the specified one";
|
|
let description = [{
|
|
For each `func.call` payload operation associated with the handle, changes its
|
|
callee to be the symbol whose name is provided as an attribute to this operation.
|
|
|
|
Generates a silenceable failure if the operand is associated with payload operations
|
|
that are not `func.call`.
|
|
Only reads the operand.
|
|
}];
|
|
|
|
// The arguments include the handle to the payload operations and the attribute that
|
|
// specifies the new callee. The handle must implement TransformHandleTypeInterface.
|
|
// We use a string attribute as the symbol may not exist in the transform IR so the
|
|
// verification may fail.
|
|
let arguments = (ins
|
|
// Allow the handle to be to concrete func.call ops as well as any op implementing
|
|
// the CallOpInterface.
|
|
AnyTypeOf<[Transform_ConcreteOpType<"func.call">, CallOpInterfaceHandle]>:$call,
|
|
StrAttr:$new_target);
|
|
|
|
// The results are empty as the transformation does not produce any new payload.
|
|
let results = (outs);
|
|
|
|
// Provide nice syntax.
|
|
let assemblyFormat = "$call `,` $new_target attr-dict `:` qualified(type($call))";
|
|
|
|
// Declare the function implementing the interface for a single payload operation.
|
|
let extraClassDeclaration = [{
|
|
::mlir::DiagnosedSilenceableFailure applyToOne(
|
|
::mlir::transform::TransformRewriter &rewriter,
|
|
::mlir::func::CallOp call,
|
|
::mlir::transform::ApplyToEachResultList &results,
|
|
::mlir::transform::TransformState &state);
|
|
}];
|
|
}
|
|
|
|
// Define another transform operation.
|
|
def CallToOp : Op<Transform_Dialect, "my.call_to_op",
|
|
// Indicate that the operation implements the required TransformOpInterface.
|
|
// Use the TransformEach trait to provide implementation of this interface.
|
|
[TransformOpInterface, TransformEachOpTrait,
|
|
// Indicate that the operation implements the required MemoryEffectsOpInterface.
|
|
// Use the FunctionalStyle trait to provide the implementation for this interface.
|
|
MemoryEffectsOpInterface, FunctionalStyleTransformOpTrait]> {
|
|
// Summary and description omitted for brevity.
|
|
|
|
// The argument is the handle to the payload operations.
|
|
let arguments = (ins CallOpInterfaceHandle:$call);
|
|
|
|
// The result is the handle to the payload operations produced during the
|
|
// transformation.
|
|
let results = (outs TransformHandleTypeInterface:$transformed);
|
|
|
|
// Provide nice syntax.
|
|
let assemblyFormat = "$call attr-dict `:` functional-type(operands, results)";
|
|
|
|
// Declare the function implementing the interface for a single payload operation.
|
|
let extraClassDeclaration = [{
|
|
::mlir::DiagnosedSilenceableFailure applyToOne(
|
|
::mlir::transform::TransformRewriter &rewriter,
|
|
::mlir::CallOpInterface call,
|
|
::mlir::transform::ApplyToEachResultList &results,
|
|
::mlir::transform::TransformState &state);
|
|
}];
|
|
}
|
|
|
|
#endif // MY_EXTENSION
|