aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
diff options
context:
space:
mode:
authorRiver Riddle <riddleriver@gmail.com>2023-06-26 11:36:06 -0700
committerRiver Riddle <riddleriver@gmail.com>2023-06-26 16:33:20 -0700
commit6ee1aba8acc1255a6eb9e34788a2376c6357458b (patch)
tree77a9a49931d896d0fd850d83de59b4a30b298e7c /mlir/lib/Bytecode/Reader/BytecodeReader.cpp
parenta18266473be1439d324059afa0e8b124f0466428 (diff)
downloadllvm-6ee1aba8acc1255a6eb9e34788a2376c6357458b.zip
llvm-6ee1aba8acc1255a6eb9e34788a2376c6357458b.tar.gz
llvm-6ee1aba8acc1255a6eb9e34788a2376c6357458b.tar.bz2
[mlir][bytecode] Fix lazy loading of non-isolated regions
The bytecode reader currently assumes all regions can be lazy loaded, which breaks reading any non-isolated region. This patch fixes that by properly handling nested non-lazy regions, and only considers isolated regions as lazy. Differential Revision: https://reviews.llvm.org/D153795
Diffstat (limited to 'mlir/lib/Bytecode/Reader/BytecodeReader.cpp')
-rw-r--r--mlir/lib/Bytecode/Reader/BytecodeReader.cpp21
1 files changed, 9 insertions, 12 deletions
diff --git a/mlir/lib/Bytecode/Reader/BytecodeReader.cpp b/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
index 5aa24ba..5b313af 100644
--- a/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
+++ b/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
@@ -1317,11 +1317,11 @@ private:
regionStack.push_back(std::move(it->getSecond()->second));
lazyLoadableOps.erase(it->getSecond());
lazyLoadableOpsMap.erase(it);
- auto result = parseRegions(regionStack, regionStack.back());
- assert((regionStack.empty() || failed(result)) &&
- "broken invariant: regionStack should be empty when parseRegions "
- "succeeds");
- return result;
+
+ while (!regionStack.empty())
+ if (failed(parseRegions(regionStack, regionStack.back())))
+ return failure();
+ return success();
}
/// Return the context for this config.
@@ -2094,14 +2094,11 @@ BytecodeReader::Impl::parseRegions(std::vector<RegionReadState> &regionStack,
childState.owningReader =
std::make_unique<EncodingReader>(sectionData, fileLoc);
childState.reader = childState.owningReader.get();
- }
- if (lazyLoading) {
- // If the user has a callback set, they have the opportunity
- // to control lazyloading as we go.
- if (!lazyOpsCallback || !lazyOpsCallback(*op)) {
- lazyLoadableOps.push_back(
- std::make_pair(*op, std::move(childState)));
+ // If the user has a callback set, they have the opportunity to
+ // control lazyloading as we go.
+ if (lazyLoading && (!lazyOpsCallback || !lazyOpsCallback(*op))) {
+ lazyLoadableOps.emplace_back(*op, std::move(childState));
lazyLoadableOpsMap.try_emplace(*op,
std::prev(lazyLoadableOps.end()));
continue;