[MLIR] Remove spurious space when printing prop-dict (#145962)

When there is an elided properties, there use to be an extra space
insert in the prop-dict printing before the dictionnary.

Fix #145695
This commit is contained in:
Mehdi Amini
2025-07-02 14:07:17 +02:00
committed by GitHub
parent f575b18fdc
commit 6ec9b1b366
4 changed files with 32 additions and 14 deletions

View File

@@ -207,6 +207,9 @@ public:
/// provide a valid type for the attribute.
virtual void printAttributeWithoutType(Attribute attr);
/// Print the given named attribute.
virtual void printNamedAttribute(NamedAttribute attr);
/// Print the alias for the given attribute, return failure if no alias could
/// be printed.
virtual LogicalResult printAlias(Attribute attr);

View File

@@ -442,6 +442,7 @@ public:
/// Print the given attribute without considering an alias.
void printAttributeImpl(Attribute attr,
AttrTypeElision typeElision = AttrTypeElision::Never);
void printNamedAttribute(NamedAttribute attr);
/// Print the alias for the given attribute, return failure if no alias could
/// be printed.
@@ -481,7 +482,6 @@ protected:
void printOptionalAttrDict(ArrayRef<NamedAttribute> attrs,
ArrayRef<StringRef> elidedAttrs = {},
bool withKeyword = false);
void printNamedAttribute(NamedAttribute attr);
void printTrailingLocation(Location loc, bool allowAlias = true);
void printLocationInternal(LocationAttr loc, bool pretty = false,
bool isTopLevel = false);
@@ -801,6 +801,10 @@ private:
void printAttributeWithoutType(Attribute attr) override {
printAttribute(attr);
}
void printNamedAttribute(NamedAttribute attr) override {
printAttribute(attr.getValue());
}
LogicalResult printAlias(Attribute attr) override {
initializer.visit(attr);
return success();
@@ -975,6 +979,10 @@ private:
recordAliasResult(
initializer.visit(attr, canBeDeferred, /*elideType=*/true));
}
void printNamedAttribute(NamedAttribute attr) override {
printAttribute(attr.getValue());
}
LogicalResult printAlias(Attribute attr) override {
printAttribute(attr);
return success();
@@ -2381,7 +2389,6 @@ void AsmPrinter::Impl::printAttribute(Attribute attr,
return;
return printAttributeImpl(attr, typeElision);
}
void AsmPrinter::Impl::printAttributeImpl(Attribute attr,
AttrTypeElision typeElision) {
if (!isa<BuiltinDialect>(attr.getDialect())) {
@@ -2973,6 +2980,11 @@ void AsmPrinter::printAttributeWithoutType(Attribute attr) {
impl->printAttribute(attr, Impl::AttrTypeElision::Must);
}
void AsmPrinter::printNamedAttribute(NamedAttribute attr) {
assert(impl && "expected AsmPrinter::printNamedAttribute to be overriden");
impl->printNamedAttribute(attr);
}
void AsmPrinter::printKeywordOrString(StringRef keyword) {
assert(impl && "expected AsmPrinter::printKeywordOrString to be overriden");
::printKeywordOrString(keyword, impl->getStream());

View File

@@ -810,13 +810,16 @@ void OpState::genericPrintProperties(OpAsmPrinter &p, Attribute properties,
ArrayRef<NamedAttribute> attrs = dictAttr.getValue();
llvm::SmallDenseSet<StringRef> elidedAttrsSet(elidedProps.begin(),
elidedProps.end());
bool atLeastOneAttr = llvm::any_of(attrs, [&](NamedAttribute attr) {
auto filteredAttrs =
llvm::make_filter_range(attrs, [&](NamedAttribute attr) {
return !elidedAttrsSet.contains(attr.getName().strref());
});
if (atLeastOneAttr) {
p << "<";
p.printOptionalAttrDict(dictAttr.getValue(), elidedProps);
p << ">";
if (!filteredAttrs.empty()) {
p << "<{";
interleaveComma(filteredAttrs, p, [&](NamedAttribute attr) {
p.printNamedAttribute(attr);
});
p << "}>";
}
} else {
p << "<" << properties << ">";