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 MlirStringRef deviceName,
69 bool bigEndian,
bool emitUnified,
70 bool cdoDebug,
bool aieSim,
71 bool xaieDebug,
bool enableCores) {
72 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
74 mod, llvm::StringRef(workDirPath.data, workDirPath.length),
75 llvm::StringRef(deviceName.data, deviceName.length), bigEndian,
76 emitUnified, cdoDebug, aieSim, xaieDebug, enableCores);
77 std::vector<std::string> diagnostics;
78 ScopedDiagnosticHandler handler(mod.getContext(), [&](Diagnostic &d) {
79 llvm::raw_string_ostream(diagnostics.emplace_back())
80 << d.getLocation() <<
": " << d;
83 for (
const auto &diagnostic : diagnostics)
84 std::cerr << diagnostic <<
"\n";
90 std::vector<uint8_t> binaryData(binary.data, binary.data + binary.length);
93 return wrap(ModuleOp().getOperation());
94 return wrap(mod->getOperation());
98 MlirStringRef deviceNameMlir,
99 MlirStringRef sequenceNameMlir) {
100 std::vector<uint32_t> insts;
101 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
102 llvm::StringRef deviceName(deviceNameMlir.data, deviceNameMlir.length);
103 llvm::StringRef sequenceName(sequenceNameMlir.data, sequenceNameMlir.length);
105 return mlirStringRefCreate(
nullptr, 0);
106 size_t insts_size = insts.size() *
sizeof(uint32_t);
107 char *cStr =
static_cast<char *
>(malloc(insts_size));
108 memcpy(cStr, insts.data(), insts_size);
109 return mlirStringRefCreate(cStr, insts_size);
113 MlirStringRef deviceName) {
114 std::vector<uint32_t> insts;
115 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
117 mod, insts, llvm::StringRef(deviceName.data, deviceName.length))))
118 return mlirStringRefCreate(
nullptr, 0);
119 size_t insts_size = insts.size() *
sizeof(uint32_t);
120 char *cStr =
static_cast<char *
>(malloc(insts_size));
121 memcpy(cStr, insts.data(), insts_size);
122 return mlirStringRefCreate(cStr, insts_size);
126 MlirStringRef deviceName) {
128 llvm::raw_string_ostream
os(xaie);
129 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
131 mod,
os, llvm::StringRef(deviceName.data, deviceName.length))))
132 return mlirStringRefCreate(
nullptr, 0);
133 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
134 xaie.copy(cStr, xaie.size());
135 return mlirStringRefCreate(cStr, xaie.size());
139 MlirStringRef deviceName) {
141 llvm::raw_string_ostream
os(xaie);
142 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
144 mod,
os, llvm::StringRef(deviceName.data, deviceName.length))))
145 return mlirStringRefCreate(
nullptr, 0);
146 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
147 xaie.copy(cStr, xaie.size());
148 return mlirStringRefCreate(cStr, xaie.size());
152 MlirStringRef deviceName) {
154 llvm::raw_string_ostream
os(bcf);
155 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
158 llvm::StringRef(deviceName.data, deviceName.length))))
159 return mlirStringRefCreate(
nullptr, 0);
160 char *cStr =
static_cast<char *
>(malloc(bcf.size()));
161 bcf.copy(cStr, bcf.size());
162 return mlirStringRefCreate(cStr, bcf.size());
167 llvm::raw_string_ostream
os(ll);
168 std::vector<std::string> files;
169 files.reserve(nModules);
170 for (
int i = 0; i < nModules; ++i)
171 files.emplace_back(modules[i].data, modules[i].length);
173 return mlirStringRefCreate(
nullptr, 0);
174 char *cStr =
static_cast<char *
>(malloc(ll.size()));
175 ll.copy(cStr, ll.size());
176 return mlirStringRefCreate(cStr, ll.size());
MlirStringRef aieTranslateControlPacketsToUI32Vec(MlirOperation moduleOp, MlirStringRef deviceName)
MlirStringRef aieTranslateToBCF(MlirOperation moduleOp, int col, int row, MlirStringRef deviceName)
MlirStringRef aieTranslateModuleToLLVMIR(MlirOperation moduleOp)
AieRtControl getAieRtControl(AieTargetModel tm)
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)
MlirStringRef aieTranslateToHSA(MlirOperation moduleOp, MlirStringRef deviceName)
MlirOperation aieTranslateBinaryToTxn(MlirContext ctx, MlirStringRef binary)
void aieRtExportSerializedTransaction(AieRtControl aieCtl)
MlirStringRef aieTranslateToXAIEV2(MlirOperation moduleOp, MlirStringRef deviceName)
MlirStringRef aieTranslateNpuToBinary(MlirOperation moduleOp, MlirStringRef deviceNameMlir, MlirStringRef sequenceNameMlir)
void aieRtStartTransaction(AieRtControl aieCtl)
MlirLogicalResult aieTranslateToCDODirect(MlirOperation moduleOp, MlirStringRef workDirPath, MlirStringRef deviceName, bool bigEndian, bool emitUnified, bool cdoDebug, bool aieSim, bool xaieDebug, bool enableCores)
Include the generated interface declarations.
mlir::LogicalResult AIETranslateControlPacketsToUI32Vec(mlir::ModuleOp, std::vector< uint32_t > &, llvm::StringRef deviceName="", llvm::StringRef sequenceName="")
mlir::LogicalResult AIETranslateToCDODirect(mlir::ModuleOp m, llvm::StringRef workDirPath, llvm::StringRef deviceName, 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 AIETranslateToBCF(mlir::ModuleOp module, llvm::raw_ostream &output, int tileCol, int tileRow, llvm::StringRef deviceName="")
mlir::LogicalResult AIETranslateNpuToBinary(mlir::ModuleOp, std::vector< uint32_t > &, llvm::StringRef deviceName="", llvm::StringRef sequenceName="")
std::optional< mlir::ModuleOp > convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, std::vector< uint8_t > &binary)
mlir::LogicalResult AIETranslateToHSA(mlir::ModuleOp module, llvm::raw_ostream &output, llvm::StringRef deviceName="")
mlir::LogicalResult AIETranslateToXAIEV2(mlir::ModuleOp module, llvm::raw_ostream &output, llvm::StringRef deviceName="")
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()