MLIR
22.0.0git
|
#include "mlir/Dialect/ControlFlow/IR/ControlFlowOps.h"
#include "mlir/Dialect/EmitC/IR/EmitC.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/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. More... | |
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. More... | |
static bool | hasDeferredEmission (Operation *op) |
Determine whether expression op should be emitted in a deferred way. More... | |
static bool | shouldBeInlined (ExpressionOp expressionOp) |
Determine whether expression expressionOp should be emitted inline, i.e. More... | |
static LogicalResult | printConstantOp (CppEmitter &emitter, Operation *operation, Attribute value) |
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 28 of file TranslateToCpp.cpp.
|
static |
Definition at line 544 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Region::op_begin(), and mlir::Region::op_end().
Referenced by printOperation().
|
static |
Return the precedence of a operator as an integer, higher values imply higher precedence.
Definition at line 71 of file TranslateToCpp.cpp.
|
static |
Determine whether expression op
should be emitted in a deferred way.
Definition at line 344 of file TranslateToCpp.cpp.
Referenced by shouldBeInlined().
|
inlinestatic |
Definition at line 63 of file TranslateToCpp.cpp.
References interleaveWithError().
Referenced by printFunctionArgs(), and printOperation().
|
inlinestatic |
Definition at line 56 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 40 of file TranslateToCpp.cpp.
References mlir::remark::failed().
Referenced by interleaveCommaWithError(), and interleaveWithError().
|
static |
Definition at line 479 of file TranslateToCpp.cpp.
References mlir::remark::failed(), and mlir::Operation::getOperand().
Referenced by printOperation().
|
static |
Definition at line 754 of file TranslateToCpp.cpp.
References mlir::remark::failed().
Referenced by printOperation().
|
static |
Definition at line 405 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Operation::getLoc(), and mlir::Operation::getResult().
Referenced by printOperation().
|
static |
Definition at line 1132 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), and interleaveCommaWithError().
Referenced by printOperation().
|
static |
Definition at line 1143 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), mlir::Value::getType(), and interleaveCommaWithError().
|
static |
Definition at line 1155 of file TranslateToCpp.cpp.
References mlir::WalkResult::advance(), mlir::Operation::emitError(), mlir::Operation::emitOpError(), mlir::remark::failed(), mlir::Operation::getParentOp(), mlir::Operation::getResults(), mlir::raw_indented_ostream::indent(), mlir::PreOrder, shouldBeInlined(), mlir::WalkResult::skip(), mlir::raw_indented_ostream::unindent(), mlir::Operation::walk(), and mlir::WalkResult::wasInterrupted().
Referenced by printOperation().
|
static |
Definition at line 686 of file TranslateToCpp.cpp.
References mlir::Block::getArguments(), and mlir::Block::getSuccessor().
|
static |
Definition at line 706 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Block::getArguments(), mlir::raw_indented_ostream::indent(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1087 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::raw_indented_ostream::indent(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1300 of file TranslateToCpp.cpp.
References mlir::remark::failed(), and printFunctionArgs().
|
static |
Definition at line 514 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 833 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 462 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Value::getDefiningOp(), and mlir::Operation::getResult().
|
static |
Definition at line 844 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 851 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 857 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 863 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 870 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 876 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 774 of file TranslateToCpp.cpp.
References printCallOperation().
|
static |
Definition at line 781 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Operation::getLoc(), mlir::Operation::getOperand(), and interleaveCommaWithError().
|
static |
Definition at line 894 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Operation::getLoc(), mlir::Operation::getResult(), and mlir::Value::getType().
|
static |
Definition at line 608 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 640 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 437 of file TranslateToCpp.cpp.
References mlir::Operation::getLoc(), and printConstantOp().
|
static |
Definition at line 520 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 584 of file TranslateToCpp.cpp.
References mlir::Block::back(), mlir::remark::failed(), mlir::Block::front(), mlir::raw_indented_ostream::indent(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 907 of file TranslateToCpp.cpp.
References mlir::remark::failed(), and shouldBeInlined().
|
static |
Definition at line 951 of file TranslateToCpp.cpp.
References mlir::remark::failed(), mlir::Value::getDefiningOp(), mlir::Region::getOps(), mlir::raw_indented_ostream::indent(), shouldBeInlined(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 1259 of file TranslateToCpp.cpp.
References mlir::remark::failed(), printFunctionArgs(), and printFunctionBody().
|
static |
Definition at line 456 of file TranslateToCpp.cpp.
|
static |
Definition at line 1008 of file TranslateToCpp.cpp.
References mlir::Region::empty(), mlir::remark::failed(), mlir::raw_indented_ostream::indent(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 920 of file TranslateToCpp.cpp.
|
static |
Definition at line 472 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 933 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 939 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 945 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 526 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 532 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 1066 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 538 of file TranslateToCpp.cpp.
References printBinaryOperation().
|
static |
Definition at line 555 of file TranslateToCpp.cpp.
References emitSwitchCase(), mlir::remark::failed(), mlir::raw_indented_ostream::indent(), and mlir::raw_indented_ostream::unindent().
|
static |
Definition at line 888 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 882 of file TranslateToCpp.cpp.
References printUnaryOperation().
|
static |
Definition at line 448 of file TranslateToCpp.cpp.
References printConstantOp().
|
static |
Definition at line 663 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 1105 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 1121 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 767 of file TranslateToCpp.cpp.
References printCallOperation().
|
static |
Definition at line 1222 of file TranslateToCpp.cpp.
References mlir::remark::failed(), printFunctionArgs(), and printFunctionBody().
|
static |
Definition at line 1045 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 1079 of file TranslateToCpp.cpp.
References mlir::remark::failed().
|
static |
Definition at line 498 of file TranslateToCpp.cpp.
References mlir::remark::failed(), and mlir::Operation::getOperand().
Referenced by printOperation().
|
static |
Determine whether expression expressionOp
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 355 of file TranslateToCpp.cpp.
References mlir::Value::getUsers(), hasDeferredEmission(), and mlir::Value::hasOneUse().
Referenced by printFunctionBody(), and printOperation().