From 83e70667d4b06885000d35d1d70b3f16363bf405 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 26 Aug 2021 18:26:43 -0700 Subject: Asyncify: Degrade gracefully if too many locals to compute relevantLiveLocals (#4108) --- src/passes/Asyncify.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/passes/Asyncify.cpp b/src/passes/Asyncify.cpp index d0d03c9d1..dc2ebd4d4 100644 --- a/src/passes/Asyncify.cpp +++ b/src/passes/Asyncify.cpp @@ -1269,6 +1269,15 @@ private: }; RelevantLiveLocalsWalker walker; + walker.setFunction(func); + if (!walker.canRun(func)) { + // We can proceed without this optimization, which will cause more + // spilling - assume all locals are relevant. + for (Index i = 0; i < func->getNumLocals(); i++) { + relevantLiveLocals.insert(i); + } + return; + } walker.walkFunctionInModule(func, getModule()); // The relevant live locals are ones that are alive at an unwind/rewind // location. TODO look more precisely inside basic blocks, as one might stop -- cgit v1.2.3