aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
diff options
context:
space:
mode:
authorMogball <jeff@modular.com>2023-09-29 18:31:12 -0700
committerMogball <jeff@modular.com>2023-09-29 18:39:56 -0700
commit2b5134f1b7f4d2ded14f138c84939d2037326c51 (patch)
treeb0f4857ed85a5b5e9534500e6d653563b59a4868 /mlir/lib/Bytecode/Reader/BytecodeReader.cpp
parent204883623ebd194669fc54435222e5bfb245b011 (diff)
downloadllvm-2b5134f1b7f4d2ded14f138c84939d2037326c51.zip
llvm-2b5134f1b7f4d2ded14f138c84939d2037326c51.tar.gz
llvm-2b5134f1b7f4d2ded14f138c84939d2037326c51.tar.bz2
[mlir] Fix bytecode reading of resource sections
This partially reverts #66380. The assertion that the underlying buffer of an EncodingReader is aligned to any required alignments for resource sections. Resources know their own alignment and pad their buffers accordingly, but the bytecode reader doesn't know that ahead of time. Consequently, it cannot give the resource EncodingReader a base buffer aligned to the maximum required alignment. A simple example from the test fails without this: ```mlir module @TestDialectResources attributes { bytecode.test = dense_resource<resource> : tensor<4xi32> } {} {-# dialect_resources: { builtin: { resource: "0x2000000001000000020000000300000004000000", resource_2: "0x2000000001000000020000000300000004000000" } } ```
Diffstat (limited to 'mlir/lib/Bytecode/Reader/BytecodeReader.cpp')
-rw-r--r--mlir/lib/Bytecode/Reader/BytecodeReader.cpp10
1 files changed, 2 insertions, 8 deletions
diff --git a/mlir/lib/Bytecode/Reader/BytecodeReader.cpp b/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
index 98a080d..0bc2a2f 100644
--- a/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
+++ b/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
@@ -111,13 +111,6 @@ public:
return ((uintptr_t)ptr & (alignment - 1)) != 0;
};
- // Ensure the data buffer was sufficiently aligned in the first place.
- if (LLVM_UNLIKELY(isUnaligned(buffer.begin()))) {
- return emitError("expected bytecode buffer to be aligned to ", alignment,
- ", but got pointer: '0x" +
- llvm::utohexstr((uintptr_t)buffer.begin()) + "'");
- }
-
// Shift the reader position to the next alignment boundary.
while (isUnaligned(dataIt)) {
uint8_t padding;
@@ -319,7 +312,8 @@ private:
// Parse in the remaining bytes of the value.
llvm::support::ulittle64_t resultLE(result);
- if (failed(parseBytes(numBytes, reinterpret_cast<uint8_t *>(&resultLE) + 1)))
+ if (failed(
+ parseBytes(numBytes, reinterpret_cast<uint8_t *>(&resultLE) + 1)))
return failure();
// Shift out the low-order bits that were used to mark how the value was