MLIR 22.0.0git
TranslateToCpp.cpp File Reference
#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.
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 hasDeferredEmission (Operation *op)
 Determine whether expression op should be emitted in a deferred way.
static bool shouldBeInlined (ExpressionOp expressionOp)
 Determine whether expression expressionOp should be emitted inline, i.e.
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 &region)
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)

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "translate-to-cpp"

Definition at line 28 of file TranslateToCpp.cpp.

Function Documentation

◆ emitSwitchCase()

LogicalResult emitSwitchCase ( CppEmitter & emitter,
raw_indented_ostream & os,
Region & region )
static

Definition at line 544 of file TranslateToCpp.cpp.

References mlir::Region::op_begin(), mlir::Region::op_end(), and success().

Referenced by printOperation().

◆ getOperatorPrecedence()

FailureOr< int > getOperatorPrecedence ( Operation * operation)
static

Return the precedence of a operator as an integer, higher values imply higher precedence.

Definition at line 71 of file TranslateToCpp.cpp.

◆ hasDeferredEmission()

bool hasDeferredEmission ( Operation * op)
static

Determine whether expression op should be emitted in a deferred way.

Definition at line 344 of file TranslateToCpp.cpp.

Referenced by shouldBeInlined().

◆ interleaveCommaWithError()

template<typename Container, typename UnaryFunctor>
LogicalResult interleaveCommaWithError ( const Container & c,
raw_ostream & os,
UnaryFunctor eachFn )
inlinestatic

Definition at line 63 of file TranslateToCpp.cpp.

References interleaveWithError().

Referenced by printFunctionArgs(), printFunctionArgs(), and printOperation().

◆ interleaveWithError() [1/2]

template<typename Container, typename UnaryFunctor, typename NullaryFunctor>
LogicalResult interleaveWithError ( const Container & c,
UnaryFunctor eachFn,
NullaryFunctor betweenFn )
inlinestatic

Definition at line 56 of file TranslateToCpp.cpp.

References interleaveWithError().

◆ interleaveWithError() [2/2]

template<typename ForwardIterator, typename UnaryFunctor, typename NullaryFunctor>
LogicalResult interleaveWithError ( ForwardIterator begin,
ForwardIterator end,
UnaryFunctor eachFn,
NullaryFunctor betweenFn )
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 success().

Referenced by interleaveCommaWithError(), and interleaveWithError().

◆ printBinaryOperation()

LogicalResult printBinaryOperation ( CppEmitter & emitter,
Operation * operation,
StringRef binaryOperator )
static

◆ printCallOperation()

LogicalResult printCallOperation ( CppEmitter & emitter,
Operation * callOp,
StringRef callee )
static

Definition at line 754 of file TranslateToCpp.cpp.

References success().

Referenced by printOperation(), and printOperation().

◆ printConstantOp()

LogicalResult printConstantOp ( CppEmitter & emitter,
Operation * operation,
Attribute value )
static

◆ printFunctionArgs() [1/2]

LogicalResult printFunctionArgs ( CppEmitter & emitter,
Operation * functionOp,
ArrayRef< Type > arguments )
static

◆ printFunctionArgs() [2/2]

LogicalResult printFunctionArgs ( CppEmitter & emitter,
Operation * functionOp,
Region::BlockArgListType arguments )
static

◆ printFunctionBody()

◆ printOperation() [1/46]

LogicalResult printOperation ( CppEmitter & emitter,
cf::BranchOp branchOp )
static

◆ printOperation() [2/46]

LogicalResult printOperation ( CppEmitter & emitter,
cf::CondBranchOp condBranchOp )
static

◆ printOperation() [3/46]

LogicalResult printOperation ( CppEmitter & emitter,
ClassOp classOp )
static

◆ printOperation() [4/46]

LogicalResult printOperation ( CppEmitter & emitter,
DeclareFuncOp declareFuncOp )
static

◆ printOperation() [5/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::AddOp addOp )
static

Definition at line 514 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [6/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::ApplyOp applyOp )
static

Definition at line 833 of file TranslateToCpp.cpp.

◆ printOperation() [7/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::AssignOp assignOp )
static

Definition at line 462 of file TranslateToCpp.cpp.

References result.

◆ printOperation() [8/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::BitwiseAndOp bitwiseAndOp )
static

Definition at line 844 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [9/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::BitwiseLeftShiftOp bitwiseLeftShiftOp )
static

Definition at line 851 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [10/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::BitwiseNotOp bitwiseNotOp )
static

Definition at line 857 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [11/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::BitwiseOrOp bitwiseOrOp )
static

Definition at line 863 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [12/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::BitwiseRightShiftOp bitwiseRightShiftOp )
static

Definition at line 870 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [13/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::BitwiseXorOp bitwiseXorOp )
static

Definition at line 876 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [14/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::CallOp callOp )
static

Definition at line 774 of file TranslateToCpp.cpp.

References printCallOperation().

◆ printOperation() [15/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::CallOpaqueOp callOpaqueOp )
static

◆ printOperation() [16/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::CastOp castOp )
static

◆ printOperation() [17/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::CmpOp cmpOp )
static

Definition at line 608 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [18/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::ConditionalOp conditionalOp )
static

Definition at line 640 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [19/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::ConstantOp constantOp )
static

Definition at line 437 of file TranslateToCpp.cpp.

References mlir::Operation::getLoc(), and printConstantOp().

◆ printOperation() [20/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::DivOp divOp )
static

Definition at line 520 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [21/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::DoOp doOp )
static

◆ printOperation() [22/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::ExpressionOp expressionOp )
static

Definition at line 907 of file TranslateToCpp.cpp.

References shouldBeInlined(), and success().

◆ printOperation() [23/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::ForOp forOp )
static

◆ printOperation() [24/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::FuncOp functionOp )
static

Definition at line 1259 of file TranslateToCpp.cpp.

References printFunctionArgs(), printFunctionBody(), and success().

◆ printOperation() [25/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::GlobalOp globalOp )
static

Definition at line 456 of file TranslateToCpp.cpp.

◆ printOperation() [26/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::IfOp ifOp )
static

◆ printOperation() [27/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::IncludeOp includeOp )
static

Definition at line 920 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [28/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::LoadOp loadOp )
static

Definition at line 472 of file TranslateToCpp.cpp.

◆ printOperation() [29/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::LogicalAndOp logicalAndOp )
static

Definition at line 933 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [30/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::LogicalNotOp logicalNotOp )
static

Definition at line 939 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [31/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::LogicalOrOp logicalOrOp )
static

Definition at line 945 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [32/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::MulOp mulOp )
static

Definition at line 526 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [33/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::RemOp remOp )
static

Definition at line 532 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [34/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::ReturnOp returnOp )
static

Definition at line 1066 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [35/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::SubOp subOp )
static

Definition at line 538 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [36/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::SwitchOp switchOp )
static

◆ printOperation() [37/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::UnaryMinusOp unaryMinusOp )
static

Definition at line 888 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [38/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::UnaryPlusOp unaryPlusOp )
static

Definition at line 882 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [39/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::VariableOp variableOp )
static

Definition at line 448 of file TranslateToCpp.cpp.

References printConstantOp().

◆ printOperation() [40/46]

LogicalResult printOperation ( CppEmitter & emitter,
emitc::VerbatimOp verbatimOp )
static

Definition at line 663 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [41/46]

LogicalResult printOperation ( CppEmitter & emitter,
FieldOp fieldOp )
static

Definition at line 1105 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [42/46]

LogicalResult printOperation ( CppEmitter & emitter,
FileOp file )
static

Definition at line 1121 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [43/46]

LogicalResult printOperation ( CppEmitter & emitter,
func::CallOp callOp )
static

Definition at line 767 of file TranslateToCpp.cpp.

References printCallOperation().

◆ printOperation() [44/46]

LogicalResult printOperation ( CppEmitter & emitter,
func::FuncOp functionOp )
static

Definition at line 1222 of file TranslateToCpp.cpp.

References printFunctionArgs(), printFunctionBody(), and success().

◆ printOperation() [45/46]

LogicalResult printOperation ( CppEmitter & emitter,
func::ReturnOp returnOp )
static

Definition at line 1045 of file TranslateToCpp.cpp.

References success().

◆ printOperation() [46/46]

LogicalResult printOperation ( CppEmitter & emitter,
ModuleOp moduleOp )
static

Definition at line 1079 of file TranslateToCpp.cpp.

References success().

◆ printUnaryOperation()

LogicalResult printUnaryOperation ( CppEmitter & emitter,
Operation * operation,
StringRef unaryOperator )
static

◆ shouldBeInlined()

bool shouldBeInlined ( ExpressionOp expressionOp)
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 hasDeferredEmission(), and result.

Referenced by printFunctionBody(), printOperation(), and printOperation().