summaryrefslogtreecommitdiff
path: root/src/wasm-module-building.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-module-building.h')
-rw-r--r--src/wasm-module-building.h23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/wasm-module-building.h b/src/wasm-module-building.h
index c52cea9f9..61e98ba71 100644
--- a/src/wasm-module-building.h
+++ b/src/wasm-module-building.h
@@ -75,6 +75,7 @@ class OptimizingIncrementalModuleBuilder {
uint32_t numFunctions;
PassOptions passOptions;
std::function<void (PassRunner&)> addPrePasses;
+ std::function<void ()> beforeGlobalOptimizations;
Function* endMarker;
std::atomic<Function*>* list;
uint32_t nextFunction; // only used on main thread
@@ -90,8 +91,13 @@ class OptimizingIncrementalModuleBuilder {
public:
// numFunctions must be equal to the number of functions allocated, or higher. Knowing
// this bounds helps avoid locking.
- OptimizingIncrementalModuleBuilder(Module* wasm, Index numFunctions, PassOptions passOptions, std::function<void (PassRunner&)> addPrePasses, bool debug, bool validateGlobally)
- : wasm(wasm), numFunctions(numFunctions), passOptions(passOptions), addPrePasses(addPrePasses), endMarker(nullptr), list(nullptr), nextFunction(0),
+ OptimizingIncrementalModuleBuilder(Module* wasm, Index numFunctions, PassOptions passOptions,
+ std::function<void (PassRunner&)> addPrePasses,
+ std::function<void ()> beforeGlobalOptimizations,
+ bool debug, bool validateGlobally)
+ : wasm(wasm), numFunctions(numFunctions), passOptions(passOptions),
+ addPrePasses(addPrePasses), beforeGlobalOptimizations(beforeGlobalOptimizations),
+ endMarker(nullptr), list(nullptr), nextFunction(0),
numWorkers(0), liveWorkers(0), activeWorkers(0), availableFuncs(0), finishedFuncs(0),
finishing(false), debug(debug), validateGlobally(validateGlobally) {
@@ -165,14 +171,13 @@ public:
}
addPrePasses(passRunner);
passRunner.addDefaultFunctionOptimizationPasses();
- passRunner.addDefaultGlobalOptimizationPostPasses();
passRunner.run();
- return;
+ } else {
+ DEBUG_THREAD("finish()ing");
+ assert(nextFunction == numFunctions);
+ wakeAllWorkers();
+ waitUntilAllFinished();
}
- DEBUG_THREAD("finish()ing");
- assert(nextFunction == numFunctions);
- wakeAllWorkers();
- waitUntilAllFinished();
optimizeGlobally();
// TODO: clear side thread allocators from module allocator, as these threads were transient
}
@@ -225,9 +230,11 @@ private:
}
void optimizeGlobally() {
+ beforeGlobalOptimizations();
PassRunner passRunner(wasm, passOptions);
passRunner.addDefaultGlobalOptimizationPostPasses();
passRunner.run();
+
}
// worker code