summaryrefslogtreecommitdiff
path: root/src/passes/pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r--src/passes/pass.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index 9215341e3..66ffb9b30 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -17,12 +17,13 @@
#include <chrono>
#include <sstream>
-#include <support/colors.h>
-#include <passes/passes.h>
-#include <pass.h>
-#include <wasm-validator.h>
-#include <wasm-io.h>
+#include "support/colors.h"
+#include "passes/passes.h"
+#include "pass.h"
+#include "wasm-validator.h"
+#include "wasm-io.h"
#include "ir/hashed.h"
+#include "ir/module-utils.h"
namespace wasm {
@@ -267,9 +268,9 @@ void PassRunner::run() {
auto before = std::chrono::steady_clock::now();
if (pass->isFunctionParallel()) {
// function-parallel passes should get a new instance per function
- for (auto& func : wasm->functions) {
- runPassOnFunction(pass, func.get());
- }
+ ModuleUtils::iterDefinedFunctions(*wasm, [&](Function* func) {
+ runPassOnFunction(pass, func);
+ });
} else {
runPass(pass);
}
@@ -320,9 +321,11 @@ void PassRunner::run() {
return ThreadWorkState::Finished; // nothing left
}
Function* func = this->wasm->functions[index].get();
- // do the current task: run all passes on this function
- for (auto* pass : stack) {
- runPassOnFunction(pass, func);
+ if (!func->imported()) {
+ // do the current task: run all passes on this function
+ for (auto* pass : stack) {
+ runPassOnFunction(pass, func);
+ }
}
if (index + 1 == numFunctions) {
return ThreadWorkState::Finished; // we did the last one