Skip to content

Commit 2f94ce0

Browse files
committed
[mlir][DeclarativeParser] Move several missed parsers over to the declarative form.
Differential Revision: https://reviews.llvm.org/D74283
1 parent 1b2c16f commit 2f94ce0

File tree

7 files changed

+13
-77
lines changed

7 files changed

+13
-77
lines changed

mlir/include/mlir/Dialect/LoopOps/LoopOps.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ def ReduceReturnOp :
249249
}];
250250

251251
let arguments = (ins AnyType:$result);
252+
let assemblyFormat = "$result attr-dict `:` type($result)";
252253
}
253254

254255
def TerminatorOp : Loop_Op<"terminator", [Terminator]> {

mlir/include/mlir/Dialect/SPIRV/SPIRVBitOps.td

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ class SPV_BitBinaryOp<string mnemonic, list<OpTrait> traits = []> :
2323
[NoSideEffect, SameOperandsAndResultType])>;
2424

2525
class SPV_BitFieldExtractOp<string mnemonic, list<OpTrait> traits = []> :
26-
SPV_Op<mnemonic, !listconcat(traits, [NoSideEffect])> {
26+
SPV_Op<mnemonic, !listconcat(traits,
27+
[NoSideEffect, AllTypesMatch<["base", "result"]>])> {
2728
let arguments = (ins
2829
SPV_ScalarOrVectorOf<SPV_Integer>:$base,
2930
SPV_Integer:$offset,
@@ -34,9 +35,11 @@ class SPV_BitFieldExtractOp<string mnemonic, list<OpTrait> traits = []> :
3435
SPV_ScalarOrVectorOf<SPV_Integer>:$result
3536
);
3637

37-
let parser = [{ return ::parseBitFieldExtractOp(parser, result); }];
38-
let printer = [{ ::printBitFieldExtractOp(this->getOperation(), p); }];
39-
let verifier = [{ return ::verifyBitFieldExtractOp(this->getOperation()); }];
38+
let verifier = [{ return success(); }];
39+
40+
let assemblyFormat = [{
41+
operands attr-dict `:` type($base) `,` type($offset) `,` type($count)
42+
}];
4043
}
4144

4245
class SPV_BitUnaryOp<string mnemonic, list<OpTrait> traits = []> :

mlir/include/mlir/Dialect/SPIRV/SPIRVControlFlowOps.td

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,7 @@ def SPV_MergeOp : SPV_Op<"_merge", [Terminator]> {
333333

334334
let results = (outs);
335335

336-
let parser = [{ return parseNoIOOp(parser, result); }];
337-
let printer = [{ printNoIOOp(getOperation(), p); }];
336+
let assemblyFormat = "attr-dict";
338337

339338
let hasOpcode = 0;
340339

@@ -360,8 +359,7 @@ def SPV_ReturnOp : SPV_Op<"Return", [InFunctionScope, Terminator]> {
360359

361360
let results = (outs);
362361

363-
let parser = [{ return parseNoIOOp(parser, result); }];
364-
let printer = [{ printNoIOOp(getOperation(), p); }];
362+
let assemblyFormat = "attr-dict";
365363
}
366364

367365
// -----
@@ -383,8 +381,7 @@ def SPV_UnreachableOp : SPV_Op<"Unreachable", [InFunctionScope, Terminator]> {
383381

384382
let results = (outs);
385383

386-
let parser = [{ return parseNoIOOp(parser, result); }];
387-
let printer = [{ printNoIOOp(getOperation(), p); }];
384+
let assemblyFormat = "attr-dict";
388385
}
389386

390387
// -----

mlir/include/mlir/Dialect/SPIRV/SPIRVStructureOps.td

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,7 @@ def SPV_ModuleEndOp : SPV_Op<"_module_end", [InModuleScope, Terminator]> {
365365

366366
let results = (outs);
367367

368-
let parser = [{ return parseNoIOOp(parser, result); }];
369-
let printer = [{ printNoIOOp(getOperation(), p); }];
368+
let assemblyFormat = "attr-dict";
370369

371370
let verifier = [{ return success(); }];
372371

mlir/lib/Dialect/LoopOps/LoopOps.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -418,22 +418,6 @@ static LogicalResult verify(ReduceReturnOp op) {
418418
return success();
419419
}
420420

421-
static ParseResult parseReduceReturnOp(OpAsmParser &parser,
422-
OperationState &result) {
423-
OpAsmParser::OperandType operand;
424-
Type resultType;
425-
if (parser.parseOperand(operand) || parser.parseColonType(resultType) ||
426-
parser.resolveOperand(operand, resultType, result.operands))
427-
return failure();
428-
429-
return success();
430-
}
431-
432-
static void print(OpAsmPrinter &p, ReduceReturnOp op) {
433-
p << op.getOperationName() << " " << op.result() << " : "
434-
<< op.result().getType();
435-
}
436-
437421
//===----------------------------------------------------------------------===//
438422
// TableGen'd op method definitions
439423
//===----------------------------------------------------------------------===//

mlir/lib/Dialect/SPIRV/SPIRVOps.cpp

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -488,41 +488,6 @@ namespace {
488488
// Common parsers and printers
489489
//===----------------------------------------------------------------------===//
490490

491-
static ParseResult parseBitFieldExtractOp(OpAsmParser &parser,
492-
OperationState &state) {
493-
SmallVector<OpAsmParser::OperandType, 3> operandInfo;
494-
Type baseType;
495-
Type offsetType;
496-
Type countType;
497-
auto loc = parser.getCurrentLocation();
498-
499-
if (parser.parseOperandList(operandInfo, 3) || parser.parseColon() ||
500-
parser.parseType(baseType) || parser.parseComma() ||
501-
parser.parseType(offsetType) || parser.parseComma() ||
502-
parser.parseType(countType) ||
503-
parser.resolveOperands(operandInfo, {baseType, offsetType, countType},
504-
loc, state.operands)) {
505-
return failure();
506-
}
507-
state.addTypes(baseType);
508-
return success();
509-
}
510-
511-
static void printBitFieldExtractOp(Operation *op, OpAsmPrinter &printer) {
512-
printer << op->getName() << ' ' << op->getOperands() << " : "
513-
<< op->getOperandTypes();
514-
}
515-
516-
static LogicalResult verifyBitFieldExtractOp(Operation *op) {
517-
if (op->getOperand(0).getType() != op->getResult(0).getType()) {
518-
return op->emitError("expected the same type for the first operand and "
519-
"result, but provided ")
520-
<< op->getOperand(0).getType() << " and "
521-
<< op->getResult(0).getType();
522-
}
523-
return success();
524-
}
525-
526491
// Parses an atomic update op. If the update op does not take a value (like
527492
// AtomicIIncrement) `hasValue` must be false.
528493
static ParseResult parseAtomicUpdateOp(OpAsmParser &parser,
@@ -668,19 +633,6 @@ static LogicalResult verifyGroupNonUniformArithmeticOp(Operation *groupOp) {
668633
return success();
669634
}
670635

671-
// Parses an op that has no inputs and no outputs.
672-
static ParseResult parseNoIOOp(OpAsmParser &parser, OperationState &state) {
673-
if (parser.parseOptionalAttrDict(state.attributes))
674-
return failure();
675-
return success();
676-
}
677-
678-
// Prints an op that has no inputs and no outputs.
679-
static void printNoIOOp(Operation *op, OpAsmPrinter &printer) {
680-
printer << op->getName();
681-
printer.printOptionalAttrDict(op->getAttrs());
682-
}
683-
684636
static ParseResult parseUnaryOp(OpAsmParser &parser, OperationState &state) {
685637
OpAsmParser::OperandType operandInfo;
686638
Type type;

mlir/test/Dialect/SPIRV/ops.mlir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ func @bit_field_u_extract_vec(%base: vector<3xi32>, %offset: i8, %count: i8) ->
257257
// -----
258258

259259
func @bit_field_u_extract_invalid_result_type(%base: vector<3xi32>, %offset: i32, %count: i16) -> vector<4xi32> {
260-
// expected-error @+1 {{expected the same type for the first operand and result, but provided 'vector<3xi32>' and 'vector<4xi32>'}}
260+
// expected-error @+1 {{failed to verify that all of {base, result} have same type}}
261261
%0 = "spv.BitFieldUExtract" (%base, %offset, %count) : (vector<3xi32>, i32, i16) -> vector<4xi32>
262262
spv.ReturnValue %0 : vector<4xi32>
263263
}

0 commit comments

Comments
 (0)