6 #ifndef JLM_MLIR_BACKEND_JLMTOMLIRCONVERTER_HPP
7 #define JLM_MLIR_BACKEND_JLMTOMLIRCONVERTER_HPP
20 #include <RVSDG/RVSDGDialect.h>
21 #include <RVSDG/RVSDGPasses.h>
24 #include <JLM/JLMDialect.h>
25 #include <JLM/JLMOps.h>
28 #include <mlir/Dialect/Arith/IR/Arith.h>
29 #include <mlir/Dialect/LLVMIR/LLVMDialect.h>
38 :
Context_(std::make_unique<::mlir::MLIRContext>())
40 Context_->getOrLoadDialect<::mlir::rvsdg::RVSDGDialect>();
41 Context_->getOrLoadDialect<::mlir::jlm::JLMDialect>();
42 Context_->getOrLoadDialect<::mlir::arith::ArithDialect>();
43 Context_->getOrLoadDialect<::mlir::LLVM::LLVMDialect>();
72 ::mlir::rvsdg::OmegaNode
84 ::llvm::SmallVector<::mlir::Value>
93 static ::llvm::SmallVector<::mlir::Value>
96 const std::unordered_map<rvsdg::Output *, ::mlir::Value> & valueMap);
108 ::mlir::Block & block,
109 const ::llvm::SmallVector<::mlir::Value> & inputs);
120 ::llvm::SmallVector<::mlir::Value> inputs);
131 ::llvm::SmallVector<::mlir::Value> inputs);
142 ::llvm::SmallVector<::mlir::Value> inputs);
153 ::llvm::SmallVector<::mlir::Value> inputs);
173 ::llvm::SmallVector<::mlir::Value> inputs);
185 ::mlir::Block & block,
186 const ::llvm::SmallVector<::mlir::Value> & inputs);
198 ::mlir::Block & block,
199 const ::llvm::SmallVector<::mlir::Value> & inputs);
211 ::mlir::Block & block,
212 const ::llvm::SmallVector<::mlir::Value> & inputs);
217 ::mlir::Block & block,
218 const ::llvm::SmallVector<::mlir::Value> & inputs);
230 ::mlir::Block & block,
231 const ::llvm::SmallVector<::mlir::Value> & inputs);
262 ::llvm::SmallVector<::mlir::Type>
::mlir::Operation * ConvertDelta(const rvsdg::DeltaNode &node, ::mlir::Block &block, const ::llvm::SmallVector<::mlir::Value > &inputs)
::llvm::SmallVector<::mlir::Value > ConvertRegion(rvsdg::Region ®ion, ::mlir::Block &block, bool isRoot=false)
::mlir::FloatType ConvertFPType(const llvm::fpsize size)
::mlir::FunctionType ConvertFunctionType(const jlm::rvsdg::FunctionType &functionType)
::mlir::Operation * ConvertTheta(const rvsdg::ThetaNode &thetaNode, ::mlir::Block &block, const ::llvm::SmallVector<::mlir::Value > &inputs)
JlmToMlirConverter(const JlmToMlirConverter &)=delete
::mlir::Type ConvertType(const rvsdg::Type &type)
::mlir::Operation * ConvertNode(const rvsdg::Node &node, ::mlir::Block &block, const ::llvm::SmallVector<::mlir::Value > &inputs)
::mlir::Operation * BitCompareNode(const rvsdg::SimpleOperation &bitOp, ::llvm::SmallVector<::mlir::Value > inputs)
::llvm::SmallVector<::mlir::Type > GetMemStateRange(size_t nresults)
::mlir::Operation * ConvertPointerCompareNode(const llvm::PtrCmpOperation &pointerCompareOp, ::llvm::SmallVector<::mlir::Value > inputs)
JlmToMlirConverter & operator=(JlmToMlirConverter &&)=delete
std::unique_ptr<::mlir::MLIRContext > Context_
::mlir::Operation * ConvertGamma(const rvsdg::GammaNode &gammaNode, ::mlir::Block &block, const ::llvm::SmallVector<::mlir::Value > &inputs)
static void Print(::mlir::rvsdg::OmegaNode &omega, const util::FilePath &filePath)
static ::llvm::SmallVector<::mlir::Value > GetConvertedInputs(const rvsdg::Node &node, const std::unordered_map< rvsdg::Output *, ::mlir::Value > &valueMap)
::mlir::Operation * ConvertFpBinaryNode(const jlm::llvm::FBinaryOperation &op, ::llvm::SmallVector<::mlir::Value > inputs)
JlmToMlirConverter & operator=(const JlmToMlirConverter &)=delete
::mlir::Operation * ConvertLambda(const rvsdg::LambdaNode &node, ::mlir::Block &block, const ::llvm::SmallVector<::mlir::Value > &inputs)
::mlir::Operation * ConvertIntegerBinaryOperation(const jlm::llvm::IntegerBinaryOperation &operation, ::llvm::SmallVector<::mlir::Value > inputs)
::mlir::Operation * ConvertBitBinaryNode(const rvsdg::SimpleOperation &bitOp, ::llvm::SmallVector<::mlir::Value > inputs)
::mlir::Operation * ConvertSimpleNode(const rvsdg::SimpleNode &node, ::mlir::Block &block, const ::llvm::SmallVector<::mlir::Value > &inputs)
::mlir::rvsdg::OmegaNode ConvertModule(const llvm::LlvmRvsdgModule &rvsdgModule)
std::unique_ptr<::mlir::OpBuilder > Builder_
::mlir::Operation * ConvertFpCompareNode(const jlm::llvm::FCmpOperation &op, ::llvm::SmallVector<::mlir::Value > inputs)
JlmToMlirConverter(JlmToMlirConverter &&)=delete
Conditional operator / pattern matching.
Represent acyclic RVSDG subgraphs.
static std::string type(const Node *n)