MLIR  19.0.0git
Macros | Functions
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/Support/IndentedOstream.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Target/Cpp/CppEmitter.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/ScopedHashTable.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/FormatVariadic.h"
#include <stack>
#include <utility>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "translate-to-cpp"
 

Functions

template<typename ForwardIterator , typename UnaryFunctor , typename NullaryFunctor >
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 >
LogicalResult interleaveWithError (const Container &c, UnaryFunctor eachFn, NullaryFunctor betweenFn)
 
template<typename Container , typename UnaryFunctor >
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 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::AssignOp assignOp)
 
static LogicalResult printOperation (CppEmitter &emitter, emitc::SubscriptOp subscriptOp)
 
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 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 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 30 of file TranslateToCpp.cpp.

Function Documentation

◆ getOperatorPrecedence()

static FailureOr<int> getOperatorPrecedence ( Operation operation)
static

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

Definition at line 73 of file TranslateToCpp.cpp.

◆ interleaveCommaWithError()

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

Definition at line 65 of file TranslateToCpp.cpp.

References interleaveWithError().

Referenced by printFunctionArgs().

◆ interleaveWithError() [1/2]

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

Definition at line 58 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 
)
inline

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 mlir::failed(), mlir::failure(), and mlir::success().

Referenced by interleaveCommaWithError(), and interleaveWithError().

◆ printBinaryOperation()

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

◆ printCallOperation()

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

Definition at line 559 of file TranslateToCpp.cpp.

References mlir::failed(), mlir::failure(), and mlir::success().

Referenced by printOperation().

◆ printConstantOp()

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

◆ printFunctionArgs() [1/2]

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

Definition at line 894 of file TranslateToCpp.cpp.

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

Referenced by printOperation().

◆ printFunctionArgs() [2/2]

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

◆ printFunctionBody()

static LogicalResult printFunctionBody ( CppEmitter &  emitter,
Operation functionOp,
Region::BlockListType blocks 
)
static

◆ printOperation() [1/40]

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

◆ printOperation() [2/40]

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

◆ printOperation() [3/40]

static LogicalResult printOperation ( CppEmitter &  emitter,
DeclareFuncOp  declareFuncOp 
)
static

◆ printOperation() [4/40]

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

Definition at line 399 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [5/40]

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

Definition at line 636 of file TranslateToCpp.cpp.

◆ printOperation() [6/40]

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

◆ printOperation() [7/40]

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

Definition at line 649 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [8/40]

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

Definition at line 656 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [9/40]

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

Definition at line 662 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [10/40]

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

Definition at line 668 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [11/40]

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

Definition at line 675 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [12/40]

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

Definition at line 681 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [13/40]

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

Definition at line 579 of file TranslateToCpp.cpp.

References printCallOperation().

◆ printOperation() [14/40]

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

Definition at line 586 of file TranslateToCpp.cpp.

◆ printOperation() [15/40]

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

Definition at line 699 of file TranslateToCpp.cpp.

◆ printOperation() [16/40]

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

Definition at line 429 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [17/40]

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

Definition at line 461 of file TranslateToCpp.cpp.

References mlir::failed(), mlir::failure(), and mlir::success().

◆ printOperation() [18/40]

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

Definition at line 331 of file TranslateToCpp.cpp.

References printConstantOp().

◆ printOperation() [19/40]

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

Definition at line 405 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [20/40]

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

Definition at line 712 of file TranslateToCpp.cpp.

References shouldBeInlined(), and mlir::success().

◆ printOperation() [21/40]

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

◆ printOperation() [22/40]

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

◆ printOperation() [23/40]

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

◆ printOperation() [24/40]

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

Definition at line 725 of file TranslateToCpp.cpp.

References mlir::success().

◆ printOperation() [25/40]

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

Definition at line 738 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [26/40]

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

Definition at line 744 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [27/40]

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

Definition at line 750 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [28/40]

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

Definition at line 411 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [29/40]

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

Definition at line 417 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [30/40]

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

Definition at line 871 of file TranslateToCpp.cpp.

References mlir::failed(), mlir::failure(), and mlir::success().

◆ printOperation() [31/40]

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

Definition at line 423 of file TranslateToCpp.cpp.

References printBinaryOperation().

◆ printOperation() [32/40]

static LogicalResult printOperation ( CppEmitter &  emitter,
emitc::SubscriptOp  subscriptOp 
)
static

Definition at line 357 of file TranslateToCpp.cpp.

References mlir::success().

◆ printOperation() [33/40]

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

Definition at line 693 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [34/40]

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

Definition at line 687 of file TranslateToCpp.cpp.

References printUnaryOperation().

◆ printOperation() [35/40]

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

Definition at line 339 of file TranslateToCpp.cpp.

References printConstantOp().

◆ printOperation() [36/40]

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

Definition at line 484 of file TranslateToCpp.cpp.

References mlir::success().

◆ printOperation() [37/40]

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

Definition at line 572 of file TranslateToCpp.cpp.

References printCallOperation().

◆ printOperation() [38/40]

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

◆ printOperation() [39/40]

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

Definition at line 850 of file TranslateToCpp.cpp.

References mlir::failed(), mlir::failure(), and mlir::success().

◆ printOperation() [40/40]

static LogicalResult printOperation ( CppEmitter &  emitter,
ModuleOp  moduleOp 
)
static

Definition at line 884 of file TranslateToCpp.cpp.

◆ printUnaryOperation()

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

◆ shouldBeInlined()

static 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 278 of file TranslateToCpp.cpp.

References mlir::Operation::getParentOfType(), mlir::Value::getUsers(), and mlir::Value::hasOneUse().

Referenced by printOperation().