From e0afbb2b380c0a3a0d6eda83dae1197fdcb3ea96 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 7 Oct 2024 14:47:02 -0700 Subject: [PATCH 1/3] debug --- src/passes/opt-utils.h | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h index 69552f7178a..a56af96d163 100644 --- a/src/passes/opt-utils.h +++ b/src/passes/opt-utils.h @@ -20,11 +20,12 @@ #include #include -#include -#include -#include -#include -#include +#include "ir/element-utils.h" +#include "ir/module-utils.h" +#include "pass.h" +#include "passes/pass-utils.h" +#include "wasm.h" +#include "wasm-validator.h" namespace wasm::OptUtils { @@ -42,10 +43,22 @@ inline void addUsefulPassesAfterInlining(PassRunner& runner) { inline void optimizeAfterInlining(const PassUtils::FuncSet& funcs, Module* module, PassRunner* parentRunner) { + // In pass-debug mode, validate before and after these optimizations. This + // helps catch bugs in the middle of passes like inlining and dae. + if (PassRunner::getPassDebug()) { + if (!WasmValidator().validate(*module, parentRunner->options)) { + Fatal() << "invalid wasm before optimizeAfterInlining"; + } + } PassUtils::FilteredPassRunner runner(module, funcs, parentRunner->options); runner.setIsNested(true); addUsefulPassesAfterInlining(runner); runner.run(); + if (PassRunner::getPassDebug()) { + if (!WasmValidator().validate(*module, parentRunner->options)) { + Fatal() << "invalid wasm after optimizeAfterInlining"; + } + } } struct FunctionRefReplacer From 3e078585e38e239a3ce9658a6e5dfb2960b81b2c Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Tue, 15 Oct 2024 16:28:33 -0700 Subject: [PATCH 2/3] format --- src/passes/opt-utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h index a56af96d163..15f8d83eed9 100644 --- a/src/passes/opt-utils.h +++ b/src/passes/opt-utils.h @@ -24,8 +24,8 @@ #include "ir/module-utils.h" #include "pass.h" #include "passes/pass-utils.h" -#include "wasm.h" #include "wasm-validator.h" +#include "wasm.h" namespace wasm::OptUtils { From 3e5aeaeb177bfa7560abfa12d3d86d8cb1472ad0 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 16 Oct 2024 09:22:28 -0700 Subject: [PATCH 3/3] level 2+ only --- src/passes/opt-utils.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h index 15f8d83eed9..69f055fd37e 100644 --- a/src/passes/opt-utils.h +++ b/src/passes/opt-utils.h @@ -44,8 +44,10 @@ inline void optimizeAfterInlining(const PassUtils::FuncSet& funcs, Module* module, PassRunner* parentRunner) { // In pass-debug mode, validate before and after these optimizations. This - // helps catch bugs in the middle of passes like inlining and dae. - if (PassRunner::getPassDebug()) { + // helps catch bugs in the middle of passes like inlining and dae. We do this + // at level 2+ and not 1 so that this extra validation is not added to the + // timings that level 1 reports. + if (PassRunner::getPassDebug() >= 2) { if (!WasmValidator().validate(*module, parentRunner->options)) { Fatal() << "invalid wasm before optimizeAfterInlining"; } @@ -54,7 +56,7 @@ inline void optimizeAfterInlining(const PassUtils::FuncSet& funcs, runner.setIsNested(true); addUsefulPassesAfterInlining(runner); runner.run(); - if (PassRunner::getPassDebug()) { + if (PassRunner::getPassDebug() >= 2) { if (!WasmValidator().validate(*module, parentRunner->options)) { Fatal() << "invalid wasm after optimizeAfterInlining"; }