================
@@ -372,6 +372,91 @@ LogicalResult cir::DeleteArrayOp::verify() {
return success();
}
+//===----------------------------------------------------------------------===//
+// AssumeOp
+//===----------------------------------------------------------------------===//
+
+static void printAssumeBundle(OpAsmPrinter &p, cir::AssumeOp op,
+ cir::AssumeBundleKindAttr kindAttr,
+ OperandRange bundleArgs,
+ TypeRange bundleArgTypes) {
+ cir::AssumeBundleKind kind = kindAttr.getValue();
+ if (kind == cir::AssumeBundleKind::None)
+ return;
+
+ p << " " << cir::stringifyAssumeBundleKind(kind);
+ if (bundleArgs.empty())
+ return;
+
+ p << "(";
+ p.printOperands(bundleArgs);
+ p << " : ";
+ llvm::interleaveComma(bundleArgTypes, p);
+ p << ")";
+}
+
+static ParseResult parseAssumeBundle(
+ OpAsmParser &p, cir::AssumeBundleKindAttr &bundleKindAttr,
+ llvm::SmallVector<mlir::OpAsmParser::UnresolvedOperand, 4> &bundleArgs,
+ llvm::SmallVector<mlir::Type, 1> &bundleArgTypes) {
+ StringRef keyword;
+ auto loc = p.getCurrentLocation();
+ if (failed(p.parseOptionalKeyword(&keyword))) {
+ bundleKindAttr = cir::AssumeBundleKindAttr::get(
+ p.getContext(), cir::AssumeBundleKind::None);
+ return success();
+ }
+
+ std::optional<cir::AssumeBundleKind> parsedKind =
+ cir::symbolizeAssumeBundleKind(keyword);
+ if (!parsedKind)
+ return p.emitError(loc, "unknown assume bundle kind '") << keyword << "'";
+
+ bundleKindAttr = cir::AssumeBundleKindAttr::get(p.getContext(), *parsedKind);
+
+ if (p.parseOptionalLParen())
+ return success();
+
+ if (p.parseOperandList(bundleArgs) || p.parseColon() ||
+ p.parseTypeList(bundleArgTypes) || p.parseRParen())
+ return failure();
+
+ return success();
+}
+
+LogicalResult cir::AssumeOp::verify() {
+ cir::AssumeBundleKind kind = getBundleKind();
+ size_t numArgs = getBundleArgs().size();
+
+ if (kind == cir::AssumeBundleKind::None) {
+ if (numArgs != 0)
+ return emitOpError("unexpected bundle operands for kind 'none'");
+ return success();
+ }
+
+ if (numArgs == 0)
+ return emitOpError("expected bundle operands for kind '")
----------------
erichkeane wrote:
needs to be tested.
https://github.com/llvm/llvm-project/pull/197262
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits