|
MLIR 24.0.0git
|
#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"#include "mlir/Dialect/EmitC/IR/EmitC.h"#include "mlir/Dialect/EmitC/IR/EmitCInterfaces.h"#include "mlir/Dialect/Func/IR/FuncOps.h"#include "mlir/IR/BuiltinOps.h"#include "mlir/IR/BuiltinTypes.h"#include "mlir/IR/Dialect.h"#include "mlir/IR/Operation.h"#include "mlir/IR/SymbolTable.h"#include "mlir/IR/Value.h"#include "mlir/Support/IndentedOstream.h"#include "mlir/Support/LLVM.h"#include "mlir/Target/Cpp/CppEmitter.h"#include "llvm/ADT/ScopedHashTable.h"#include "llvm/ADT/StringExtras.h"#include "llvm/ADT/TypeSwitch.h"#include "llvm/Support/Casting.h"#include "llvm/Support/Debug.h"#include "llvm/Support/FormatVariadic.h"#include <stack>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "translate-to-cpp" |
Functions | |
| template<typename ForwardIterator, typename UnaryFunctor, typename NullaryFunctor> | |
| static LogicalResult | interleaveWithError (ForwardIterator begin, ForwardIterator end, UnaryFunctor eachFn, NullaryFunctor betweenFn) |
| Convenience functions to produce interleaved output with functions returning a LogicalResult. | |
| template<typename Container, typename UnaryFunctor> | |
| static LogicalResult | interleaveCommaWithError (const Container &c, raw_ostream &os, UnaryFunctor eachFn) |
| static FailureOr< int > | getOperatorPrecedence (Operation *operation) |
| Return the precedence of a operator as an integer, higher values imply higher precedence. | |
| static bool | shouldBeInlined (Operation *op) |
Determine whether operation op should be emitted inline, i.e. | |
| static emitc::GlobalOp | getConstGlobal (Value value, Operation *fromOp) |
| Helper function to check if a value traces back to a const global. | |
| static LogicalResult | emitAddressOfWithConstCast (CppEmitter &emitter, Operation &op, Value operand) |
| Emit address-of with a cast to strip const qualification. | |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::DereferenceOp dereferenceOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::GetFieldOp getFieldOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::GetGlobalOp getGlobalOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::LiteralOp literalOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::MemberOp memberOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::MemberOfPtrOp memberOfPtrOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::SubscriptOp subscriptOp) |
| static LogicalResult | printConstantOp (CppEmitter &emitter, Operation *operation, Attribute value) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::AddressOfOp addressOfOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::ConstantOp constantOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::VariableOp variableOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::GlobalOp globalOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::AssignOp assignOp) |
| static LogicalResult | printCompoundAssignmentOperation (CppEmitter &emitter, Operation *operation, StringRef compoundAssignmentOperator) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::AddAssignOp addAssignOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::SubAssignOp subAssignOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::MulAssignOp mulAssignOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::DivAssignOp divAssignOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::RemAssignOp remAssignOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::LoadOp loadOp) |
| static LogicalResult | printBinaryOperation (CppEmitter &emitter, Operation *operation, StringRef binaryOperator) |
| static LogicalResult | printUnaryOperation (CppEmitter &emitter, Operation *operation, StringRef unaryOperator) |
| static LogicalResult | printPostfixUnaryOperation (CppEmitter &emitter, Operation *operation, StringRef unaryOperator) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::AddOp addOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::DivOp divOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::MulOp mulOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::RemOp remOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::SubOp subOp) |
| static LogicalResult | emitSwitchCase (CppEmitter &emitter, raw_indented_ostream &os, Region ®ion) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::SwitchOp switchOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::DoOp doOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::CmpOp cmpOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::ConditionalOp conditionalOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::VerbatimOp verbatimOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, cf::BranchOp branchOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, cf::CondBranchOp condBranchOp) |
| static LogicalResult | printCallOperation (CppEmitter &emitter, Operation *callOp, StringRef callee) |
| static LogicalResult | printOperation (CppEmitter &emitter, func::CallOp callOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::CallOp callOp) |
| template<typename OpTy> | |
| static LogicalResult | printOpaqueCallCommon (CppEmitter &emitter, OpTy op, StringRef callee, std::optional< ArrayAttr > templateArgs, std::optional< ArrayAttr > args, bool isMemberCall, Value receiver=nullptr) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::CallOpaqueOp callOpaqueOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::MemberCallOpaqueOp memberCallOpaqueOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::BitwiseAndOp bitwiseAndOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::BitwiseLeftShiftOp bitwiseLeftShiftOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::BitwiseNotOp bitwiseNotOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::BitwiseOrOp bitwiseOrOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::BitwiseRightShiftOp bitwiseRightShiftOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::BitwiseXorOp bitwiseXorOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::PreIncrementOp preIncrementOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::PostIncrementOp postIncrementOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::PreDecrementOp preDecrementOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::PostDecrementOp postDecrementOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::UnaryPlusOp unaryPlusOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::UnaryMinusOp unaryMinusOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::CastOp castOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::ExpressionOp expressionOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::IncludeOp includeOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::LogicalAndOp logicalAndOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::LogicalNotOp logicalNotOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::LogicalOrOp logicalOrOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::ForOp forOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::IfOp ifOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, func::ReturnOp returnOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::ReturnOp returnOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, ModuleOp moduleOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, ClassOp classOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, FieldOp fieldOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, FileOp file) |
| static LogicalResult | printFunctionArgs (CppEmitter &emitter, Operation *functionOp, ArrayRef< Type > arguments) |
| static LogicalResult | printFunctionArgs (CppEmitter &emitter, Operation *functionOp, Region::BlockArgListType arguments) |
| static LogicalResult | printFunctionBody (CppEmitter &emitter, Operation *functionOp, Region::BlockListType &blocks) |
| static LogicalResult | printOperation (CppEmitter &emitter, func::FuncOp functionOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::FuncOp functionOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, DeclareFuncOp declareFuncOp) |
| #define DEBUG_TYPE "translate-to-cpp" |
Definition at line 30 of file TranslateToCpp.cpp.
|
static |
Emit address-of with a cast to strip const qualification.
Produces: (ResultType)(&operand)
Definition at line 425 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getResult(), mlir::Value::getType(), and success().
Referenced by printOperation().
|
static |
Definition at line 729 of file TranslateToCpp.cpp.
References mlir::Region::op_begin(), mlir::Region::op_end(), and success().
Referenced by printOperation().
Helper function to check if a value traces back to a const global.
Handles direct GetGlobalOp and GetGlobalOp through one or more SubscriptOps. Returns the GlobalOp if found and it has const_specifier, nullptr otherwise.
Definition at line 404 of file TranslateToCpp.cpp.
References mlir::Value::getDefiningOp(), and mlir::SymbolTable::lookupNearestSymbolFrom().
Referenced by printOperation().
|
static |
Return the precedence of a operator as an integer, higher values imply higher precedence.
Definition at line 66 of file TranslateToCpp.cpp.
|
inlinestatic |
Definition at line 58 of file TranslateToCpp.cpp.
References interleaveWithError().
Referenced by printFunctionArgs(), printFunctionArgs(), and printOpaqueCallCommon().
|
inlinestatic |
Convenience functions to produce interleaved output with functions returning a LogicalResult.
This is different than those in STLExtras as functions used on each element doesn't return a string.
Definition at line 42 of file TranslateToCpp.cpp.
References success().
Referenced by interleaveCommaWithError().
|
static |
Definition at line 648 of file TranslateToCpp.cpp.
References mlir::Operation::getOperand(), and success().
Referenced by printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), and printOperation().
|
static |
Definition at line 939 of file TranslateToCpp.cpp.
References success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 606 of file TranslateToCpp.cpp.
References mlir::Operation::getOperand().
Referenced by printOperation(), printOperation(), printOperation(), printOperation(), and printOperation().
|
static |
Definition at line 520 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getResult(), result, and success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 1370 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), and interleaveCommaWithError().
Referenced by printOperation(), printOperation(), and printOperation().
|
static |
Definition at line 1381 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Value::getType(), and interleaveCommaWithError().
|
static |
Definition at line 1393 of file TranslateToCpp.cpp.
References mlir::WalkResult::advance(), mlir::Operation::emitError(), mlir::Operation::emitOpError(), mlir::Operation::getParentOp(), mlir::Operation::getResults(), mlir::raw_indented_ostream::indent(), mlir::PreOrder, result, shouldBeInlined(), mlir::WalkResult::skip(), success(), mlir::raw_indented_ostream::unindent(), and mlir::Operation::walk().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 968 of file TranslateToCpp.cpp.
References interleaveCommaWithError(), and success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 871 of file TranslateToCpp.cpp.
References mlir::Block::getArguments(), mlir::Block::getSuccessor(), and success().
|
static |
Definition at line 891 of file TranslateToCpp.cpp.
References mlir::Block::getArguments(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1320 of file TranslateToCpp.cpp.
References mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1538 of file TranslateToCpp.cpp.
References mlir::SymbolTable::lookupNearestSymbolFrom(), printFunctionArgs(), and success().
|
static |
Definition at line 616 of file TranslateToCpp.cpp.
References printCompoundAssignmentOperation().
|
static |
Definition at line 699 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 552 of file TranslateToCpp.cpp.
References emitAddressOfWithConstCast(), and getConstGlobal().
|
static |
Definition at line 595 of file TranslateToCpp.cpp.
|
static |
Definition at line 1053 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1060 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1066 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1072 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1079 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1085 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 959 of file TranslateToCpp.cpp.
References printCallOperation().
|
static |
Definition at line 1036 of file TranslateToCpp.cpp.
References printOpaqueCallCommon().
|
static |
Definition at line 1127 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getResult(), and mlir::Value::getType().
|
static |
Definition at line 793 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 825 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 570 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), and printConstantOp().
|
static |
Definition at line 438 of file TranslateToCpp.cpp.
|
static |
Definition at line 631 of file TranslateToCpp.cpp.
References printCompoundAssignmentOperation().
|
static |
Definition at line 705 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 769 of file TranslateToCpp.cpp.
References mlir::Block::back(), mlir::Block::front(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1140 of file TranslateToCpp.cpp.
References shouldBeInlined(), and success().
|
static |
Definition at line 1184 of file TranslateToCpp.cpp.
References mlir::Value::getDefiningOp(), mlir::Region::getOps(), mlir::raw_indented_ostream::indent(), shouldBeInlined(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1497 of file TranslateToCpp.cpp.
References printFunctionArgs(), printFunctionBody(), and success().
|
static |
Definition at line 449 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 458 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 589 of file TranslateToCpp.cpp.
|
static |
Definition at line 1241 of file TranslateToCpp.cpp.
References mlir::Region::empty(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1153 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 467 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 641 of file TranslateToCpp.cpp.
|
static |
Definition at line 1166 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1172 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1178 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1045 of file TranslateToCpp.cpp.
References printOpaqueCallCommon().
|
static |
Definition at line 491 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 476 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 626 of file TranslateToCpp.cpp.
References printCompoundAssignmentOperation().
|
static |
Definition at line 711 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1109 of file TranslateToCpp.cpp.
References printPostfixUnaryOperation().
|
static |
Definition at line 1097 of file TranslateToCpp.cpp.
References printPostfixUnaryOperation().
|
static |
Definition at line 1103 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1091 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 636 of file TranslateToCpp.cpp.
References printCompoundAssignmentOperation().
|
static |
Definition at line 717 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1299 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 621 of file TranslateToCpp.cpp.
References printCompoundAssignmentOperation().
|
static |
Definition at line 723 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 502 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 740 of file TranslateToCpp.cpp.
References emitSwitchCase(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1121 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1115 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 581 of file TranslateToCpp.cpp.
References printConstantOp().
|
static |
Definition at line 848 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 1343 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 1359 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 952 of file TranslateToCpp.cpp.
References printCallOperation().
|
static |
Definition at line 1460 of file TranslateToCpp.cpp.
References printFunctionArgs(), printFunctionBody(), and success().
|
static |
Definition at line 1278 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 1312 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 683 of file TranslateToCpp.cpp.
References mlir::Operation::getOperand(), and success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 667 of file TranslateToCpp.cpp.
References mlir::Operation::getOperand(), and success().
Referenced by printOperation(), printOperation(), printOperation(), printOperation(), printOperation(), and printOperation().
Determine whether operation op should be emitted inline, i.e.
as part of its user. This function recommends inlining of any expressions that can be inlined unless it is used by another expression, under the assumption that any expression fusion/re-materialization was taken care of by transformations run by the backend.
Definition at line 342 of file TranslateToCpp.cpp.
References mlir::Operation::getParentOp(), and result.
Referenced by printFunctionBody(), printOperation(), and printOperation().