@@ -100,6 +100,7 @@ static FailureOr<int> getOperatorPrecedence(Operation *operation) {
100100 .Case <emitc::ConstantOp>([&](auto op) { return 17 ; })
101101 .Case <emitc::DivOp>([&](auto op) { return 13 ; })
102102 .Case <emitc::LoadOp>([&](auto op) { return 16 ; })
103+ .Case <emitc::LiteralOp>([&](auto op) { return 16 ; })
103104 .Case <emitc::LogicalAndOp>([&](auto op) { return 4 ; })
104105 .Case <emitc::LogicalNotOp>([&](auto op) { return 15 ; })
105106 .Case <emitc::LogicalOrOp>([&](auto op) { return 3 ; })
@@ -452,6 +453,16 @@ static LogicalResult printOperation(CppEmitter &emitter, emitc::LoadOp loadOp) {
452453 return emitter.emitOperand (loadOp.getOperand ());
453454}
454455
456+ static LogicalResult printOperation (CppEmitter &emitter,
457+ emitc::LiteralOp literalOp) {
458+ // If literalOp is used inside an expression, we treat it as an embedded one.
459+ if (emitter.isPartOfCurrentExpression (literalOp.getResult ()))
460+ return emitter.ostream () << literalOp.getValue (), success ();
461+
462+ emitter.cacheDeferredOpResult (literalOp.getResult (), literalOp.getValue ());
463+ return success ();
464+ }
465+
455466static LogicalResult printBinaryOperation (CppEmitter &emitter,
456467 Operation *operation,
457468 StringRef binaryOperator) {
@@ -1714,10 +1725,10 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) {
17141725 emitc::DeclareFuncOp, emitc::DivOp, emitc::ExpressionOp,
17151726 emitc::FieldOp, emitc::FileOp, emitc::ForOp, emitc::FuncOp,
17161727 emitc::GlobalOp, emitc::IfOp, emitc::IncludeOp, emitc::LoadOp,
1717- emitc::LogicalAndOp , emitc::LogicalNotOp , emitc::LogicalOrOp ,
1718- emitc::MulOp , emitc::RemOp , emitc::ReturnOp , emitc::SubOp ,
1719- emitc::SwitchOp , emitc::UnaryMinusOp , emitc::UnaryPlusOp ,
1720- emitc::VariableOp, emitc::VerbatimOp>(
1728+ emitc::LiteralOp , emitc::LogicalAndOp , emitc::LogicalNotOp ,
1729+ emitc::LogicalOrOp , emitc::MulOp , emitc::RemOp , emitc::ReturnOp ,
1730+ emitc::SubOp , emitc::SwitchOp , emitc::UnaryMinusOp ,
1731+ emitc::UnaryPlusOp, emitc:: VariableOp, emitc::VerbatimOp>(
17211732
17221733 [&](auto op) { return printOperation (*this , op); })
17231734 // Func ops.
@@ -1731,10 +1742,6 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) {
17311742 cacheDeferredOpResult (op.getResult (), op.getFieldName ());
17321743 return success ();
17331744 })
1734- .Case <emitc::LiteralOp>([&](auto op) {
1735- cacheDeferredOpResult (op.getResult (), op.getValue ());
1736- return success ();
1737- })
17381745 .Case <emitc::MemberOp>([&](auto op) {
17391746 cacheDeferredOpResult (op.getResult (), createMemberAccess (op));
17401747 return success ();
0 commit comments