[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:
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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) {
|
||||
return !elidedAttrsSet.contains(attr.getName().strref());
|
||||
});
|
||||
if (atLeastOneAttr) {
|
||||
p << "<";
|
||||
p.printOptionalAttrDict(dictAttr.getValue(), elidedProps);
|
||||
p << ">";
|
||||
auto filteredAttrs =
|
||||
llvm::make_filter_range(attrs, [&](NamedAttribute attr) {
|
||||
return !elidedAttrsSet.contains(attr.getName().strref());
|
||||
});
|
||||
if (!filteredAttrs.empty()) {
|
||||
p << "<{";
|
||||
interleaveComma(filteredAttrs, p, [&](NamedAttribute attr) {
|
||||
p.printNamedAttribute(attr);
|
||||
});
|
||||
p << "}>";
|
||||
}
|
||||
} else {
|
||||
p << "<" << properties << ">";
|
||||
|
||||
@@ -290,10 +290,10 @@ test.format_optional_prop_dict <{a = [], b = 1 : i32}>
|
||||
// CHECK: test.format_optional_prop_dict {{$}}
|
||||
test.format_optional_prop_dict <{}>
|
||||
|
||||
// CHECK: test.format_optional_prop_dict < {a = ["foo"]}>
|
||||
// CHECK: test.format_optional_prop_dict <{a = ["foo"]}>
|
||||
test.format_optional_prop_dict <{a = ["foo"]}>
|
||||
|
||||
// CHECK: test.format_optional_prop_dict < {b = 2 : i32}>
|
||||
// CHECK: test.format_optional_prop_dict <{b = 2 : i32}>
|
||||
test.format_optional_prop_dict <{b = 2 : i32}>
|
||||
|
||||
// CHECK: test.format_optional_prop_dict <{a = ["foo"], b = 2 : i32}>
|
||||
@@ -513,15 +513,15 @@ test.format_infer_variadic_type_from_non_variadic %i64, %i64 : i64
|
||||
// CHECK: test.format_infer_type_variadic_operands(%[[I32]], %[[I32]] : i32, i32) (%[[I64]], %[[I64]] : i64, i64)
|
||||
%ignored_res13:4 = test.format_infer_type_variadic_operands(%i32, %i32 : i32, i32) (%i64, %i64 : i64, i64)
|
||||
|
||||
// CHECK: test.with_properties_and_attr 16 < {rhs = 16 : i64}>
|
||||
// CHECK: test.with_properties_and_attr 16 <{rhs = 16 : i64}>
|
||||
test.with_properties_and_attr 16 <{rhs = 16 : i64}>
|
||||
|
||||
// CHECK: test.with_properties_and_inferred_type 16 < {packed, rhs = 16 : i64}>
|
||||
// CHECK: test.with_properties_and_inferred_type 16 <{packed, rhs = 16 : i64}>
|
||||
%should_be_i32 = test.with_properties_and_inferred_type 16 <{packed, rhs = 16 : i64}>
|
||||
// Assert through the verifier that its inferred as i32.
|
||||
test.format_all_types_match_var %should_be_i32, %i32 : i32
|
||||
|
||||
// CHECK: test.using_property_in_custom_and_other [1, 4, 20] < {other = 16 : i64}>
|
||||
// CHECK: test.using_property_in_custom_and_other [1, 4, 20] <{other = 16 : i64}>
|
||||
test.using_property_in_custom_and_other [1, 4, 20] <{other = 16 : i64}>
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Reference in New Issue
Block a user