Skip to content

Commit cd67bbd

Browse files
lipracerbondhugula
authored andcommitted
[MLIR][Affine] add memory effect traits for dmaOp
DmaOp will read the source buffer and write the destination buffer so need to add some traits for it. Reviewed By: bondhugula Differential Revision: https://reviews.llvm.org/D144712
1 parent e35fbf5 commit cd67bbd

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

mlir/include/mlir/Dialect/Affine/IR/AffineOps.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ Region *getAffineScope(Operation *op);
8989
class AffineDmaStartOp
9090
: public Op<AffineDmaStartOp, OpTrait::MemRefsNormalizable,
9191
OpTrait::VariadicOperands, OpTrait::ZeroResults,
92-
OpTrait::OpInvariants, AffineMapAccessInterface::Trait> {
92+
OpTrait::OpInvariants, AffineMapAccessInterface::Trait,
93+
MemoryEffectOpInterface::Trait> {
9394
public:
9495
using Op::Op;
9596
static ArrayRef<StringRef> getAttributeNames() { return {}; }
@@ -233,6 +234,10 @@ class AffineDmaStartOp
233234
return isSrcMemorySpaceFaster() ? 0 : getDstMemRefOperandIndex();
234235
}
235236

237+
void
238+
getEffects(SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>>
239+
&effects);
240+
236241
static StringRef getSrcMapAttrStrName() { return "src_map"; }
237242
static StringRef getDstMapAttrStrName() { return "dst_map"; }
238243
static StringRef getTagMapAttrStrName() { return "tag_map"; }
@@ -333,6 +338,9 @@ class AffineDmaWaitOp
333338
LogicalResult verifyInvariants() { return verifyInvariantsImpl(); }
334339
LogicalResult fold(ArrayRef<Attribute> cstOperands,
335340
SmallVectorImpl<OpFoldResult> &results);
341+
void
342+
getEffects(SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>>
343+
&effects);
336344
};
337345

338346
/// Returns true if the given Value can be used as a dimension id in the region

mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,17 @@ def MemRef_DmaStartOp : MemRef_Op<"dma_start"> {
761761
return nullptr;
762762
return getOperand(getNumOperands() - 1);
763763
}
764+
765+
void getEffects(
766+
SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>> &
767+
effects) {
768+
effects.emplace_back(MemoryEffects::Read::get(), getSrcMemRef(),
769+
SideEffects::DefaultResource::get());
770+
effects.emplace_back(MemoryEffects::Write::get(), getDstMemRef(),
771+
SideEffects::DefaultResource::get());
772+
effects.emplace_back(MemoryEffects::Read::get(), getTagMemRef(),
773+
SideEffects::DefaultResource::get());
774+
}
764775
}];
765776
let hasCustomAssemblyFormat = 1;
766777
let hasFolder = 1;
@@ -803,6 +814,12 @@ def MemRef_DmaWaitOp : MemRef_Op<"dma_wait"> {
803814
unsigned getTagMemRefRank() {
804815
return getTagMemRef().getType().cast<MemRefType>().getRank();
805816
}
817+
void getEffects(
818+
SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>> &
819+
effects) {
820+
effects.emplace_back(MemoryEffects::Read::get(), getTagMemRef(),
821+
SideEffects::DefaultResource::get());
822+
}
806823
}];
807824
let hasFolder = 1;
808825
let hasVerifier = 1;

mlir/lib/Dialect/Affine/IR/AffineOps.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1708,6 +1708,17 @@ LogicalResult AffineDmaStartOp::fold(ArrayRef<Attribute> cstOperands,
17081708
return memref::foldMemRefCast(*this);
17091709
}
17101710

1711+
void AffineDmaStartOp::getEffects(
1712+
SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>>
1713+
&effects) {
1714+
effects.emplace_back(MemoryEffects::Read::get(), getSrcMemRef(),
1715+
SideEffects::DefaultResource::get());
1716+
effects.emplace_back(MemoryEffects::Write::get(), getDstMemRef(),
1717+
SideEffects::DefaultResource::get());
1718+
effects.emplace_back(MemoryEffects::Read::get(), getTagMemRef(),
1719+
SideEffects::DefaultResource::get());
1720+
}
1721+
17111722
//===----------------------------------------------------------------------===//
17121723
// AffineDmaWaitOp
17131724
//===----------------------------------------------------------------------===//
@@ -1786,6 +1797,13 @@ LogicalResult AffineDmaWaitOp::fold(ArrayRef<Attribute> cstOperands,
17861797
return memref::foldMemRefCast(*this);
17871798
}
17881799

1800+
void AffineDmaWaitOp::getEffects(
1801+
SmallVectorImpl<SideEffects::EffectInstance<MemoryEffects::Effect>>
1802+
&effects) {
1803+
effects.emplace_back(MemoryEffects::Read::get(), getTagMemRef(),
1804+
SideEffects::DefaultResource::get());
1805+
}
1806+
17891807
//===----------------------------------------------------------------------===//
17901808
// AffineForOp
17911809
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)