@@ -246,15 +246,15 @@ static LogicalResult printOperation(CppEmitter &emitter,
246246 return printConstantOp (emitter, operation, value);
247247}
248248
249- static LogicalResult printBinaryArithOperation (CppEmitter &emitter,
250- Operation *operation,
251- StringRef binaryArithOperator ) {
249+ static LogicalResult printBinaryOperation (CppEmitter &emitter,
250+ Operation *operation,
251+ StringRef binaryOperator ) {
252252 raw_ostream &os = emitter.ostream ();
253253
254254 if (failed (emitter.emitAssignPrefix (*operation)))
255255 return failure ();
256256 os << emitter.getOrCreateName (operation->getOperand (0 ));
257- os << " " << binaryArithOperator ;
257+ os << " " << binaryOperator ;
258258 os << " " << emitter.getOrCreateName (operation->getOperand (1 ));
259259
260260 return success ();
@@ -263,31 +263,65 @@ static LogicalResult printBinaryArithOperation(CppEmitter &emitter,
263263static LogicalResult printOperation (CppEmitter &emitter, emitc::AddOp addOp) {
264264 Operation *operation = addOp.getOperation ();
265265
266- return printBinaryArithOperation (emitter, operation, " +" );
266+ return printBinaryOperation (emitter, operation, " +" );
267267}
268268
269269static LogicalResult printOperation (CppEmitter &emitter, emitc::DivOp divOp) {
270270 Operation *operation = divOp.getOperation ();
271271
272- return printBinaryArithOperation (emitter, operation, " /" );
272+ return printBinaryOperation (emitter, operation, " /" );
273273}
274274
275275static LogicalResult printOperation (CppEmitter &emitter, emitc::MulOp mulOp) {
276276 Operation *operation = mulOp.getOperation ();
277277
278- return printBinaryArithOperation (emitter, operation, " *" );
278+ return printBinaryOperation (emitter, operation, " *" );
279279}
280280
281281static LogicalResult printOperation (CppEmitter &emitter, emitc::RemOp remOp) {
282282 Operation *operation = remOp.getOperation ();
283283
284- return printBinaryArithOperation (emitter, operation, " %" );
284+ return printBinaryOperation (emitter, operation, " %" );
285285}
286286
287287static LogicalResult printOperation (CppEmitter &emitter, emitc::SubOp subOp) {
288288 Operation *operation = subOp.getOperation ();
289289
290- return printBinaryArithOperation (emitter, operation, " -" );
290+ return printBinaryOperation (emitter, operation, " -" );
291+ }
292+
293+ static LogicalResult printOperation (CppEmitter &emitter, emitc::CmpOp cmpOp) {
294+ Operation *operation = cmpOp.getOperation ();
295+
296+ StringRef binaryOperator;
297+
298+ switch (cmpOp.getPredicate ()) {
299+ case emitc::CmpPredicate::eq:
300+ binaryOperator = " ==" ;
301+ break ;
302+ case emitc::CmpPredicate::ne:
303+ binaryOperator = " !=" ;
304+ break ;
305+ case emitc::CmpPredicate::lt:
306+ binaryOperator = " <" ;
307+ break ;
308+ case emitc::CmpPredicate::le:
309+ binaryOperator = " <=" ;
310+ break ;
311+ case emitc::CmpPredicate::gt:
312+ binaryOperator = " >" ;
313+ break ;
314+ case emitc::CmpPredicate::ge:
315+ binaryOperator = " >=" ;
316+ break ;
317+ case emitc::CmpPredicate::three_way:
318+ binaryOperator = " <=>" ;
319+ break ;
320+ default :
321+ return cmpOp.emitError (" unhandled comparison predicate" );
322+ }
323+
324+ return printBinaryOperation (emitter, operation, binaryOperator);
291325}
292326
293327static LogicalResult printOperation (CppEmitter &emitter,
@@ -977,8 +1011,8 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) {
9771011 [&](auto op) { return printOperation (*this , op); })
9781012 // EmitC ops.
9791013 .Case <emitc::AddOp, emitc::ApplyOp, emitc::CallOp, emitc::CastOp,
980- emitc::ConstantOp , emitc::DivOp , emitc::IncludeOp , emitc::MulOp ,
981- emitc::RemOp, emitc::SubOp, emitc::VariableOp>(
1014+ emitc::CmpOp , emitc::ConstantOp , emitc::DivOp , emitc::IncludeOp ,
1015+ emitc::MulOp, emitc:: RemOp, emitc::SubOp, emitc::VariableOp>(
9821016 [&](auto op) { return printOperation (*this , op); })
9831017 // Func ops.
9841018 .Case <func::CallOp, func::ConstantOp, func::FuncOp, func::ReturnOp>(
0 commit comments