From f118b6c2c818863918085ceaf1d1e5e73794cb33 Mon Sep 17 00:00:00 2001 From: Razvan Lupusoru Date: Tue, 29 Apr 2025 09:27:20 -0700 Subject: [PATCH 1/2] [mlir][acc] Fix extraneous space when printing acc.loop The acc.loop printer inserted two spaces after the operation. This occurred because the custom combined loop attribute printer was not conditional - and thus the tablegen inserted an automatic space before invoking the custom printer. Then for each additional attribute it also inserted a space in beginning. Since lit tests were not sensitive to this, no tests need updated. But the issue with the extraneous space is resolved. --- .../mlir/Dialect/OpenACC/OpenACCOps.td | 4 +- mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp | 38 ++++++++----------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td index 41cec89fdf598..28003e99aba5c 100644 --- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td +++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td @@ -2197,9 +2197,9 @@ def OpenACC_LoopOp : OpenACC_Op<"loop", let hasCustomAssemblyFormat = 1; let assemblyFormat = [{ - custom($combined) oilist( - `gang` `` custom($gangOperands, type($gangOperands), + `combined` `(` custom($combined) `)` + | `gang` `` custom($gangOperands, type($gangOperands), $gangOperandsArgType, $gangOperandsDeviceType, $gangOperandsSegments, $gang) | `worker` `` custom( diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp index c4cc560e42f6a..91025e90b8e76 100644 --- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp +++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp @@ -1686,25 +1686,19 @@ static void printDeviceTypeOperandsWithKeywordOnly( static ParseResult parseCombinedConstructsLoop(mlir::OpAsmParser &parser, mlir::acc::CombinedConstructsTypeAttr &attr) { - if (succeeded(parser.parseOptionalKeyword("combined"))) { - if (parser.parseLParen()) - return failure(); - if (succeeded(parser.parseOptionalKeyword("kernels"))) { - attr = mlir::acc::CombinedConstructsTypeAttr::get( - parser.getContext(), mlir::acc::CombinedConstructsType::KernelsLoop); - } else if (succeeded(parser.parseOptionalKeyword("parallel"))) { - attr = mlir::acc::CombinedConstructsTypeAttr::get( - parser.getContext(), mlir::acc::CombinedConstructsType::ParallelLoop); - } else if (succeeded(parser.parseOptionalKeyword("serial"))) { - attr = mlir::acc::CombinedConstructsTypeAttr::get( - parser.getContext(), mlir::acc::CombinedConstructsType::SerialLoop); - } else { - parser.emitError(parser.getCurrentLocation(), - "expected compute construct name"); - return failure(); - } - if (parser.parseRParen()) - return failure(); + if (succeeded(parser.parseOptionalKeyword("kernels"))) { + attr = mlir::acc::CombinedConstructsTypeAttr::get( + parser.getContext(), mlir::acc::CombinedConstructsType::KernelsLoop); + } else if (succeeded(parser.parseOptionalKeyword("parallel"))) { + attr = mlir::acc::CombinedConstructsTypeAttr::get( + parser.getContext(), mlir::acc::CombinedConstructsType::ParallelLoop); + } else if (succeeded(parser.parseOptionalKeyword("serial"))) { + attr = mlir::acc::CombinedConstructsTypeAttr::get( + parser.getContext(), mlir::acc::CombinedConstructsType::SerialLoop); + } else { + parser.emitError(parser.getCurrentLocation(), + "expected compute construct name"); + return failure(); } return success(); } @@ -1715,13 +1709,13 @@ printCombinedConstructsLoop(mlir::OpAsmPrinter &p, mlir::Operation *op, if (attr) { switch (attr.getValue()) { case mlir::acc::CombinedConstructsType::KernelsLoop: - p << "combined(kernels)"; + p << "kernels"; break; case mlir::acc::CombinedConstructsType::ParallelLoop: - p << "combined(parallel)"; + p << "parallel"; break; case mlir::acc::CombinedConstructsType::SerialLoop: - p << "combined(serial)"; + p << "serial"; break; }; } From 0c3e331f621bfc7cdaacbd28b0337aaccb9d4acf Mon Sep 17 00:00:00 2001 From: Razvan Lupusoru Date: Tue, 29 Apr 2025 13:33:04 -0700 Subject: [PATCH 2/2] Ensure that combined appears first on acc.loop --- mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td index 28003e99aba5c..df7ff28ca5926 100644 --- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td +++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td @@ -2197,9 +2197,9 @@ def OpenACC_LoopOp : OpenACC_Op<"loop", let hasCustomAssemblyFormat = 1; let assemblyFormat = [{ + ( `combined` `(` custom($combined)^ `)` )? oilist( - `combined` `(` custom($combined) `)` - | `gang` `` custom($gangOperands, type($gangOperands), + `gang` `` custom($gangOperands, type($gangOperands), $gangOperandsArgType, $gangOperandsDeviceType, $gangOperandsSegments, $gang) | `worker` `` custom(