6 #ifndef JLM_MLIR_FRONTEND_MLIRTOJLMCONVERTER_HPP
7 #define JLM_MLIR_FRONTEND_MLIRTOJLMCONVERTER_HPP
19 #include <JLM/JLMDialect.h>
20 #include <JLM/JLMOps.h>
21 #include <RVSDG/RVSDGDialect.h>
22 #include <RVSDG/RVSDGPasses.h>
24 #include <mlir/Dialect/Arith/IR/Arith.h>
25 #include <mlir/Dialect/LLVMIR/LLVMDialect.h>
34 :
Context_(std::make_unique<::mlir::MLIRContext>())
37 Context_->getOrLoadDialect<::mlir::rvsdg::RVSDGDialect>();
39 Context_->getOrLoadDialect<::mlir::jlm::JLMDialect>();
41 Context_->getOrLoadDialect<::mlir::arith::ArithDialect>();
43 Context_->getOrLoadDialect<::mlir::LLVM::LLVMDialect>();
61 std::unique_ptr<llvm::LlvmRvsdgModule>
69 std::unique_ptr<llvm::LlvmRvsdgModule>
70 ConvertMlir(std::unique_ptr<::mlir::Block> & block);
78 static std::unique_ptr<llvm::LlvmRvsdgModule>
95 ::llvm::SmallVector<jlm::rvsdg::Output *>
105 ::llvm::SmallVector<jlm::rvsdg::Output *>
115 static ::llvm::SmallVector<jlm::rvsdg::Output *>
117 ::mlir::Operation & mlirOp,
118 const std::unordered_map<void *, rvsdg::Output *> & outputMap);
129 ::mlir::arith::CmpIOp & CompOp,
130 const ::llvm::SmallVector<rvsdg::Output *> & inputs,
142 ::mlir::LLVM::ICmpOp & operation,
144 const ::llvm::SmallVector<rvsdg::Output *> & inputs);
154 const ::mlir::Operation & mlirOperation,
155 const ::llvm::SmallVector<rvsdg::Output *> & inputs);
173 ::mlir::Operation & mlirOperation,
174 const ::llvm::SmallVector<rvsdg::Output *> & inputs);
183 std::vector<jlm::rvsdg::Output *>
185 ::mlir::Operation & mlirOperation,
187 const ::llvm::SmallVector<rvsdg::Output *> & inputs);
210 std::unique_ptr<llvm::LlvmRvsdgModule>
222 ::mlir::Operation & mlirLambda,
224 const ::llvm::SmallVector<rvsdg::Output *> & inputs);
231 std::shared_ptr<const rvsdg::Type>
static ::llvm::SmallVector< jlm::rvsdg::Output * > GetConvertedInputs(::mlir::Operation &mlirOp, const std::unordered_map< void *, rvsdg::Output * > &outputMap)
std::unique_ptr<::mlir::MLIRContext > Context_
std::vector< jlm::rvsdg::Output * > ConvertOperation(::mlir::Operation &mlirOperation, rvsdg::Region &rvsdgRegion, const ::llvm::SmallVector< rvsdg::Output * > &inputs)
MlirToJlmConverter(const MlirToJlmConverter &)=delete
rvsdg::Node * ConvertFPBinaryNode(const ::mlir::Operation &mlirOperation, const ::llvm::SmallVector< rvsdg::Output * > &inputs)
static size_t GetIndexBitWidth()
rvsdg::Node * ConvertICmpOp(::mlir::LLVM::ICmpOp &operation, rvsdg::Region &rvsdgRegion, const ::llvm::SmallVector< rvsdg::Output * > &inputs)
rvsdg::Node * ConvertLambda(::mlir::Operation &mlirLambda, rvsdg::Region &rvsdgRegion, const ::llvm::SmallVector< rvsdg::Output * > &inputs)
MlirToJlmConverter(MlirToJlmConverter &&)=delete
llvm::fpsize ConvertFPSize(unsigned int size)
llvm::Linkage ConvertLinkage(std::string stringValue)
util::BijectiveMap<::mlir::LLVM::LLVMStructType *, std::shared_ptr< const llvm::StructType > > StructTypeMap_
std::unique_ptr< llvm::LlvmRvsdgModule > ReadAndConvertMlir(const util::FilePath &filePath)
jlm::llvm::fpcmp TryConvertFPCMP(const ::mlir::arith::CmpFPredicate &op)
rvsdg::Node * ConvertCmpIOp(::mlir::arith::CmpIOp &CompOp, const ::llvm::SmallVector< rvsdg::Output * > &inputs, size_t nbits)
MlirToJlmConverter & operator=(MlirToJlmConverter &&)=delete
::llvm::SmallVector< jlm::rvsdg::Output * > ConvertBlock(::mlir::Block &block, rvsdg::Region &rvsdgRegion)
std::unique_ptr< llvm::LlvmRvsdgModule > ConvertOmega(::mlir::rvsdg::OmegaNode &omegaNode)
MlirToJlmConverter & operator=(const MlirToJlmConverter &)=delete
::llvm::SmallVector< jlm::rvsdg::Output * > ConvertRegion(::mlir::Region ®ion, rvsdg::Region &rvsdgRegion)
std::shared_ptr< const rvsdg::Type > ConvertType(const ::mlir::Type &type)
std::unique_ptr< llvm::LlvmRvsdgModule > ConvertMlir(std::unique_ptr<::mlir::Block > &block)
rvsdg::Node * ConvertBitBinaryNode(::mlir::Operation &mlirOperation, const ::llvm::SmallVector< rvsdg::Output * > &inputs)
static std::unique_ptr< llvm::LlvmRvsdgModule > CreateAndConvert(std::unique_ptr<::mlir::Block > &block)
Represent acyclic RVSDG subgraphs.
static std::string type(const Node *n)