summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/CMakeLists.txt1
-rw-r--r--src/passes/NoExitRuntime.cpp65
-rw-r--r--src/passes/pass.cpp4
-rw-r--r--src/passes/passes.h1
4 files changed, 0 insertions, 71 deletions
diff --git a/src/passes/CMakeLists.txt b/src/passes/CMakeLists.txt
index e24072424..7e5960d4b 100644
--- a/src/passes/CMakeLists.txt
+++ b/src/passes/CMakeLists.txt
@@ -58,7 +58,6 @@ set(passes_SOURCES
MinifyImportsAndExports.cpp
NameList.cpp
NameTypes.cpp
- NoExitRuntime.cpp
OnceReduction.cpp
OptimizeAddedConstants.cpp
OptimizeInstructions.cpp
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
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index 99288cc6e..9158f22dd 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -251,10 +251,6 @@ void PassRegistry::registerPasses() {
createModAsyncifyNeverUnwindPass);
registerPass("nm", "name list", createNameListPass);
registerPass("name-types", "(re)name all heap types", createNameTypesPass);
- registerPass("no-exit-runtime",
- "removes calls to atexit(), which is valid if the C runtime "
- "will never be exited",
- createNoExitRuntimePass);
registerPass("once-reduction",
"reduces calls to code that only runs once",
createOnceReductionPass);
diff --git a/src/passes/passes.h b/src/passes/passes.h
index 0e72bb518..501edccc7 100644
--- a/src/passes/passes.h
+++ b/src/passes/passes.h
@@ -79,7 +79,6 @@ Pass* createMinifyImportsAndExportsAndModulesPass();
Pass* createMetricsPass();
Pass* createNameListPass();
Pass* createNameTypesPass();
-Pass* createNoExitRuntimePass();
Pass* createOnceReductionPass();
Pass* createOptimizeAddedConstantsPass();
Pass* createOptimizeAddedConstantsPropagatePass();