|
9 | 9 | #include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
|
10 | 10 | #include "mlir/Dialect/EmitC/IR/EmitC.h"
|
11 | 11 | #include "mlir/Dialect/Func/IR/FuncOps.h"
|
| 12 | +#include "mlir/IR/Attributes.h" |
12 | 13 | #include "mlir/IR/BuiltinOps.h"
|
13 | 14 | #include "mlir/IR/BuiltinTypes.h"
|
14 | 15 | #include "mlir/IR/Dialect.h"
|
|
24 | 25 | #include "llvm/ADT/TypeSwitch.h"
|
25 | 26 | #include "llvm/Support/Debug.h"
|
26 | 27 | #include "llvm/Support/FormatVariadic.h"
|
| 28 | +#include "llvm/Support/LogicalResult.h" |
27 | 29 | #include <stack>
|
28 | 30 | #include <utility>
|
29 | 31 |
|
@@ -1038,6 +1040,28 @@ static LogicalResult printOperation(CppEmitter &emitter,
|
1038 | 1040 | return success();
|
1039 | 1041 | }
|
1040 | 1042 |
|
| 1043 | +static LogicalResult printOperation(CppEmitter &emitter, |
| 1044 | + BufferMapOp bufferMapOp) { |
| 1045 | + raw_indented_ostream &os = emitter.ostream(); |
| 1046 | + os << "const std::map<std::string, char*> _buffer_map {\n"; |
| 1047 | + os.indent(); |
| 1048 | + auto buf = bufferMapOp.getFields(); |
| 1049 | + for (auto field : *buf) { |
| 1050 | + os << "{ \"" << field << "\", reinterpret_cast<char*>(&" << field |
| 1051 | + << ") },\n"; |
| 1052 | + } |
| 1053 | + os.unindent(); |
| 1054 | + os << "};\n"; |
| 1055 | + |
| 1056 | + os << "char* getBufferForName(const std::string& name) const {\n"; |
| 1057 | + os.indent(); |
| 1058 | + os << "auto it = _buffer_map.find(name);\n"; |
| 1059 | + os << "return (it == _buffer_map.end()) ? nullptr : it->second;\n"; |
| 1060 | + os.unindent(); |
| 1061 | + os << "}\n"; |
| 1062 | + return success(); |
| 1063 | +} |
| 1064 | + |
1041 | 1065 | static LogicalResult printOperation(CppEmitter &emitter, FileOp file) {
|
1042 | 1066 | if (!emitter.shouldEmitFile(file))
|
1043 | 1067 | return success();
|
@@ -1645,17 +1669,17 @@ LogicalResult CppEmitter::emitOperation(Operation &op, bool trailingSemicolon) {
|
1645 | 1669 | .Case<emitc::AddOp, emitc::ApplyOp, emitc::AssignOp,
|
1646 | 1670 | emitc::BitwiseAndOp, emitc::BitwiseLeftShiftOp,
|
1647 | 1671 | emitc::BitwiseNotOp, emitc::BitwiseOrOp,
|
1648 |
| - emitc::BitwiseRightShiftOp, emitc::BitwiseXorOp, emitc::CallOp, |
1649 |
| - emitc::CallOpaqueOp, emitc::CastOp, emitc::ClassOp, |
1650 |
| - emitc::CmpOp, emitc::ConditionalOp, emitc::ConstantOp, |
1651 |
| - emitc::DeclareFuncOp, emitc::DivOp, emitc::ExpressionOp, |
1652 |
| - emitc::FieldOp, emitc::FileOp, emitc::ForOp, emitc::FuncOp, |
1653 |
| - emitc::GetFieldOp, emitc::GlobalOp, emitc::IfOp, |
1654 |
| - emitc::IncludeOp, emitc::LoadOp, emitc::LogicalAndOp, |
1655 |
| - emitc::LogicalNotOp, emitc::LogicalOrOp, emitc::MulOp, |
1656 |
| - emitc::RemOp, emitc::ReturnOp, emitc::SubOp, emitc::SwitchOp, |
1657 |
| - emitc::UnaryMinusOp, emitc::UnaryPlusOp, emitc::VariableOp, |
1658 |
| - emitc::VerbatimOp>( |
| 1672 | + emitc::BitwiseRightShiftOp, emitc::BitwiseXorOp, |
| 1673 | + emitc::BufferMapOp, emitc::CallOp, emitc::CallOpaqueOp, |
| 1674 | + emitc::CastOp, emitc::ClassOp, emitc::CmpOp, |
| 1675 | + emitc::ConditionalOp, emitc::ConstantOp, emitc::DeclareFuncOp, |
| 1676 | + emitc::DivOp, emitc::ExpressionOp, emitc::FieldOp, |
| 1677 | + emitc::FileOp, emitc::ForOp, emitc::FuncOp, emitc::GetFieldOp, |
| 1678 | + emitc::GlobalOp, emitc::IfOp, emitc::IncludeOp, emitc::LoadOp, |
| 1679 | + emitc::LogicalAndOp, emitc::LogicalNotOp, emitc::LogicalOrOp, |
| 1680 | + emitc::MulOp, emitc::RemOp, emitc::ReturnOp, emitc::SubOp, |
| 1681 | + emitc::SwitchOp, emitc::UnaryMinusOp, emitc::UnaryPlusOp, |
| 1682 | + emitc::VariableOp, emitc::VerbatimOp>( |
1659 | 1683 |
|
1660 | 1684 | [&](auto op) { return printOperation(*this, op); })
|
1661 | 1685 | // Func ops.
|
|
0 commit comments