Skip to content

Commit 190f385

Browse files
[mlir][linalg] Implement RegionBranchOpInterface and fix memory effects
* Implement RegionBranchOpInterface: The op has a region, but it is conceptually not entered. The region just describes the semantics of the (monolithic) op. * Linalg structured ops do not allocate memory. Differential Revision: https://reviews.llvm.org/D121798
1 parent 6ed9d3a commit 190f385

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
include "mlir/Dialect/Linalg/IR/LinalgBase.td"
1818
include "mlir/Dialect/Linalg/IR/LinalgInterfaces.td"
19+
include "mlir/Interfaces/ControlFlowInterfaces.td"
1920
include "mlir/Interfaces/InferTypeOpInterface.td"
2021
include "mlir/Interfaces/SideEffectInterfaces.td"
2122

@@ -28,6 +29,7 @@ class LinalgStructuredBase_Op<string mnemonic, list<Trait> props>
2829
SingleBlockImplicitTerminator<"YieldOp">,
2930
DeclareOpInterfaceMethods<MemoryEffectsOpInterface>,
3031
LinalgStructuredInterface,
32+
RegionBranchOpInterface,
3133
ReifyRankedShapedTypeOpInterface], props)> {
3234
code structuredOpsBaseDecls = [{
3335
// Return whether the op accesses the iteration indices.
@@ -40,6 +42,13 @@ class LinalgStructuredBase_Op<string mnemonic, list<Trait> props>
4042
return llvm::cast<LinalgOp>(getOperation()).reifyResultShapes(b,
4143
reifiedReturnShapes);
4244
}
45+
46+
void getSuccessorRegions(
47+
Optional<unsigned> index, ArrayRef<Attribute> operands,
48+
SmallVectorImpl<RegionSuccessor> &regions) {
49+
// Op has a region, but conceptually the control flow does not enter the
50+
// region.
51+
}
4352
}];
4453
}
4554

mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -661,10 +661,6 @@ static void getGenericEffectsImpl(
661661
SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>>
662662
&effects,
663663
ValueRange results, ValueRange inputBuffers, ValueRange outputs) {
664-
for (Value value : results) {
665-
effects.emplace_back(MemoryEffects::Allocate::get(), value,
666-
SideEffects::DefaultResource::get());
667-
}
668664
for (Value value : inputBuffers) {
669665
effects.emplace_back(MemoryEffects::Read::get(), value,
670666
SideEffects::DefaultResource::get());

0 commit comments

Comments
 (0)