diff options
author | Alon Zakai <azakai@google.com> | 2022-01-26 11:10:26 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-26 11:10:26 -0800 |
commit | 97bb0bdacbb8ccd59aca116c66f0f43f322aebaa (patch) | |
tree | fcabd57b372ae4622d2f8bc118a2c78473a277d6 /src/passes/NoExitRuntime.cpp | |
parent | bf3386dbc804144dfb4b4d543da9fd53e2fcfc46 (diff) | |
download | binaryen-97bb0bdacbb8ccd59aca116c66f0f43f322aebaa.tar.gz binaryen-97bb0bdacbb8ccd59aca116c66f0f43f322aebaa.tar.bz2 binaryen-97bb0bdacbb8ccd59aca116c66f0f43f322aebaa.zip |
Remove NoExitRuntime pass (#4431)
After emscripten-core/emscripten#15905 lands Emscripten will no longer use it,
and nothing else needs it AFAIK.
Diffstat (limited to 'src/passes/NoExitRuntime.cpp')
-rw-r--r-- | src/passes/NoExitRuntime.cpp | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/src/passes/NoExitRuntime.cpp b/src/passes/NoExitRuntime.cpp deleted file mode 100644 index e15ef81bc..000000000 --- a/src/passes/NoExitRuntime.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2016 WebAssembly Community Group participants - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// -// Assumes the program will never exit the runtime (as in the emscripten -// NO_EXIT_RUNTIME option). That means that atexit()s do not need to be -// run. -// - -#include <asmjs/shared-constants.h> -#include <pass.h> -#include <wasm-builder.h> -#include <wasm.h> - -namespace wasm { - -struct NoExitRuntime : public WalkerPass<PostWalker<NoExitRuntime>> { - bool isFunctionParallel() override { return true; } - - Pass* create() override { return new NoExitRuntime; } - - // Remove all possible manifestations of atexit, across llvm wasm - // backend. - std::array<Name, 4> ATEXIT_NAMES = { - {"___cxa_atexit", "__cxa_atexit", "_atexit", "atexit"}}; - - void visitCall(Call* curr) { - auto* import = getModule()->getFunctionOrNull(curr->target); - if (!import || !import->imported() || import->module != ENV) { - return; - } - for (auto name : ATEXIT_NAMES) { - if (name == import->base) { - // Remove the call, and drop the arguments (which may have side - // effects); let other passes clean that up more. - Builder builder(*getModule()); - std::vector<Expression*> args; - for (auto* operand : curr->operands) { - args.push_back(builder.makeDrop(operand)); - } - // Ensure the block has the right type using the last arg. - args.push_back(builder.replaceWithIdenticalType(curr)); - replaceCurrent(builder.makeBlock(args)); - break; - } - } - } -}; - -Pass* createNoExitRuntimePass() { return new NoExitRuntime(); } - -} // namespace wasm |