diff --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td index 0a177e9eb9272a..cc9c950ea73fe2 100644 --- a/mlir/test/lib/Dialect/Test/TestOps.td +++ b/mlir/test/lib/Dialect/Test/TestOps.td @@ -2580,4 +2580,24 @@ def TestDefaultStrAttrHasValueOp : TEST_Op<"has_str_value"> { def : Pat<(TestDefaultStrAttrNoValueOp $value), (TestDefaultStrAttrHasValueOp ConstantStrAttr)>; +//===----------------------------------------------------------------------===// +// Test Ops with effects +//===----------------------------------------------------------------------===// + +def TestResource : Resource<"TestResource">; + +def TestEffectsOpA : TEST_Op<"op_with_effects_a"> { + let arguments = (ins + Arg, "", [MemRead]>, + Arg:$first, + Arg:$second, + Arg, "", [MemRead]>:$optional_symbol + ); + + let results = (outs Res]>); +} + +def TestEffectsOpB : TEST_Op<"op_with_effects_b", + [MemoryEffects<[MemWrite]>]>; + #endif // TEST_OPS diff --git a/mlir/test/mlir-tblgen/op-side-effects.td b/mlir/test/mlir-tblgen/op-side-effects.td index 292fdfb7b3a38b..ea1f00ff297943 100644 --- a/mlir/test/mlir-tblgen/op-side-effects.td +++ b/mlir/test/mlir-tblgen/op-side-effects.td @@ -26,8 +26,8 @@ def SideEffectOpB : TEST_Op<"side_effect_op_b", // CHECK: void SideEffectOpA::getEffects // CHECK: for (::mlir::Value value : getODSOperands(0)) // CHECK: effects.emplace_back(::mlir::MemoryEffects::Read::get(), value, ::mlir::SideEffects::DefaultResource::get()); -// CHECK: effects.emplace_back(::mlir::MemoryEffects::Read::get(), symbol(), ::mlir::SideEffects::DefaultResource::get()); -// CHECK: effects.emplace_back(::mlir::MemoryEffects::Write::get(), flat_symbol(), ::mlir::SideEffects::DefaultResource::get()); +// CHECK: effects.emplace_back(::mlir::MemoryEffects::Read::get(), symbolAttr(), ::mlir::SideEffects::DefaultResource::get()); +// CHECK: effects.emplace_back(::mlir::MemoryEffects::Write::get(), flat_symbolAttr(), ::mlir::SideEffects::DefaultResource::get()); // CHECK: if (auto symbolRef = optional_symbolAttr()) // CHECK: effects.emplace_back(::mlir::MemoryEffects::Read::get(), symbolRef, ::mlir::SideEffects::DefaultResource::get()); // CHECK: for (::mlir::Value value : getODSResults(0)) diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp index 8511df9c54e609..c6ffc76af95296 100644 --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -2053,12 +2053,13 @@ void OpEmitter::genSideEffectInterfaceMethods() { } else if (location.kind == EffectKind::Symbol) { // A symbol reference requires adding the proper attribute. const auto *attr = op.getArg(location.index).get(); + std::string argName = op.getGetterName(attr->name); if (attr->attr.isOptional()) { - body << " if (auto symbolRef = " << attr->name << "Attr())\n " + body << " if (auto symbolRef = " << argName << "Attr())\n " << llvm::formatv(addEffectCode, effect, "symbolRef, ", resource) .str(); } else { - body << llvm::formatv(addEffectCode, effect, attr->name + "(), ", + body << llvm::formatv(addEffectCode, effect, argName + "Attr(), ", resource) .str(); }