16#include "mlir-c/Support.h"
17#include "mlir/CAPI/IR.h"
18#include "mlir/CAPI/Support.h"
19#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
20#include "mlir/IR/BuiltinOps.h"
21#include "mlir/Support/FileUtilities.h"
22#include "mlir/Target/LLVMIR/Export.h"
24#include "llvm/IR/LLVMContext.h"
25#include "llvm/IR/Module.h"
26#include "llvm/Support/Casting.h"
27#include "llvm/Support/raw_ostream.h"
40 llvm::raw_string_ostream os(llvmir);
41 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
42 llvm::LLVMContext llvmContext;
43 auto llvmModule = translateModuleToLLVMIR(mod, llvmContext);
45 return mlirStringRefCreate(
nullptr, 0);
46 llvmModule->print(os,
nullptr);
47 char *cStr =
static_cast<char *
>(malloc(llvmir.size()));
48 llvmir.copy(cStr, llvmir.size());
49 return mlirStringRefCreate(cStr, llvmir.size());
53 MlirStringRef workDirPath,
54 MlirStringRef deviceName,
55 bool bigEndian,
bool emitUnified,
56 bool cdoDebug,
bool aieSim,
57 bool xaieDebug,
bool enableCores) {
58 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
60 mod, llvm::StringRef(workDirPath.data, workDirPath.length),
61 llvm::StringRef(deviceName.data, deviceName.length), bigEndian,
62 emitUnified, cdoDebug, aieSim, xaieDebug, enableCores);
63 std::vector<std::string> diagnostics;
64 ScopedDiagnosticHandler handler(mod.getContext(), [&](Diagnostic &d) {
65 llvm::raw_string_ostream(diagnostics.emplace_back())
66 << d.getLocation() <<
": " << d;
69 for (
const auto &diagnostic : diagnostics)
70 std::cerr << diagnostic <<
"\n";
76 std::vector<uint8_t> binaryData(binary.data, binary.data + binary.length);
79 return wrap(ModuleOp().getOperation());
80 return wrap(mod->getOperation());
84 MlirStringRef deviceNameMlir,
85 MlirStringRef sequenceNameMlir) {
86 std::vector<uint32_t> insts;
87 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
88 llvm::StringRef deviceName(deviceNameMlir.data, deviceNameMlir.length);
89 llvm::StringRef sequenceName(sequenceNameMlir.data, sequenceNameMlir.length);
91 return mlirStringRefCreate(
nullptr, 0);
92 size_t insts_size = insts.size() *
sizeof(uint32_t);
93 char *cStr =
static_cast<char *
>(malloc(insts_size));
94 memcpy(cStr, insts.data(), insts_size);
95 return mlirStringRefCreate(cStr, insts_size);
99 MlirStringRef deviceName) {
100 std::vector<uint32_t> insts;
101 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
103 mod, insts, llvm::StringRef(deviceName.data, deviceName.length))))
104 return mlirStringRefCreate(
nullptr, 0);
105 size_t insts_size = insts.size() *
sizeof(uint32_t);
106 char *cStr =
static_cast<char *
>(malloc(insts_size));
107 memcpy(cStr, insts.data(), insts_size);
108 return mlirStringRefCreate(cStr, insts_size);
112 MlirStringRef deviceName) {
114 llvm::raw_string_ostream os(xaie);
115 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
117 mod, os, llvm::StringRef(deviceName.data, deviceName.length))))
118 return mlirStringRefCreate(
nullptr, 0);
119 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
120 xaie.copy(cStr, xaie.size());
121 return mlirStringRefCreate(cStr, xaie.size());
125 MlirStringRef deviceName) {
127 llvm::raw_string_ostream os(bcf);
128 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
131 llvm::StringRef(deviceName.data, deviceName.length))))
132 return mlirStringRefCreate(
nullptr, 0);
133 char *cStr =
static_cast<char *
>(malloc(bcf.size()));
134 bcf.copy(cStr, bcf.size());
135 return mlirStringRefCreate(cStr, bcf.size());
140 llvm::raw_string_ostream os(ll);
141 std::vector<std::string> files;
142 files.reserve(nModules);
143 for (
int i = 0; i < nModules; ++i)
144 files.emplace_back(modules[i].data, modules[i].length);
146 return mlirStringRefCreate(
nullptr, 0);
147 char *cStr =
static_cast<char *
>(malloc(ll.size()));
148 ll.copy(cStr, ll.size());
149 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)
void aieRtDmaUpdateBdAddr(AieRtControl aieCtl, int col, int row, size_t addr, size_t bdId)
void freeAieRtControl(AieRtControl aieCtl)
MlirStringRef aieLLVMLink(MlirStringRef *modules, int nModules)
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)
MLIR_CAPI_EXPORTED AieRtControl getAieRtControl(AieTargetModel tm)
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 AIETranslateControlPacketsToUI32Vec(mlir::ModuleOp, std::vector< uint32_t > &, llvm::StringRef deviceName="", llvm::StringRef sequenceName="", std::vector< TxnLocEntry > *locmap=nullptr)
mlir::LogicalResult AIETranslateNpuToBinary(mlir::ModuleOp, std::vector< uint32_t > &, llvm::StringRef deviceName="", llvm::StringRef sequenceName="", std::vector< TxnLocEntry > *locmap=nullptr, bool foldDDRAddrOffset=true, NpuConfigCache *configs=nullptr)
mlir::LogicalResult AIELLVMLink(llvm::raw_ostream &output, const 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="")
std::optional< mlir::ModuleOp > convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, std::vector< uint8_t > &binary)
mlir::LogicalResult AIETranslateToXAIEV2(mlir::ModuleOp module, llvm::raw_ostream &output, llvm::StringRef deviceName="")
void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId)
std::vector< uint8_t > exportSerializedTransaction()