@@ -125,6 +125,7 @@ void OpAsmPrinter::printFunctionalType(Operation *op) {
125125// ===----------------------------------------------------------------------===//
126126
127127// / The OpAsmOpInterface, see OpAsmInterface.td for more details.
128+ #include " mlir/IR/OpAsmAttrInterface.cpp.inc"
128129#include " mlir/IR/OpAsmOpInterface.cpp.inc"
129130#include " mlir/IR/OpAsmTypeInterface.cpp.inc"
130131
@@ -1159,15 +1160,31 @@ template <typename T>
11591160void AliasInitializer::generateAlias (T symbol, InProgressAliasInfo &alias,
11601161 bool canBeDeferred) {
11611162 SmallString<32 > nameBuffer;
1162- for (const auto &interface : interfaces) {
1163- OpAsmDialectInterface::AliasResult result =
1164- interface.getAlias (symbol, aliasOS);
1165- if (result == OpAsmDialectInterface::AliasResult::NoAlias)
1166- continue ;
1167- nameBuffer = std::move (aliasBuffer);
1168- assert (!nameBuffer.empty () && " expected valid alias name" );
1169- if (result == OpAsmDialectInterface::AliasResult::FinalAlias)
1170- break ;
1163+
1164+ OpAsmDialectInterface::AliasResult symbolInterfaceResult =
1165+ OpAsmDialectInterface::AliasResult::NoAlias;
1166+ if constexpr (std::is_base_of_v<Attribute, T>) {
1167+ if (auto symbolInterface = dyn_cast<OpAsmAttrInterface>(symbol)) {
1168+ symbolInterfaceResult = symbolInterface.getAlias (aliasOS);
1169+ if (symbolInterfaceResult !=
1170+ OpAsmDialectInterface::AliasResult::NoAlias) {
1171+ nameBuffer = std::move (aliasBuffer);
1172+ assert (!nameBuffer.empty () && " expected valid alias name" );
1173+ }
1174+ }
1175+ }
1176+
1177+ if (symbolInterfaceResult != OpAsmDialectInterface::AliasResult::FinalAlias) {
1178+ for (const auto &interface : interfaces) {
1179+ OpAsmDialectInterface::AliasResult result =
1180+ interface.getAlias (symbol, aliasOS);
1181+ if (result == OpAsmDialectInterface::AliasResult::NoAlias)
1182+ continue ;
1183+ nameBuffer = std::move (aliasBuffer);
1184+ assert (!nameBuffer.empty () && " expected valid alias name" );
1185+ if (result == OpAsmDialectInterface::AliasResult::FinalAlias)
1186+ break ;
1187+ }
11711188 }
11721189
11731190 if (nameBuffer.empty ())
0 commit comments