forked from OSchip/llvm-project
[mlir][OpFormatGen] Update "custom" directives for attributes.
This tweaks the generated code for parsing attributes with a custom directive to call `addAttribute` on the `OperationState` directly, and adds a newline after this call. Previously, the generated code would call `addAttribute` on the `OperationState` field `attributes`, which has no such method and fails to compile. Furthermore, the lack of newline would generate code with incorrectly formatted single line `if` statements. Added tests for parsing and printing attributes with a custom directive. Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D87860
This commit is contained in:
parent
11a75e6c92
commit
d14cfe1034
|
@ -364,6 +364,17 @@ parseCustomDirectiveSuccessors(OpAsmParser &parser, Block *&successor,
|
|||
varSuccessors.append(2, varSuccessor);
|
||||
return success();
|
||||
}
|
||||
static ParseResult parseCustomDirectiveAttributes(OpAsmParser &parser,
|
||||
IntegerAttr &attr,
|
||||
IntegerAttr &optAttr) {
|
||||
if (parser.parseAttribute(attr))
|
||||
return failure();
|
||||
if (succeeded(parser.parseOptionalComma())) {
|
||||
if (parser.parseAttribute(optAttr))
|
||||
return failure();
|
||||
}
|
||||
return success();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Printing
|
||||
|
@ -417,6 +428,13 @@ static void printCustomDirectiveSuccessors(OpAsmPrinter &printer,
|
|||
if (!varSuccessors.empty())
|
||||
printer << ", " << varSuccessors.front();
|
||||
}
|
||||
static void printCustomDirectiveAttributes(OpAsmPrinter &printer,
|
||||
Attribute attribute,
|
||||
Attribute optAttribute) {
|
||||
printer << attribute;
|
||||
if (optAttribute)
|
||||
printer << ", " << optAttribute;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Test IsolatedRegionOp - parse passthrough region arguments.
|
||||
|
|
|
@ -1547,6 +1547,17 @@ def FormatCustomDirectiveSuccessors
|
|||
}];
|
||||
}
|
||||
|
||||
def FormatCustomDirectiveAttributes
|
||||
: TEST_Op<"format_custom_directive_attributes"> {
|
||||
let arguments = (ins I64Attr:$attr, OptionalAttr<I64Attr>:$optAttr);
|
||||
let assemblyFormat = [{
|
||||
custom<CustomDirectiveAttributes>(
|
||||
$attr, $optAttr
|
||||
)
|
||||
attr-dict
|
||||
}];
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// AllTypesMatch type inference
|
||||
|
||||
|
|
|
@ -213,6 +213,12 @@ test.format_custom_directive_operands_and_types %i64, %i64 -> (%i64) : i64, i64
|
|||
// CHECK: test.format_custom_directive_operands_and_types %[[I64]] -> (%[[I64]]) : i64 -> (i64)
|
||||
test.format_custom_directive_operands_and_types %i64 -> (%i64) : i64 -> (i64)
|
||||
|
||||
// CHECK: test.format_custom_directive_attributes 54 : i64
|
||||
test.format_custom_directive_attributes 54 : i64
|
||||
|
||||
// CHECK: test.format_custom_directive_attributes 54 : i64, 46 : i64
|
||||
test.format_custom_directive_attributes 54 : i64, 46 : i64
|
||||
|
||||
// CHECK: test.format_custom_directive_regions {
|
||||
// CHECK-NEXT: test.return
|
||||
// CHECK-NEXT: }
|
||||
|
|
|
@ -943,8 +943,8 @@ static void genCustomDirectiveParser(CustomDirective *dir, OpMethodBody &body) {
|
|||
if (var->attr.isOptional())
|
||||
body << llvm::formatv(" if ({0}Attr)\n ", var->name);
|
||||
|
||||
body << llvm::formatv(
|
||||
" result.attributes.addAttribute(\"{0}\", {0}Attr);", var->name);
|
||||
body << llvm::formatv(" result.addAttribute(\"{0}\", {0}Attr);\n",
|
||||
var->name);
|
||||
} else if (auto *operand = dyn_cast<OperandVariable>(¶m)) {
|
||||
const NamedTypeConstraint *var = operand->getVar();
|
||||
if (!var->isOptional())
|
||||
|
|
Loading…
Reference in New Issue