@@ -48,52 +48,6 @@ using namespace NVVM;
4848#include " mlir/Dialect/LLVMIR/NVVMOpsDialect.cpp.inc"
4949#include " mlir/Dialect/LLVMIR/NVVMOpsEnums.cpp.inc"
5050
51- // ===----------------------------------------------------------------------===//
52- // Printing/parsing for NVVM ops
53- // ===----------------------------------------------------------------------===//
54-
55- static void printNVVMIntrinsicOp (OpAsmPrinter &p, Operation *op) {
56- p << " " << op->getOperands ();
57- if (op->getNumResults () > 0 )
58- p << " : " << op->getResultTypes ();
59- }
60-
61- static ParseResult parseVoteOps (OpAsmParser &parser, OperationState &result) {
62- MLIRContext *context = parser.getContext ();
63- auto int32Ty = IntegerType::get (context, 32 );
64- auto int1Ty = IntegerType::get (context, 1 );
65-
66- SmallVector<OpAsmParser::UnresolvedOperand, 8 > ops;
67- Type type;
68- return failure (parser.parseOperandList (ops) ||
69- parser.parseOptionalAttrDict (result.attributes ) ||
70- parser.parseColonType (type) ||
71- parser.addTypeToList (type, result.types ) ||
72- parser.resolveOperands (ops, {int32Ty, int1Ty},
73- parser.getNameLoc (), result.operands ));
74- }
75-
76- // <operation> ::= `llvm.nvvm.vote.ballot.sync %mask, %pred` : result_type
77- ParseResult VoteBallotOp::parse (OpAsmParser &parser, OperationState &result) {
78- return parseVoteOps (parser, result);
79- }
80-
81- void VoteBallotOp::print (OpAsmPrinter &p) { printNVVMIntrinsicOp (p, *this ); }
82-
83- // <operation> ::= `llvm.nvvm.vote.all.sync %mask, %pred` : result_type
84- ParseResult VoteAllSyncOp::parse (OpAsmParser &parser, OperationState &result) {
85- return parseVoteOps (parser, result);
86- }
87-
88- void VoteAllSyncOp::print (OpAsmPrinter &p) { printNVVMIntrinsicOp (p, *this ); }
89-
90- // <operation> ::= `llvm.nvvm.vote.any.sync %mask, %pred` : result_type
91- ParseResult VoteAnySyncOp::parse (OpAsmParser &parser, OperationState &result) {
92- return parseVoteOps (parser, result);
93- }
94-
95- void VoteAnySyncOp::print (OpAsmPrinter &p) { printNVVMIntrinsicOp (p, *this ); }
96-
9751// ===----------------------------------------------------------------------===//
9852// Verifier methods
9953// ===----------------------------------------------------------------------===//
@@ -1178,6 +1132,19 @@ LogicalResult NVVM::MatchSyncOp::verify() {
11781132 return success ();
11791133}
11801134
1135+ LogicalResult NVVM::VoteSyncOp::verify () {
1136+ if (getKind () == NVVM::VoteSyncKind::ballot) {
1137+ if (!getType ().isInteger (32 )) {
1138+ return emitOpError (" vote.sync 'ballot' returns an i32" );
1139+ }
1140+ } else {
1141+ if (!getType ().isInteger (1 )) {
1142+ return emitOpError (" match.sync 'any', 'all' and 'uni' returns an i1" );
1143+ }
1144+ }
1145+ return success ();
1146+ }
1147+
11811148// ===----------------------------------------------------------------------===//
11821149// getIntrinsicID/getIntrinsicIDAndArgs methods
11831150// ===----------------------------------------------------------------------===//
0 commit comments