diff options
Diffstat (limited to 'mlir/lib/Target/Cpp/TranslateToCpp.cpp')
-rw-r--r-- | mlir/lib/Target/Cpp/TranslateToCpp.cpp | 48 |
1 files changed, 22 insertions, 26 deletions
diff --git a/mlir/lib/Target/Cpp/TranslateToCpp.cpp b/mlir/lib/Target/Cpp/TranslateToCpp.cpp index dcd2e11..8e83e45 100644 --- a/mlir/lib/Target/Cpp/TranslateToCpp.cpp +++ b/mlir/lib/Target/Cpp/TranslateToCpp.cpp @@ -333,7 +333,8 @@ private: /// Determine whether expression \p op should be emitted in a deferred way. static bool hasDeferredEmission(Operation *op) { return isa_and_nonnull<emitc::GetGlobalOp, emitc::LiteralOp, emitc::MemberOp, - emitc::MemberOfPtrOp, emitc::SubscriptOp>(op); + emitc::MemberOfPtrOp, emitc::SubscriptOp, + emitc::GetFieldOp>(op); } /// Determine whether expression \p expressionOp should be emitted inline, i.e. @@ -1049,25 +1050,17 @@ static LogicalResult printOperation(CppEmitter &emitter, ClassOp classOp) { static LogicalResult printOperation(CppEmitter &emitter, FieldOp fieldOp) { raw_ostream &os = emitter.ostream(); - if (failed(emitter.emitType(fieldOp->getLoc(), fieldOp.getType()))) + if (failed(emitter.emitVariableDeclaration( + fieldOp->getLoc(), fieldOp.getType(), fieldOp.getSymName()))) return failure(); - os << " " << fieldOp.getSymName() << ";"; - return success(); -} - -static LogicalResult printOperation(CppEmitter &emitter, - GetFieldOp getFieldOp) { - raw_indented_ostream &os = emitter.ostream(); - - Value result = getFieldOp.getResult(); - if (failed(emitter.emitType(getFieldOp->getLoc(), result.getType()))) - return failure(); - os << " "; - if (failed(emitter.emitOperand(result))) - return failure(); - os << " = "; + std::optional<Attribute> initialValue = fieldOp.getInitialValue(); + if (initialValue) { + os << " = "; + if (failed(emitter.emitAttribute(fieldOp->getLoc(), *initialValue))) + return failure(); + } - os << getFieldOp.getFieldName().str(); + os << ";"; return success(); } @@ -1204,7 +1197,7 @@ static LogicalResult printOperation(CppEmitter &emitter, os << ") {\n"; if (failed(printFunctionBody(emitter, operation, functionOp.getBlocks()))) return failure(); - os << "}\n"; + os << "}"; return success(); } @@ -1245,7 +1238,7 @@ static LogicalResult printOperation(CppEmitter &emitter, os << ") {\n"; if (failed(printFunctionBody(emitter, operation, functionOp.getBlocks()))) return failure(); - os << "}\n"; + os << "}"; return success(); } @@ -1700,12 +1693,11 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) { emitc::CmpOp, emitc::ConditionalOp, emitc::ConstantOp, emitc::DeclareFuncOp, emitc::DivOp, emitc::ExpressionOp, emitc::FieldOp, emitc::FileOp, emitc::ForOp, emitc::FuncOp, - emitc::GetFieldOp, emitc::GlobalOp, emitc::IfOp, - emitc::IncludeOp, emitc::LoadOp, emitc::LogicalAndOp, - emitc::LogicalNotOp, emitc::LogicalOrOp, emitc::MulOp, - emitc::RemOp, emitc::ReturnOp, emitc::SubOp, emitc::SwitchOp, - emitc::UnaryMinusOp, emitc::UnaryPlusOp, emitc::VariableOp, - emitc::VerbatimOp>( + emitc::GlobalOp, emitc::IfOp, emitc::IncludeOp, emitc::LoadOp, + emitc::LogicalAndOp, emitc::LogicalNotOp, emitc::LogicalOrOp, + emitc::MulOp, emitc::RemOp, emitc::ReturnOp, emitc::SubOp, + emitc::SwitchOp, emitc::UnaryMinusOp, emitc::UnaryPlusOp, + emitc::VariableOp, emitc::VerbatimOp>( [&](auto op) { return printOperation(*this, op); }) // Func ops. @@ -1715,6 +1707,10 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) { cacheDeferredOpResult(op.getResult(), op.getName()); return success(); }) + .Case<emitc::GetFieldOp>([&](auto op) { + cacheDeferredOpResult(op.getResult(), op.getFieldName()); + return success(); + }) .Case<emitc::LiteralOp>([&](auto op) { cacheDeferredOpResult(op.getResult(), op.getValue()); return success(); |