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/Support/Casting.h"
29#include "llvm/Support/raw_ostream.h"
42 llvm::raw_string_ostream
os(cpp);
43 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
45 return mlirStringRefCreate(
nullptr, 0);
46 char *cStr =
static_cast<char *
>(malloc(cpp.size()));
47 cpp.copy(cStr, cpp.size());
48 return mlirStringRefCreate(cStr, cpp.size());
53 llvm::raw_string_ostream
os(llvmir);
54 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
55 llvm::LLVMContext llvmContext;
56 auto llvmModule = translateModuleToLLVMIR(mod, llvmContext);
58 return mlirStringRefCreate(
nullptr, 0);
59 llvmModule->print(
os,
nullptr);
60 char *cStr =
static_cast<char *
>(malloc(llvmir.size()));
61 llvmir.copy(cStr, llvmir.size());
62 return mlirStringRefCreate(cStr, llvmir.size());
66 MlirStringRef workDirPath,
67 bool bigEndian,
bool emitUnified,
68 bool cdoDebug,
bool aieSim,
69 bool xaieDebug,
bool enableCores) {
70 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
72 mod, llvm::StringRef(workDirPath.data, workDirPath.length), bigEndian,
73 emitUnified, cdoDebug, aieSim, xaieDebug, enableCores);
74 std::vector<std::string> diagnostics;
75 ScopedDiagnosticHandler handler(mod.getContext(), [&](Diagnostic &d) {
76 llvm::raw_string_ostream(diagnostics.emplace_back())
77 << d.getLocation() <<
": " << d;
80 for (
const auto &diagnostic : diagnostics)
81 std::cerr << diagnostic <<
"\n";
87 std::vector<uint8_t> binaryData(binary.data, binary.data + binary.length);
90 return wrap(ModuleOp().getOperation());
91 return wrap(mod->getOperation());
95 MlirStringRef sequenceName) {
96 std::vector<uint32_t> insts;
97 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
98 llvm::StringRef name(sequenceName.data, sequenceName.length);
100 return mlirStringRefCreate(
nullptr, 0);
101 size_t insts_size = insts.size() *
sizeof(uint32_t);
102 char *cStr =
static_cast<char *
>(malloc(insts_size));
103 memcpy(cStr, insts.data(), insts_size);
104 return mlirStringRefCreate(cStr, insts_size);
108 std::vector<uint32_t> insts;
109 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
111 return mlirStringRefCreate(
nullptr, 0);
112 size_t insts_size = insts.size() *
sizeof(uint32_t);
113 char *cStr =
static_cast<char *
>(malloc(insts_size));
114 memcpy(cStr, insts.data(), insts_size);
115 return mlirStringRefCreate(cStr, insts_size);
120 llvm::raw_string_ostream
os(xaie);
121 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
123 return mlirStringRefCreate(
nullptr, 0);
124 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
125 xaie.copy(cStr, xaie.size());
126 return mlirStringRefCreate(cStr, xaie.size());
131 llvm::raw_string_ostream
os(xaie);
132 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
134 return mlirStringRefCreate(
nullptr, 0);
135 char *cStr =
static_cast<char *
>(malloc(xaie.size()));
136 xaie.copy(cStr, xaie.size());
137 return mlirStringRefCreate(cStr, xaie.size());
142 llvm::raw_string_ostream
os(bcf);
143 ModuleOp mod = llvm::cast<ModuleOp>(unwrap(moduleOp));
145 return mlirStringRefCreate(
nullptr, 0);
146 char *cStr =
static_cast<char *
>(malloc(bcf.size()));
147 bcf.copy(cStr, bcf.size());
148 return mlirStringRefCreate(cStr, bcf.size());
153 llvm::raw_string_ostream
os(ll);
154 std::vector<std::string> files;
155 files.reserve(nModules);
156 for (
int i = 0; i < nModules; ++i)
157 files.emplace_back(modules[i].data, modules[i].length);
159 return mlirStringRefCreate(
nullptr, 0);
160 char *cStr =
static_cast<char *
>(malloc(ll.size()));
161 ll.copy(cStr, ll.size());
162 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)
void exportSerializedTransaction()