summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/opt-utils.h25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/passes/opt-utils.h b/src/passes/opt-utils.h
index 69552f717..69f055fd3 100644
--- a/src/passes/opt-utils.h
+++ b/src/passes/opt-utils.h
@@ -20,11 +20,12 @@
#include <functional>
#include <unordered_set>
-#include <ir/element-utils.h>
-#include <ir/module-utils.h>
-#include <pass.h>
-#include <passes/pass-utils.h>
-#include <wasm.h>
+#include "ir/element-utils.h"
+#include "ir/module-utils.h"
+#include "pass.h"
+#include "passes/pass-utils.h"
+#include "wasm-validator.h"
+#include "wasm.h"
namespace wasm::OptUtils {
@@ -42,10 +43,24 @@ 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. 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";
+ }
+ }
PassUtils::FilteredPassRunner runner(module, funcs, parentRunner->options);
runner.setIsNested(true);
addUsefulPassesAfterInlining(runner);
runner.run();
+ if (PassRunner::getPassDebug() >= 2) {
+ if (!WasmValidator().validate(*module, parentRunner->options)) {
+ Fatal() << "invalid wasm after optimizeAfterInlining";
+ }
+ }
}
struct FunctionRefReplacer