mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 22:26:05 +00:00

205c5325b3
added a transform utility that moved all SSA dependences of an operation
before an insertion point. Similar to that, this PR adds a transform
utility function, `moveValueDefinitions` to move the slice of operations
that define all values in a `ValueRange` before the insertion point.
While very similar to `moveOperationDependencies`, this method differs
in a few ways
1. When computing the backward slice since the start of the slice is
value, the slice computed needs to be inclusive.
2. The combined backward slice needs to be sorted topologically before
moving them to avoid SSA use-def violations while moving individual ops.
The PR also adds a new transform op to test this new utility function.
---------
Signed-off-by: MaheshRavishankar <mahesh.ravishankar@gmail.com>
64 lines
2.0 KiB
TableGen
64 lines
2.0 KiB
TableGen
//===- TestTransformOps.td ---------------------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef TEST_TRANSFORM_OPS
|
|
#define TEST_TRANSFORM_OPS
|
|
|
|
include "mlir/Dialect/Transform/IR/TransformDialect.td"
|
|
include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.td"
|
|
include "mlir/Dialect/Transform/IR/TransformTypes.td"
|
|
include "mlir/Interfaces/SideEffectInterfaces.td"
|
|
include "mlir/IR/OpBase.td"
|
|
|
|
/// Transform dialect operations for testing transformations in MLIR
|
|
|
|
def TestMoveOperandDeps :
|
|
Op<Transform_Dialect, "test.move_operand_deps",
|
|
[FunctionalStyleTransformOpTrait, MemoryEffectsOpInterface,
|
|
DeclareOpInterfaceMethods<TransformOpInterface>,
|
|
ReportTrackingListenerFailuresOpTrait]> {
|
|
let description = [{
|
|
Moves all dependencies of on operation before another operation.
|
|
}];
|
|
|
|
let arguments =
|
|
(ins TransformHandleTypeInterface:$op,
|
|
TransformHandleTypeInterface:$insertion_point);
|
|
|
|
let results = (outs);
|
|
|
|
let assemblyFormat = [{
|
|
$op `before` $insertion_point attr-dict
|
|
`:` type($op) `,` type($insertion_point)
|
|
}];
|
|
}
|
|
|
|
def TestMoveValueDefns :
|
|
Op<Transform_Dialect, "test.move_value_defns",
|
|
[FunctionalStyleTransformOpTrait, MemoryEffectsOpInterface,
|
|
DeclareOpInterfaceMethods<TransformOpInterface>,
|
|
ReportTrackingListenerFailuresOpTrait]> {
|
|
let description = [{
|
|
Moves all dependencies of on operation before another operation.
|
|
}];
|
|
|
|
let arguments =
|
|
(ins Variadic<TransformValueHandleTypeInterface>:$values,
|
|
TransformHandleTypeInterface:$insertion_point);
|
|
|
|
let results = (outs);
|
|
|
|
let assemblyFormat = [{
|
|
$values `before` $insertion_point attr-dict
|
|
`:` `(` type($values) `)` `` `,` type($insertion_point)
|
|
}];
|
|
}
|
|
|
|
|
|
#endif // TEST_TRANSFORM_OPS
|