summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/ReorderFunctions.cpp18
-rw-r--r--src/passes/pass.cpp3
-rw-r--r--src/passes/passes.h1
3 files changed, 22 insertions, 0 deletions
diff --git a/src/passes/ReorderFunctions.cpp b/src/passes/ReorderFunctions.cpp
index 96ebfc048..cf3c8bb1f 100644
--- a/src/passes/ReorderFunctions.cpp
+++ b/src/passes/ReorderFunctions.cpp
@@ -97,4 +97,22 @@ struct ReorderFunctions : public Pass {
Pass* createReorderFunctionsPass() { return new ReorderFunctions(); }
+struct ReorderFunctionsByName : public Pass {
+ // Only reorders functions, does not change their contents.
+ bool requiresNonNullableLocalFixups() override { return false; }
+
+ void run(Module* module) override {
+ std::sort(module->functions.begin(),
+ module->functions.end(),
+ [](const std::unique_ptr<Function>& a,
+ const std::unique_ptr<Function>& b) -> bool {
+ return a->name < b->name;
+ });
+ }
+};
+
+Pass* createReorderFunctionsByNamePass() {
+ return new ReorderFunctionsByName();
+}
+
} // namespace wasm
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index adaa42e04..2b89371c4 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -375,6 +375,9 @@ void PassRegistry::registerPasses() {
registerPass("remove-unused-types",
"remove unused private GC types",
createRemoveUnusedTypesPass);
+ registerPass("reorder-functions-by-name",
+ "sorts functions by name (useful for debugging)",
+ createReorderFunctionsByNamePass);
registerPass("reorder-functions",
"sorts functions by access frequency",
createReorderFunctionsPass);
diff --git a/src/passes/passes.h b/src/passes/passes.h
index d8855d4a8..8cc092f98 100644
--- a/src/passes/passes.h
+++ b/src/passes/passes.h
@@ -118,6 +118,7 @@ Pass* createRemoveUnusedModuleElementsPass();
Pass* createRemoveUnusedNonFunctionModuleElementsPass();
Pass* createRemoveUnusedNamesPass();
Pass* createRemoveUnusedTypesPass();
+Pass* createReorderFunctionsByNamePass();
Pass* createReorderFunctionsPass();
Pass* createReorderGlobalsPass();
Pass* createReorderGlobalsAlwaysPass();