diff options
author | Alon Zakai <azakai@google.com> | 2023-07-12 14:04:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-12 14:04:03 -0700 |
commit | 93769d51f3408e98598ceaa221a62ccefb744a94 (patch) | |
tree | b7b71e250aa2e3d8eea81b510749710028c628f4 /src | |
parent | a355cfd66b711557765c9fa109d5a432146bdc74 (diff) | |
download | binaryen-93769d51f3408e98598ceaa221a62ccefb744a94.tar.gz binaryen-93769d51f3408e98598ceaa221a62ccefb744a94.tar.bz2 binaryen-93769d51f3408e98598ceaa221a62ccefb744a94.zip |
Add a pass to sort functions by name (#5811)
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/ReorderFunctions.cpp | 18 | ||||
-rw-r--r-- | src/passes/pass.cpp | 3 | ||||
-rw-r--r-- | src/passes/passes.h | 1 |
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(); |