@@ -402,6 +402,57 @@ static bool shouldBeInlined(ExpressionOp expressionOp) {
402402 return false ;
403403}
404404
405+ static LogicalResult printOperation (CppEmitter &emitter,
406+ emitc::GetFieldOp getFieldOp) {
407+ emitter.cacheDeferredOpResult (getFieldOp.getResult (),
408+ getFieldOp.getFieldName ());
409+ return success ();
410+ }
411+
412+ static LogicalResult printOperation (CppEmitter &emitter,
413+ emitc::GetGlobalOp getGlobalOp) {
414+ emitter.cacheDeferredOpResult (getGlobalOp.getResult (), getGlobalOp.getName ());
415+ return success ();
416+ }
417+
418+ static LogicalResult printOperation (CppEmitter &emitter,
419+ emitc::LiteralOp literalOp) {
420+ emitter.cacheDeferredOpResult (literalOp.getResult (), literalOp.getValue ());
421+ return success ();
422+ }
423+
424+ static LogicalResult printOperation (CppEmitter &emitter,
425+ emitc::MemberOp memberOp) {
426+ std::string out;
427+ llvm::raw_string_ostream ss (out);
428+ ss << emitter.getOrCreateName (memberOp.getOperand ());
429+ ss << " ." << memberOp.getMember ();
430+ emitter.cacheDeferredOpResult (memberOp.getResult (), out);
431+ return success ();
432+ }
433+
434+ static LogicalResult printOperation (CppEmitter &emitter,
435+ emitc::MemberOfPtrOp memberOfPtrOp) {
436+ std::string out;
437+ llvm::raw_string_ostream ss (out);
438+ ss << emitter.getOrCreateName (memberOfPtrOp.getOperand ());
439+ ss << " ->" << memberOfPtrOp.getMember ();
440+ emitter.cacheDeferredOpResult (memberOfPtrOp.getResult (), out);
441+ return success ();
442+ }
443+
444+ static LogicalResult printOperation (CppEmitter &emitter,
445+ emitc::SubscriptOp subscriptOp) {
446+ std::string out;
447+ llvm::raw_string_ostream ss (out);
448+ ss << emitter.getOrCreateName (subscriptOp.getValue ());
449+ for (auto index : subscriptOp.getIndices ()) {
450+ ss << " [" << emitter.getOrCreateName (index) << " ]" ;
451+ }
452+ emitter.cacheDeferredOpResult (subscriptOp.getResult (), out);
453+ return success ();
454+ }
455+
405456static LogicalResult printConstantOp (CppEmitter &emitter, Operation *operation,
406457 Attribute value) {
407458 OpResult result = operation->getResult (0 );
@@ -1761,41 +1812,19 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) {
17611812 emitc::CmpOp, emitc::ConditionalOp, emitc::ConstantOp,
17621813 emitc::DeclareFuncOp, emitc::DivOp, emitc::DoOp,
17631814 emitc::ExpressionOp, emitc::FieldOp, emitc::FileOp,
1764- emitc::ForOp, emitc::FuncOp, emitc::GlobalOp, emitc::IfOp,
1765- emitc::IncludeOp, emitc::LoadOp, emitc::LogicalAndOp,
1766- emitc::LogicalNotOp, emitc::LogicalOrOp, emitc::MulOp,
1767- emitc::RemOp, emitc::ReturnOp, emitc::SubOp, emitc::SwitchOp,
1768- emitc::UnaryMinusOp, emitc::UnaryPlusOp, emitc::VariableOp,
1769- emitc::VerbatimOp>(
1815+ emitc::ForOp, emitc::FuncOp, emitc::GetFieldOp,
1816+ emitc::GetGlobalOp, emitc::GlobalOp, emitc::IfOp,
1817+ emitc::IncludeOp, emitc::LiteralOp, emitc::LoadOp,
1818+ emitc::LogicalAndOp, emitc::LogicalNotOp, emitc::LogicalOrOp,
1819+ emitc::MemberOfPtrOp, emitc::MemberOp, emitc::MulOp,
1820+ emitc::RemOp, emitc::ReturnOp, emitc::SubscriptOp, emitc::SubOp,
1821+ emitc::SwitchOp, emitc::UnaryMinusOp, emitc::UnaryPlusOp,
1822+ emitc::VariableOp, emitc::VerbatimOp>(
17701823
17711824 [&](auto op) { return printOperation (*this , op); })
17721825 // Func ops.
17731826 .Case <func::CallOp, func::FuncOp, func::ReturnOp>(
17741827 [&](auto op) { return printOperation (*this , op); })
1775- .Case <emitc::GetGlobalOp>([&](auto op) {
1776- cacheDeferredOpResult (op.getResult (), op.getName ());
1777- return success ();
1778- })
1779- .Case <emitc::GetFieldOp>([&](auto op) {
1780- cacheDeferredOpResult (op.getResult (), op.getFieldName ());
1781- return success ();
1782- })
1783- .Case <emitc::LiteralOp>([&](auto op) {
1784- cacheDeferredOpResult (op.getResult (), op.getValue ());
1785- return success ();
1786- })
1787- .Case <emitc::MemberOp>([&](auto op) {
1788- cacheDeferredOpResult (op.getResult (), createMemberAccess (op));
1789- return success ();
1790- })
1791- .Case <emitc::MemberOfPtrOp>([&](auto op) {
1792- cacheDeferredOpResult (op.getResult (), createMemberAccess (op));
1793- return success ();
1794- })
1795- .Case <emitc::SubscriptOp>([&](auto op) {
1796- cacheDeferredOpResult (op.getResult (), getSubscriptName (op));
1797- return success ();
1798- })
17991828 .Default ([&](Operation *) {
18001829 return op.emitOpError (" unable to find printer for op" );
18011830 });
0 commit comments