fix dense attributes with single element writing to memory
This commit is contained in:
@@ -475,9 +475,21 @@ OnnxMlirCompilerErrorCodes compileModuleToPIMJSON(ModuleOp& moduleOp, std::strin
|
||||
auto denseAttr = dyn_cast<DenseElementsAttr>(*initialValue);
|
||||
if (!denseAttr)
|
||||
return;
|
||||
auto memEntry = memory.hostMem.getMemEntry(getGlobalOp.getResult());
|
||||
auto rawData = denseAttr.getRawData();
|
||||
std::memcpy(memoryBuffer.data() + memEntry.address, rawData.data(), std::min(rawData.size(), memEntry.size));
|
||||
|
||||
MemEntry memEntry = memory.hostMem.getMemEntry(getGlobalOp.getResult());
|
||||
ArrayRef<char> rawData = denseAttr.getRawData();
|
||||
char* dst = memoryBuffer.data() + memEntry.address;
|
||||
|
||||
if (denseAttr.isSplat()) {
|
||||
size_t elementSize = rawData.size();
|
||||
assert(elementSize * getGlobalOp.getType().getNumElements() == memEntry.size && "Data size mismatch");
|
||||
for (size_t offset = 0; offset < memEntry.size; offset += elementSize)
|
||||
std::memcpy(dst + offset, rawData.data(), std::min(elementSize, memEntry.size - offset));
|
||||
}
|
||||
else {
|
||||
assert(rawData.size() == memEntry.size && "Data size mismatch");
|
||||
std::memcpy(dst, rawData.data(), rawData.size());
|
||||
}
|
||||
});
|
||||
memoryFileStream.write(memoryBuffer.data(), memoryBuffer.size());
|
||||
memoryFileStream.close();
|
||||
|
||||
Reference in New Issue
Block a user