|
MLIR 23.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, typename NullaryFunctor> | |
| static LogicalResult | interleaveWithError (const Container &c, UnaryFunctor eachFn, NullaryFunctor betweenFn) |
| 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 | 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 | 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) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::CallOpaqueOp callOpaqueOp) |
| static LogicalResult | printOperation (CppEmitter &emitter, emitc::ApplyOp applyOp) |
| 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::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 427 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getResult(), mlir::Value::getType(), and success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 675 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 406 of file TranslateToCpp.cpp.
References mlir::Value::getDefiningOp(), and mlir::SymbolTable::lookupNearestSymbolFrom().
Referenced by printOperation(), and printOperation().
|
static |
Return the precedence of a operator as an integer, higher values imply higher precedence.
Definition at line 73 of file TranslateToCpp.cpp.
|
inlinestatic |
Definition at line 65 of file TranslateToCpp.cpp.
References interleaveWithError().
Referenced by printFunctionArgs(), printFunctionArgs(), and printOperation().
|
inlinestatic |
Definition at line 58 of file TranslateToCpp.cpp.
References interleaveWithError().
|
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(), and interleaveWithError().
|
static |
Definition at line 610 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 885 of file TranslateToCpp.cpp.
References success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 518 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getResult(), result, and success().
Referenced by printOperation(), and printOperation().
|
static |
Definition at line 1271 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), and interleaveCommaWithError().
Referenced by printOperation(), printOperation(), and printOperation().
|
static |
Definition at line 1282 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Value::getType(), and interleaveCommaWithError().
|
static |
Definition at line 1294 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 817 of file TranslateToCpp.cpp.
References mlir::Block::getArguments(), mlir::Block::getSuccessor(), and success().
|
static |
Definition at line 837 of file TranslateToCpp.cpp.
References mlir::Block::getArguments(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1226 of file TranslateToCpp.cpp.
References mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1439 of file TranslateToCpp.cpp.
References mlir::SymbolTable::lookupNearestSymbolFrom(), printFunctionArgs(), and success().
|
static |
Definition at line 645 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 550 of file TranslateToCpp.cpp.
References emitAddressOfWithConstCast(), and getConstGlobal().
|
static |
Definition at line 964 of file TranslateToCpp.cpp.
References emitAddressOfWithConstCast(), and getConstGlobal().
|
static |
Definition at line 593 of file TranslateToCpp.cpp.
|
static |
Definition at line 983 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 990 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 996 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1002 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1009 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1015 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 905 of file TranslateToCpp.cpp.
References printCallOperation().
|
static |
Definition at line 912 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getOperand(), interleaveCommaWithError(), and success().
|
static |
Definition at line 1033 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Operation::getResult(), and mlir::Value::getType().
|
static |
Definition at line 739 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 771 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 568 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), and printConstantOp().
|
static |
Definition at line 440 of file TranslateToCpp.cpp.
|
static |
Definition at line 651 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 715 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 1046 of file TranslateToCpp.cpp.
References shouldBeInlined(), and success().
|
static |
Definition at line 1090 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 1398 of file TranslateToCpp.cpp.
References printFunctionArgs(), printFunctionBody(), and success().
|
static |
Definition at line 451 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 460 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 587 of file TranslateToCpp.cpp.
|
static |
Definition at line 1147 of file TranslateToCpp.cpp.
References mlir::Region::empty(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1059 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 469 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 603 of file TranslateToCpp.cpp.
|
static |
Definition at line 1072 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1078 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1084 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 489 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 478 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 657 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 663 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1205 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 669 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 500 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 686 of file TranslateToCpp.cpp.
References emitSwitchCase(), mlir::raw_indented_ostream::indent(), success(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1027 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 1021 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 579 of file TranslateToCpp.cpp.
References printConstantOp().
|
static |
Definition at line 794 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 1244 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 1260 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 898 of file TranslateToCpp.cpp.
References printCallOperation().
|
static |
Definition at line 1361 of file TranslateToCpp.cpp.
References printFunctionArgs(), printFunctionBody(), and success().
|
static |
Definition at line 1184 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 1218 of file TranslateToCpp.cpp.
References success().
|
static |
Definition at line 629 of file TranslateToCpp.cpp.
References mlir::Operation::getOperand(), and success().
Referenced by 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 344 of file TranslateToCpp.cpp.
References mlir::Operation::getParentOp(), and result.
Referenced by printFunctionBody(), printOperation(), and printOperation().