Index: mlir/test/lib/Dialect/Test/TestOps.td =================================================================== --- mlir/test/lib/Dialect/Test/TestOps.td +++ mlir/test/lib/Dialect/Test/TestOps.td @@ -2580,4 +2580,13 @@ def : Pat<(TestDefaultStrAttrNoValueOp $value), (TestDefaultStrAttrHasValueOp ConstantStrAttr)>; +//===----------------------------------------------------------------------===// +// Test Ops with effects on SymbolRefAttrs +//===----------------------------------------------------------------------===// + +def TestEffectsOnSymbolRef : TEST_Op<"effects_on_symbol_ref"> { + let arguments = (ins Arg:$first, + Arg:$second); +} + #endif // TEST_OPS Index: mlir/test/mlir-tblgen/op-side-effects.td =================================================================== --- mlir/test/mlir-tblgen/op-side-effects.td +++ mlir/test/mlir-tblgen/op-side-effects.td @@ -26,8 +26,8 @@ // 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)) Index: mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp =================================================================== --- mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -2053,12 +2053,13 @@ } 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(); }