19#include "mlir-c/Support.h"
20#include "mlir/CAPI/IR.h"
21#include "mlir/CAPI/Support.h"
22#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
23#include "mlir/IR/BuiltinOps.h"
24#include "mlir/Support/FileUtilities.h"
25#include "mlir/Target/LLVMIR/Export.h"
27#include "llvm/IR/LLVMContext.h"
28#include "llvm/IR/Module.h"
29#include "llvm/Support/Casting.h"
30#include "llvm/Support/raw_ostream.h"
43 llvm::raw_string_ostream
os(cpp);
44 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
46 return mlirStringRefCreate(
nullptr, 0);
47 char *cStr =
static_cast<char *
>(malloc(cpp.size()));
48 cpp.copy(cStr, cpp.size());
49 return mlirStringRefCreate(cStr, cpp.size());
54 llvm::raw_string_ostream
os(llvmir);
55 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
56 llvm::LLVMContext llvmContext;
57 auto llvmModule = translateModuleToLLVMIR(mod, llvmContext);
59 return mlirStringRefCreate(
nullptr, 0);
60 llvmModule->print(
os,
nullptr);
61 char *cStr =
static_cast<char *
>(malloc(llvmir.size()));
62 llvmir.copy(cStr, llvmir.size());
63 return mlirStringRefCreate(cStr, llvmir.size());
67 MlirStringRef workDirPath,
68 bool bigEndian,
bool emitUnified,
69 bool cdoDebug,
bool aieSim,
70 bool xaieDebug,
bool enableCores) {
71 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
73 mod, llvm::StringRef(workDirPath.data, workDirPath.length), bigEndian,
74 emitUnified, cdoDebug, aieSim, xaieDebug, enableCores);
75 std::vector<std::string> diagnostics;
76 ScopedDiagnosticHandler handler(mod.getContext(), [&](Diagnostic &d) {
77 llvm::raw_string_ostream(diagnostics.emplace_back())
78 << d.getLocation() <<
": " << d;
81 for (
const auto &diagnostic : diagnostics)
82 std::cerr << diagnostic <<
"\n";
88 std::vector<uint8_t> binaryData(binary.data, binary.data + binary.length);
91 return wrap(ModuleOp().getOperation());
92 return wrap(mod->getOperation());
96 MlirStringRef sequenceName) {
97 std::vector<uint32_t> insts;
98 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
99 llvm::StringRef name(sequenceName.data, sequenceName.length);
101 return mlirStringRefCreate(
nullptr, 0);
102 size_t insts_size = insts.size() *
sizeof(uint32_t);
103 char *cStr =
static_cast<char *
>(malloc(insts_size));
104 memcpy(cStr, insts.data(), insts_size);
105 return mlirStringRefCreate(cStr, insts_size);
109 std::vector<uint32_t> insts;
110 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
112 return mlirStringRefCreate(
nullptr, 0);
113 size_t insts_size = insts.size() *
sizeof(uint32_t);
114 char *cStr =
static_cast<char *
>(malloc(insts_size));
115 memcpy(cStr, insts.data(), insts_size);
116 return mlirStringRefCreate(cStr, insts_size);
121 llvm::raw_string_ostream
os(xaie);
122 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
124 return mlirStringRefCreate(
nullptr, 0);
125 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
126 xaie.copy(cStr, xaie.size());
127 return mlirStringRefCreate(cStr, xaie.size());
132 llvm::raw_string_ostream
os(xaie);
133 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
135 return mlirStringRefCreate(
nullptr, 0);
136 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
137 xaie.copy(cStr, xaie.size());
138 return mlirStringRefCreate(cStr, xaie.size());
143 llvm::raw_string_ostream
os(bcf);
144 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
146 return mlirStringRefCreate(
nullptr, 0);
147 char *cStr =
static_cast<char *
>(malloc(bcf.size()));
148 bcf.copy(cStr, bcf.size());
149 return mlirStringRefCreate(cStr, bcf.size());
154 llvm::raw_string_ostream
os(ll);
155 std::vector<std::string> files;
156 files.reserve(nModules);
157 for (
int i = 0; i < nModules; ++i)
158 files.emplace_back(modules[i].data, modules[i].length);
160 return mlirStringRefCreate(
nullptr, 0);
161 char *cStr =
static_cast<char *
>(malloc(ll.size()));
162 ll.copy(cStr, ll.size());
163 return mlirStringRefCreate(cStr, ll.size());
MlirLogicalResult aieTranslateToCDODirect(MlirOperation moduleOp, MlirStringRef workDirPath, bool bigEndian, bool emitUnified, bool cdoDebug, bool aieSim, bool xaieDebug, bool enableCores)
MlirStringRef aieTranslateNpuToBinary(MlirOperation moduleOp, MlirStringRef sequenceName)
MlirStringRef aieTranslateToXAIEV2(MlirOperation moduleOp)
MlirStringRef aieTranslateModuleToLLVMIR(MlirOperation moduleOp)
AieRtControl getAieRtControl(AieTargetModel tm)
MlirStringRef aieTranslateToBCF(MlirOperation moduleOp, int col, int row)
void aieRtDmaUpdateBdAddr(AieRtControl aieCtl, int col, int row, size_t addr, size_t bdId)
MlirStringRef aieTranslateAIEVecToCpp(MlirOperation moduleOp, bool aie2)
void freeAieRtControl(AieRtControl aieCtl)
MlirStringRef aieLLVMLink(MlirStringRef *modules, int nModules)
MlirOperation aieTranslateBinaryToTxn(MlirContext ctx, MlirStringRef binary)
MlirStringRef aieTranslateControlPacketsToUI32Vec(MlirOperation moduleOp)
MlirStringRef aieTranslateToHSA(MlirOperation moduleOp)
void aieRtExportSerializedTransaction(AieRtControl aieCtl)
void aieRtStartTransaction(AieRtControl aieCtl)
Include the generated interface declarations.
mlir::LogicalResult AIETranslateToXAIEV2(mlir::ModuleOp module, llvm::raw_ostream &output)
mlir::LogicalResult AIETranslateToCDODirect(mlir::ModuleOp m, llvm::StringRef workDirPath, bool bigEndian=false, bool emitUnified=false, bool cdoDebug=false, bool aieSim=false, bool xaieDebug=false, bool enableCores=true)
mlir::LogicalResult AIELLVMLink(llvm::raw_ostream &output, std::vector< std::string > Files, bool DisableDITypeMap=false, bool NoVerify=false, bool Internalize=false, bool OnlyNeeded=false, bool PreserveAssemblyUseListOrder=false, bool Verbose=false)
mlir::LogicalResult AIETranslateToHSA(mlir::ModuleOp module, llvm::raw_ostream &output)
mlir::LogicalResult AIETranslateToBCF(mlir::ModuleOp module, llvm::raw_ostream &output, int tileCol, int tileRow)
mlir::LogicalResult AIETranslateNpuToBinary(mlir::ModuleOp, std::vector< uint32_t > &, llvm::StringRef sequenceName="")
std::optional< mlir::ModuleOp > convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, std::vector< uint8_t > &binary)
mlir::LogicalResult AIETranslateControlPacketsToUI32Vec(mlir::ModuleOp, std::vector< uint32_t > &, llvm::StringRef sequenceName="")
mlir::LogicalResult translateAIEVecToCpp(mlir::Operation *op, bool aie2, mlir::raw_ostream &os)
Translates the AIE vector dialect MLIR to C++ code.
void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId)
std::vector< uint8_t > exportSerializedTransaction()