diff options
Diffstat (limited to 'src/binaryen-c.cpp')
-rw-r--r-- | src/binaryen-c.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 9b46f0aba..70c907666 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -912,6 +912,22 @@ BinaryenFunctionRef BinaryenAddFunction(BinaryenModuleRef module, const char* na return ret; } +BinaryenFunctionRef BinaryenGetFunction(BinaryenModuleRef module, const char* name) { + if (tracing) { + std::cout << " BinaryenGetFunction(the_module, \"" << name << "\");\n"; + } + + auto* wasm = (Module*)module; + return wasm->getFunction(name); +} +void BinaryenRemoveFunction(BinaryenModuleRef module, const char* name) { + if (tracing) { + std::cout << " BinaryenRemoveFunction(the_module, \"" << name << "\");\n"; + } + + auto* wasm = (Module*)module; + wasm->removeFunction(name); +} BinaryenGlobalRef BinaryenAddGlobal(BinaryenModuleRef module, const char* name, BinaryenType type, int8_t mutable_, BinaryenExpressionRef init) { if (tracing) { @@ -1214,6 +1230,50 @@ void BinaryenModuleInterpret(BinaryenModuleRef module) { } // +// ========== Function Operations ========== +// + +BinaryenExpressionRef BinaryenFunctionGetBody(BinaryenFunctionRef func) { + if (tracing) { + std::cout << " BinaryenFunctionGetBody(functions[" << functions[func] << "]);\n"; + } + + return ((Function*)func)->body; +} + +void BinaryenFunctionOptimize(BinaryenFunctionRef func, BinaryenModuleRef module) { + if (tracing) { + std::cout << " BinaryenFunctionOptimize(functions[" << functions[func] << "], the_module);\n"; + } + + Module* wasm = (Module*)module; + PassRunner passRunner(wasm); + passRunner.addDefaultOptimizationPasses(); + passRunner.runFunction((Function*)func); +} + +void BinaryenFunctionRunPasses(BinaryenFunctionRef func, BinaryenModuleRef module, const char **passes, BinaryenIndex numPasses) { + if (tracing) { + std::cout << " {\n"; + std::cout << " const char* passes[] = { "; + for (BinaryenIndex i = 0; i < numPasses; i++) { + if (i > 0) std::cout << ", "; + std::cout << "\"" << passes[i] << "\""; + } + std::cout << " };\n"; + std::cout << " BinaryenFunctionRunPasses(functions[" << functions[func] << ", the_module, passes, " << numPasses << ");\n"; + std::cout << " }\n"; + } + + Module* wasm = (Module*)module; + PassRunner passRunner(wasm); + for (BinaryenIndex i = 0; i < numPasses; i++) { + passRunner.add(passes[i]); + } + passRunner.runFunction((Function*)func); +} + +// // ========== CFG / Relooper ========== // |