diff options
| author | Matteo Franciolini <m_franciolini@apple.com> | 2023-11-13 12:59:30 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-13 12:59:30 -0600 |
| commit | 4488f4933ee2a5326be643e8d1afec623c318fb9 (patch) | |
| tree | 136c9a8dcd3f12c8aa3df0a334f835a766d8cfd4 /mlir/lib/Bytecode | |
| parent | 08e8dacb4ad777ff06b747006c838c0fbab4ff51 (diff) | |
[mlir][bytecode] Add bytecode writer config API to skip serialization of resources (#71991)
When serializing to bytecode, users can select the option to elide
resources from the bytecode file. This will instruct the bytecode writer
to serialize only the key and resource kind, while skipping
serialization of the data buffer. At parsing, the IR is built in memory
with valid (but empty) resource handlers.
Diffstat (limited to 'mlir/lib/Bytecode')
| -rw-r--r-- | mlir/lib/Bytecode/Writer/BytecodeWriter.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/mlir/lib/Bytecode/Writer/BytecodeWriter.cpp b/mlir/lib/Bytecode/Writer/BytecodeWriter.cpp index 01dcea1ca384..6097f0eda469 100644 --- a/mlir/lib/Bytecode/Writer/BytecodeWriter.cpp +++ b/mlir/lib/Bytecode/Writer/BytecodeWriter.cpp @@ -39,6 +39,10 @@ struct BytecodeWriterConfig::Impl { /// Note: This only differs from kVersion if a specific version is set. int64_t bytecodeVersion = bytecode::kVersion; + /// A flag specifying whether to elide emission of resources into the bytecode + /// file. + bool shouldElideResourceData = false; + /// A map containing dialect version information for each dialect to emit. llvm::StringMap<std::unique_ptr<DialectVersion>> dialectVersionMap; @@ -89,6 +93,11 @@ void BytecodeWriterConfig::attachResourcePrinter( impl->externalResourcePrinters.emplace_back(std::move(printer)); } +void BytecodeWriterConfig::setElideResourceDataFlag( + bool shouldElideResourceData) { + impl->shouldElideResourceData = shouldElideResourceData; +} + void BytecodeWriterConfig::setDesiredBytecodeVersion(int64_t bytecodeVersion) { impl->bytecodeVersion = bytecodeVersion; } @@ -1170,22 +1179,25 @@ public: using PostProcessFn = function_ref<void(StringRef, AsmResourceEntryKind)>; ResourceBuilder(EncodingEmitter &emitter, StringSectionBuilder &stringSection, - PostProcessFn postProcessFn) + PostProcessFn postProcessFn, bool shouldElideData) : emitter(emitter), stringSection(stringSection), - postProcessFn(postProcessFn) {} + postProcessFn(postProcessFn), shouldElideData(shouldElideData) {} ~ResourceBuilder() override = default; void buildBlob(StringRef key, ArrayRef<char> data, uint32_t dataAlignment) final { - emitter.emitOwnedBlobAndAlignment(data, dataAlignment); + if (!shouldElideData) + emitter.emitOwnedBlobAndAlignment(data, dataAlignment); postProcessFn(key, AsmResourceEntryKind::Blob); } void buildBool(StringRef key, bool data) final { - emitter.emitByte(data); + if (!shouldElideData) + emitter.emitByte(data); postProcessFn(key, AsmResourceEntryKind::Bool); } void buildString(StringRef key, StringRef data) final { - emitter.emitVarInt(stringSection.insert(data)); + if (!shouldElideData) + emitter.emitVarInt(stringSection.insert(data)); postProcessFn(key, AsmResourceEntryKind::String); } @@ -1193,6 +1205,7 @@ private: EncodingEmitter &emitter; StringSectionBuilder &stringSection; PostProcessFn postProcessFn; + bool shouldElideData = false; }; } // namespace @@ -1225,7 +1238,8 @@ void BytecodeWriter::writeResourceSection(Operation *op, // Builder used to emit resources. ResourceBuilder entryBuilder(resourceEmitter, stringSection, - appendResourceOffset); + appendResourceOffset, + config.shouldElideResourceData); // Emit the external resource entries. resourceOffsetEmitter.emitVarInt(config.externalResourcePrinters.size()); |
