@@ -112,6 +112,10 @@ static FailureOr<int> getOperatorPrecedence(Operation *operation) {
112112 .Case ([&](emitc::MemberOfPtrOp op) { return 17 ; })
113113 .Case ([&](emitc::MemberOp op) { return 17 ; })
114114 .Case ([&](emitc::MulOp op) { return 13 ; })
115+ .Case ([&](emitc::PostDecrementOp op) { return 16 ; })
116+ .Case ([&](emitc::PostIncrementOp op) { return 16 ; })
117+ .Case ([&](emitc::PreDecrementOp op) { return 15 ; })
118+ .Case ([&](emitc::PreIncrementOp op) { return 15 ; })
115119 .Case ([&](emitc::RemOp op) { return 13 ; })
116120 .Case ([&](emitc::SubOp op) { return 12 ; })
117121 .Case ([&](emitc::SubscriptOp op) { return 17 ; })
@@ -646,6 +650,22 @@ static LogicalResult printUnaryOperation(CppEmitter &emitter,
646650 return success ();
647651}
648652
653+ static LogicalResult printPostfixUnaryOperation (CppEmitter &emitter,
654+ Operation *operation,
655+ StringRef unaryOperator) {
656+ raw_ostream &os = emitter.ostream ();
657+
658+ if (failed (emitter.emitAssignPrefix (*operation)))
659+ return failure ();
660+
661+ if (failed (emitter.emitOperand (operation->getOperand (0 ))))
662+ return failure ();
663+
664+ os << unaryOperator;
665+
666+ return success ();
667+ }
668+
649669static LogicalResult printOperation (CppEmitter &emitter, emitc::AddOp addOp) {
650670 Operation *operation = addOp.getOperation ();
651671
@@ -1038,6 +1058,30 @@ static LogicalResult printOperation(CppEmitter &emitter,
10381058 return printBinaryOperation (emitter, operation, " ^" );
10391059}
10401060
1061+ static LogicalResult printOperation (CppEmitter &emitter,
1062+ emitc::PreIncrementOp preIncrementOp) {
1063+ Operation *operation = preIncrementOp.getOperation ();
1064+ return printUnaryOperation (emitter, operation, " ++" );
1065+ }
1066+
1067+ static LogicalResult printOperation (CppEmitter &emitter,
1068+ emitc::PostIncrementOp postIncrementOp) {
1069+ Operation *operation = postIncrementOp.getOperation ();
1070+ return printPostfixUnaryOperation (emitter, operation, " ++" );
1071+ }
1072+
1073+ static LogicalResult printOperation (CppEmitter &emitter,
1074+ emitc::PreDecrementOp preDecrementOp) {
1075+ Operation *operation = preDecrementOp.getOperation ();
1076+ return printUnaryOperation (emitter, operation, " --" );
1077+ }
1078+
1079+ static LogicalResult printOperation (CppEmitter &emitter,
1080+ emitc::PostDecrementOp postDecrementOp) {
1081+ Operation *operation = postDecrementOp.getOperation ();
1082+ return printPostfixUnaryOperation (emitter, operation, " --" );
1083+ }
1084+
10411085static LogicalResult printOperation (CppEmitter &emitter,
10421086 emitc::UnaryPlusOp unaryPlusOp) {
10431087 Operation *operation = unaryPlusOp.getOperation ();
@@ -1896,7 +1940,9 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) {
18961940 emitc::IncludeOp, emitc::LiteralOp, emitc::LoadOp,
18971941 emitc::LogicalAndOp, emitc::LogicalNotOp, emitc::LogicalOrOp,
18981942 emitc::MemberCallOpaqueOp, emitc::MemberOfPtrOp,
1899- emitc::MemberOp, emitc::MulOp, emitc::RemOp, emitc::ReturnOp,
1943+ emitc::MemberOp, emitc::MulOp, emitc::PostDecrementOp,
1944+ emitc::PostIncrementOp, emitc::PreDecrementOp,
1945+ emitc::PreIncrementOp, emitc::RemOp, emitc::ReturnOp,
19001946 emitc::SubscriptOp, emitc::SubOp, emitc::SwitchOp,
19011947 emitc::UnaryMinusOp, emitc::UnaryPlusOp, emitc::VariableOp,
19021948 emitc::VerbatimOp>(
0 commit comments