Skip to content

Commit 9be980c

Browse files
authored
[mlir][emitc] Unify API for deferred emission (llvm#167532)
This patch adds `printOperation()` functions for deferred emission ops in order to unify the API used for emitting operations. No functional change intended.
1 parent da9015a commit 9be980c

File tree

1 file changed

+59
-30
lines changed

1 file changed

+59
-30
lines changed

mlir/lib/Target/Cpp/TranslateToCpp.cpp

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
405456
static 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

Comments
 (0)