[Mlir-commits] [mlir] [MLIR] Add a BlobAttr interface for attribute to wrap arbitrary content and use it as linkLibs for ModuleToObject (PR #120116)
Fabian Mora
llvmlistbot at llvm.org
Mon Dec 16 13:01:01 PST 2024
================
@@ -89,22 +92,51 @@ ModuleToObject::loadBitcodeFile(llvm::LLVMContext &context, StringRef path) {
}
LogicalResult ModuleToObject::loadBitcodeFilesFromList(
- llvm::LLVMContext &context, ArrayRef<std::string> fileList,
+ llvm::LLVMContext &context, ArrayRef<Attribute> librariesToLink,
SmallVector<std::unique_ptr<llvm::Module>> &llvmModules,
bool failureOnError) {
- for (const std::string &str : fileList) {
- // Test if the path exists, if it doesn't abort.
- StringRef pathRef = StringRef(str.data(), str.size());
- if (!llvm::sys::fs::is_regular_file(pathRef)) {
+ for (Attribute linkLib : librariesToLink) {
+ // Attributes in this list can be either list of file paths using
+ // StringAttr, or a resource attribute pointing to the LLVM bitcode in
+ // memory.
+ if (auto filePath = dyn_cast<StringAttr>(linkLib)) {
+ // Test if the path exists, if it doesn't abort.
+ if (!llvm::sys::fs::is_regular_file(filePath.strref())) {
+ getOperation().emitError()
+ << "File path: " << filePath << " does not exist or is not a file.";
+ return failure();
+ }
+ // Load the file or abort on error.
+ if (auto bcFile = loadBitcodeFile(context, filePath))
+ llvmModules.push_back(std::move(bcFile));
+ else if (failureOnError)
+ return failure();
+ continue;
+ }
+ if (auto blobAttr = dyn_cast<BlobAttr>(linkLib)) {
+ // Load the file or abort on error.
+ llvm::SMDiagnostic error;
+ ArrayRef<char> data = blobAttr.getData();
+ std::unique_ptr<llvm::MemoryBuffer> buffer =
+ llvm::MemoryBuffer::getMemBuffer(StringRef(data.data(), data.size()),
+ "blobLinkedLib",
+ /*RequiresNullTerminator=*/false);
+ std::unique_ptr<llvm::Module> mod =
+ getLazyIRModule(std::move(buffer), error, context);
+ if (mod) {
+ llvmModules.push_back(std::move(mod));
----------------
fabianmcg wrote:
Also, there should be a call to `handleBitcodeFile`.
https://github.com/llvm/llvm-project/pull/120116
More information about the Mlir-commits
mailing list