diff options
Diffstat (limited to 'src/pass.h')
-rw-r--r-- | src/pass.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/pass.h b/src/pass.h index e25809faa..fff2b04eb 100644 --- a/src/pass.h +++ b/src/pass.h @@ -97,8 +97,20 @@ struct PassRunner { // what -O does. void addDefaultOptimizationPasses(); + // Adds the default optimization passes that work on + // individual functions. + void addDefaultFunctionOptimizationPasses(); + + // Adds the default optimization passes that work on + // entire modules as a whole. + void addDefaultGlobalOptimizationPasses(); + + // Run the passes on the module void run(); + // Run the passes on a specific function + void runFunction(Function* func); + // Get the last pass that was already executed of a certain type. template<class P> P* getLast(); @@ -112,12 +124,18 @@ struct PassRunner { class Pass { public: virtual ~Pass() {}; + // Override this to perform preparation work before the pass runs. virtual void prepare(PassRunner* runner, Module* module) {} virtual void run(PassRunner* runner, Module* module) = 0; // Override this to perform finalization work after the pass runs. virtual void finalize(PassRunner* runner, Module* module) {} + // Run on a single function. This has no prepare/finalize calls. + virtual void runFunction(PassRunner* runner, Module* module, Function* function) { + WASM_UNREACHABLE(); // by default, passes cannot be run this way + } + std::string name; protected: @@ -138,6 +156,11 @@ public: WalkerType::walkModule(module); finalize(runner, module); } + + void runFunction(PassRunner* runner, Module* module, Function* func) override { + WalkerType::setModule(module); + WalkerType::walkFunction(func); + } }; // Standard passes. All passes in /passes/ are runnable from the shell, |