diff options
-rw-r--r-- | src/passes/Inlining.cpp | 50 | ||||
-rw-r--r-- | test/dynamicLibrary.fromasm | 1 | ||||
-rw-r--r-- | test/dynamicLibrary.fromasm.clamp | 1 | ||||
-rw-r--r-- | test/dynamicLibrary.fromasm.imprecise | 1 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm | 115 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm.clamp | 115 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm.imprecise | 121 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm | 123 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm.clamp | 127 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm.imprecise | 127 | ||||
-rw-r--r-- | test/memorygrowth.fromasm | 91 | ||||
-rw-r--r-- | test/memorygrowth.fromasm.clamp | 91 | ||||
-rw-r--r-- | test/memorygrowth.fromasm.imprecise | 105 | ||||
-rw-r--r-- | test/passes/inlining-optimizing.txt | 16 | ||||
-rw-r--r-- | test/passes/inlining-optimizing.wast | 16 | ||||
-rw-r--r-- | test/passes/inlining-optimizing_optimize-level=3.txt | 12 | ||||
-rw-r--r-- | test/passes/inlining.txt | 19 | ||||
-rw-r--r-- | test/passes/inlining_optimize-level=3.txt | 10 | ||||
-rw-r--r-- | test/wasm-only.fromasm | 43 | ||||
-rw-r--r-- | test/wasm-only.fromasm.clamp | 43 | ||||
-rw-r--r-- | test/wasm-only.fromasm.imprecise | 64 |
21 files changed, 420 insertions, 871 deletions
diff --git a/src/passes/Inlining.cpp b/src/passes/Inlining.cpp index 79785811c..3a244948a 100644 --- a/src/passes/Inlining.cpp +++ b/src/passes/Inlining.cpp @@ -46,6 +46,10 @@ static const int CAREFUL_SIZE_LIMIT = 15; // functions (i32s-div, f64-to-int, etc.), that can affect perf. static const int FLEXIBLE_SIZE_LIMIT = 20; +// A size so small that after optimizations, the inlined code will be +// smaller than the call instruction itself. +static const int INLINING_OPTIMIZING_WILL_DECREASE_SIZE_LIMIT = 1; + // Useful into on a function, helping us decide if we can inline it struct FunctionInfo { std::atomic<Index> calls; @@ -60,9 +64,14 @@ struct FunctionInfo { usedGlobally = false; } - bool worthInlining(PassOptions& options, bool allowMultipleInliningsPerFunction) { + bool worthInlining(PassOptions& options, + bool allowMultipleInliningsPerFunction, + bool optimizing) { // if it's big, it's just not worth doing (TODO: investigate more) if (size > FLEXIBLE_SIZE_LIMIT) return false; + // if it's so small we have a guarantee that after we optimize the + // size will not increase, inline it + if (optimizing && size <= INLINING_OPTIMIZING_WILL_DECREASE_SIZE_LIMIT) return true; // if it has one use, then inlining it would likely reduce code size // since we are just moving code around, + optimizing, so worth it // if small enough that we are pretty sure its ok @@ -130,9 +139,11 @@ struct Planner : public WalkerPass<PostWalker<Planner>> { void visitCall(Call* curr) { // plan to inline if we know this is valid to inline, and if the call is - // actually performed - if it is dead code, it's pointless to inline + // actually performed - if it is dead code, it's pointless to inline. + // we also cannot inline ourselves. if (state->worthInlining.count(curr->target) && - curr->type != unreachable) { + curr->type != unreachable && + curr->target != getFunction()->name) { // nest the call in a block. that way the location of the pointer to the call will not // change even if we inline multiple times into the same function, otherwise // call1(call2()) might be a problem @@ -144,11 +155,7 @@ struct Planner : public WalkerPass<PostWalker<Planner>> { } void doWalkFunction(Function* func) { - // we shouldn't inline into us if we are to be inlined - // ourselves - that has the risk of cycles - if (state->worthInlining.count(func->name) == 0) { - walk(func->body); - } + walk(func->body); } private: @@ -261,7 +268,9 @@ struct Inlining : public Pass { InliningState state; for (auto& func : module->functions) { // on the first iteration, allow multiple inlinings per function - if (infos[func->name].worthInlining(runner->options, firstIteration /* allowMultipleInliningsPerFunction */)) { + if (infos[func->name].worthInlining(runner->options, + firstIteration /* allowMultipleInliningsPerFunction */, + optimize)) { state.worthInlining.insert(func->name); } } @@ -281,8 +290,22 @@ struct Inlining : public Pass { std::unordered_map<Name, Index> inlinedUses; // how many uses we inlined std::unordered_set<Function*> inlinedInto; // which functions were inlined into for (auto& func : module->functions) { + // if we've inlined a function, don't inline into it in this iteration, + // avoid risk of loops + // note that we do not risk stalling progress, as each iteration() will + // inline at least one call before hitting this + if (inlinedUses.count(func->name)) continue; for (auto& action : state.actionsForFunction[func->name]) { - Name inlinedName = action.contents->name; + auto* inlinedFunction = action.contents; + // if we've inlined into a function, don't inline it in this iteration, + // avoid risk of loops + // note that we do not risk stalling progress, as each iteration() will + // inline at least one call before hitting this + if (inlinedInto.count(inlinedFunction)) continue; + Name inlinedName = inlinedFunction->name; +#ifdef INLINING_DEBUG + std::cout << "inline " << inlinedName << " into " << func->name << '\n'; +#endif doInlining(module, func.get(), action); inlinedUses[inlinedName]++; inlinedInto.insert(func.get()); @@ -301,7 +324,11 @@ struct Inlining : public Pass { funcs.erase(std::remove_if(funcs.begin(), funcs.end(), [&](const std::unique_ptr<Function>& curr) { auto name = curr->name; auto& info = infos[name]; - return inlinedUses.count(name) && inlinedUses[name] == info.calls && !info.usedGlobally; + bool canRemove = inlinedUses.count(name) && inlinedUses[name] == info.calls && !info.usedGlobally; +#ifdef INLINING_DEBUG + std::cout << "removing " << name << '\n'; +#endif + return canRemove; }), funcs.end()); // return whether we did any work return inlinedUses.size() > 0; @@ -329,6 +356,7 @@ struct Inlining : public Pass { runner.add("reorder-locals"); runner.add("remove-unused-brs"); runner.add("merge-blocks"); + runner.add("vacuum"); runner.run(); // restore all the funcs for (auto& func : module->functions) { diff --git a/test/dynamicLibrary.fromasm b/test/dynamicLibrary.fromasm index 2d849c931..295451b4c 100644 --- a/test/dynamicLibrary.fromasm +++ b/test/dynamicLibrary.fromasm @@ -58,7 +58,6 @@ (i32.const 5242880) ) ) - (call $runPostSets) (call $__ZN3FooC2Ev (i32.add (get_global $memoryBase) diff --git a/test/dynamicLibrary.fromasm.clamp b/test/dynamicLibrary.fromasm.clamp index 2d849c931..295451b4c 100644 --- a/test/dynamicLibrary.fromasm.clamp +++ b/test/dynamicLibrary.fromasm.clamp @@ -58,7 +58,6 @@ (i32.const 5242880) ) ) - (call $runPostSets) (call $__ZN3FooC2Ev (i32.add (get_global $memoryBase) diff --git a/test/dynamicLibrary.fromasm.imprecise b/test/dynamicLibrary.fromasm.imprecise index 09619276a..58d9559ad 100644 --- a/test/dynamicLibrary.fromasm.imprecise +++ b/test/dynamicLibrary.fromasm.imprecise @@ -56,7 +56,6 @@ (i32.const 5242880) ) ) - (call $runPostSets) (call $__ZN3FooC2Ev (i32.add (get_global $memoryBase) diff --git a/test/emcc_O2_hello_world.fromasm b/test/emcc_O2_hello_world.fromasm index 082240fc4..b046c9fe9 100644 --- a/test/emcc_O2_hello_world.fromasm +++ b/test/emcc_O2_hello_world.fromasm @@ -8288,7 +8288,7 @@ (i32.const -1) ) (block - (set_local $2 + (set_local $1 (call $___fflush_unlocked (get_local $0) ) @@ -8297,23 +8297,13 @@ ) ) (set_local $1 - (i32.eqz - (call $___lockfile - (get_local $0) - ) - ) - ) - (set_local $2 (call $___fflush_unlocked (get_local $0) ) ) - (if + (set_local $2 (i32.eqz - (get_local $1) - ) - (call $___unlockfile - (get_local $0) + (i32.const 0) ) ) ) @@ -8335,16 +8325,16 @@ (i32.const 36) ) (if - (tee_local $2 + (tee_local $1 (i32.load (i32.const 32) ) ) (block - (set_local $1 - (get_local $2) - ) (set_local $2 + (get_local $1) + ) + (set_local $1 (get_local $0) ) (loop $while-in @@ -8352,50 +8342,42 @@ (if (result i32) (i32.gt_s (i32.load offset=76 - (get_local $1) + (get_local $2) ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) (if (i32.gt_u (i32.load offset=20 - (get_local $1) + (get_local $2) ) (i32.load offset=28 - (get_local $1) + (get_local $2) ) ) - (set_local $2 + (set_local $1 (i32.or (call $___fflush_unlocked - (get_local $1) + (get_local $2) ) - (get_local $2) + (get_local $1) ) ) ) - (if - (get_local $0) - (call $___unlockfile - (get_local $1) - ) - ) (br_if $while-in - (tee_local $1 + (tee_local $2 (i32.load offset=56 - (get_local $1) + (get_local $2) ) ) ) ) ) - (set_local $2 + (set_local $1 (get_local $0) ) ) @@ -8405,7 +8387,7 @@ ) ) ) - (get_local $2) + (get_local $1) ) (func $_strlen (; 20 ;) (param $0 i32) (result i32) (local $1 i32) @@ -9133,9 +9115,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -9211,12 +9191,6 @@ ) ) ) - (if - (get_local $3) - (call $___unlockfile - (get_local $1) - ) - ) (i32.shr_s (i32.shl (get_local $0) @@ -9374,7 +9348,6 @@ ) (func $_fwrite (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) - (local $5 i32) (set_local $4 (i32.mul (get_local $2) @@ -9388,28 +9361,11 @@ ) (i32.const -1) ) - (block - (set_local $5 - (i32.eqz - (call $___lockfile - (get_local $3) - ) - ) - ) - (set_local $0 - (call $___fwritex - (get_local $0) - (get_local $4) - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (call $___unlockfile - (get_local $3) - ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) ) ) (set_local $0 @@ -9631,13 +9587,8 @@ ) ) (func $_cleanup_418 (; 38 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $___unlockfile + (drop + (i32.load offset=68 (get_local $0) ) ) @@ -9684,16 +9635,10 @@ ) (i32.const 0) ) - (func $___unlockfile (; 45 ;) (param $0 i32) - (nop) - ) - (func $___lockfile (; 46 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $getTempRet0 (; 47 ;) (result i32) + (func $getTempRet0 (; 45 ;) (result i32) (get_global $tempRet0) ) - (func $_main (; 48 ;) (result i32) + (func $_main (; 46 ;) (result i32) (drop (call $_puts (i32.const 672) @@ -9701,10 +9646,10 @@ ) (i32.const 0) ) - (func $stackSave (; 49 ;) (result i32) + (func $stackSave (; 47 ;) (result i32) (get_global $STACKTOP) ) - (func $b2 (; 50 ;) (param $0 i32) + (func $b2 (; 48 ;) (param $0 i32) (call $abort (i32.const 2) ) diff --git a/test/emcc_O2_hello_world.fromasm.clamp b/test/emcc_O2_hello_world.fromasm.clamp index 082240fc4..b046c9fe9 100644 --- a/test/emcc_O2_hello_world.fromasm.clamp +++ b/test/emcc_O2_hello_world.fromasm.clamp @@ -8288,7 +8288,7 @@ (i32.const -1) ) (block - (set_local $2 + (set_local $1 (call $___fflush_unlocked (get_local $0) ) @@ -8297,23 +8297,13 @@ ) ) (set_local $1 - (i32.eqz - (call $___lockfile - (get_local $0) - ) - ) - ) - (set_local $2 (call $___fflush_unlocked (get_local $0) ) ) - (if + (set_local $2 (i32.eqz - (get_local $1) - ) - (call $___unlockfile - (get_local $0) + (i32.const 0) ) ) ) @@ -8335,16 +8325,16 @@ (i32.const 36) ) (if - (tee_local $2 + (tee_local $1 (i32.load (i32.const 32) ) ) (block - (set_local $1 - (get_local $2) - ) (set_local $2 + (get_local $1) + ) + (set_local $1 (get_local $0) ) (loop $while-in @@ -8352,50 +8342,42 @@ (if (result i32) (i32.gt_s (i32.load offset=76 - (get_local $1) + (get_local $2) ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) (if (i32.gt_u (i32.load offset=20 - (get_local $1) + (get_local $2) ) (i32.load offset=28 - (get_local $1) + (get_local $2) ) ) - (set_local $2 + (set_local $1 (i32.or (call $___fflush_unlocked - (get_local $1) + (get_local $2) ) - (get_local $2) + (get_local $1) ) ) ) - (if - (get_local $0) - (call $___unlockfile - (get_local $1) - ) - ) (br_if $while-in - (tee_local $1 + (tee_local $2 (i32.load offset=56 - (get_local $1) + (get_local $2) ) ) ) ) ) - (set_local $2 + (set_local $1 (get_local $0) ) ) @@ -8405,7 +8387,7 @@ ) ) ) - (get_local $2) + (get_local $1) ) (func $_strlen (; 20 ;) (param $0 i32) (result i32) (local $1 i32) @@ -9133,9 +9115,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -9211,12 +9191,6 @@ ) ) ) - (if - (get_local $3) - (call $___unlockfile - (get_local $1) - ) - ) (i32.shr_s (i32.shl (get_local $0) @@ -9374,7 +9348,6 @@ ) (func $_fwrite (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) - (local $5 i32) (set_local $4 (i32.mul (get_local $2) @@ -9388,28 +9361,11 @@ ) (i32.const -1) ) - (block - (set_local $5 - (i32.eqz - (call $___lockfile - (get_local $3) - ) - ) - ) - (set_local $0 - (call $___fwritex - (get_local $0) - (get_local $4) - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (call $___unlockfile - (get_local $3) - ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) ) ) (set_local $0 @@ -9631,13 +9587,8 @@ ) ) (func $_cleanup_418 (; 38 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $___unlockfile + (drop + (i32.load offset=68 (get_local $0) ) ) @@ -9684,16 +9635,10 @@ ) (i32.const 0) ) - (func $___unlockfile (; 45 ;) (param $0 i32) - (nop) - ) - (func $___lockfile (; 46 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $getTempRet0 (; 47 ;) (result i32) + (func $getTempRet0 (; 45 ;) (result i32) (get_global $tempRet0) ) - (func $_main (; 48 ;) (result i32) + (func $_main (; 46 ;) (result i32) (drop (call $_puts (i32.const 672) @@ -9701,10 +9646,10 @@ ) (i32.const 0) ) - (func $stackSave (; 49 ;) (result i32) + (func $stackSave (; 47 ;) (result i32) (get_global $STACKTOP) ) - (func $b2 (; 50 ;) (param $0 i32) + (func $b2 (; 48 ;) (param $0 i32) (call $abort (i32.const 2) ) diff --git a/test/emcc_O2_hello_world.fromasm.imprecise b/test/emcc_O2_hello_world.fromasm.imprecise index 0bad341fb..ff0fa1fe3 100644 --- a/test/emcc_O2_hello_world.fromasm.imprecise +++ b/test/emcc_O2_hello_world.fromasm.imprecise @@ -8287,7 +8287,7 @@ (i32.const -1) ) (block - (set_local $2 + (set_local $1 (call $___fflush_unlocked (get_local $0) ) @@ -8296,23 +8296,13 @@ ) ) (set_local $1 - (i32.eqz - (call $___lockfile - (get_local $0) - ) - ) - ) - (set_local $2 (call $___fflush_unlocked (get_local $0) ) ) - (if + (set_local $2 (i32.eqz - (get_local $1) - ) - (call $___unlockfile - (get_local $0) + (i32.const 0) ) ) ) @@ -8334,67 +8324,59 @@ (i32.const 36) ) (if - (tee_local $2 + (tee_local $1 (i32.load (i32.const 32) ) ) (block - (set_local $1 - (get_local $2) - ) (set_local $2 + (get_local $1) + ) + (set_local $1 (get_local $0) ) (loop $while-in (set_local $0 - (if (result i32) + (select + (i32.const 0) + (i32.const 0) (i32.gt_s (i32.load offset=76 - (get_local $1) + (get_local $2) ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) - (i32.const 0) ) ) (if (i32.gt_u (i32.load offset=20 - (get_local $1) + (get_local $2) ) (i32.load offset=28 - (get_local $1) + (get_local $2) ) ) - (set_local $2 + (set_local $1 (i32.or (call $___fflush_unlocked - (get_local $1) + (get_local $2) ) - (get_local $2) + (get_local $1) ) ) ) - (if - (get_local $0) - (call $___unlockfile - (get_local $1) - ) - ) (br_if $while-in - (tee_local $1 + (tee_local $2 (i32.load offset=56 - (get_local $1) + (get_local $2) ) ) ) ) ) - (set_local $2 + (set_local $1 (get_local $0) ) ) @@ -8404,7 +8386,7 @@ ) ) ) - (get_local $2) + (get_local $1) ) (func $_strlen (; 20 ;) (param $0 i32) (result i32) (local $1 i32) @@ -9132,9 +9114,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -9210,12 +9190,6 @@ ) ) ) - (if - (get_local $3) - (call $___unlockfile - (get_local $1) - ) - ) (i32.shr_s (i32.shl (get_local $0) @@ -9373,7 +9347,6 @@ ) (func $_fwrite (; 29 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) - (local $5 i32) (set_local $4 (i32.mul (get_local $2) @@ -9387,28 +9360,11 @@ ) (i32.const -1) ) - (block - (set_local $5 - (i32.eqz - (call $___lockfile - (get_local $3) - ) - ) - ) - (set_local $0 - (call $___fwritex - (get_local $0) - (get_local $4) - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (call $___unlockfile - (get_local $3) - ) + (set_local $0 + (call $___fwritex + (get_local $0) + (get_local $4) + (get_local $3) ) ) (set_local $0 @@ -9626,16 +9582,7 @@ ) ) (func $_cleanup_418 (; 38 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $___unlockfile - (get_local $0) - ) - ) + (nop) ) (func $establishStackSpace (; 39 ;) (param $0 i32) (param $1 i32) (set_global $STACKTOP @@ -9679,16 +9626,10 @@ ) (i32.const 0) ) - (func $___unlockfile (; 45 ;) (param $0 i32) - (nop) - ) - (func $___lockfile (; 46 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $getTempRet0 (; 47 ;) (result i32) + (func $getTempRet0 (; 45 ;) (result i32) (get_global $tempRet0) ) - (func $_main (; 48 ;) (result i32) + (func $_main (; 46 ;) (result i32) (drop (call $_puts (i32.const 672) @@ -9696,10 +9637,10 @@ ) (i32.const 0) ) - (func $stackSave (; 49 ;) (result i32) + (func $stackSave (; 47 ;) (result i32) (get_global $STACKTOP) ) - (func $b2 (; 50 ;) (param $0 i32) + (func $b2 (; 48 ;) (param $0 i32) (call $abort (i32.const 2) ) diff --git a/test/emcc_hello_world.fromasm b/test/emcc_hello_world.fromasm index 849b42aac..fa4ef94fd 100644 --- a/test/emcc_hello_world.fromasm +++ b/test/emcc_hello_world.fromasm @@ -566,13 +566,6 @@ (br $do-once) ) ) - (set_local $2 - (i32.eqz - (call $___lockfile - (get_local $0) - ) - ) - ) (set_local $1 (call $___fflush_unlocked (get_local $0) @@ -580,14 +573,13 @@ ) (set_local $0 (if (result i32) - (get_local $2) - (get_local $1) - (block (result i32) - (call $___unlockfile - (get_local $0) + (tee_local $2 + (i32.eqz + (i32.const 0) ) - (get_local $1) ) + (get_local $1) + (get_local $1) ) ) ) @@ -623,9 +615,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -647,12 +637,6 @@ ) ) ) - (if - (get_local $2) - (call $___unlockfile - (get_local $1) - ) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -709,13 +693,7 @@ ) (get_local $0) ) - (func $___lockfile (; 35 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $___unlockfile (; 36 ;) (param $0 i32) - (nop) - ) - (func $___stdio_write (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $___stdio_write (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1061,7 +1039,7 @@ ) (get_local $2) ) - (func $_vfprintf (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_vfprintf (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1163,9 +1141,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $0) - ) + (i32.const 0) (i32.const 0) ) ) @@ -1331,12 +1307,6 @@ ) ) ) - (if - (get_local $14) - (call $___unlockfile - (get_local $0) - ) - ) (select (i32.const -1) (get_local $1) @@ -1353,7 +1323,7 @@ ) (get_local $0) ) - (func $___fwritex (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $___fwritex (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1539,7 +1509,7 @@ ) (get_local $3) ) - (func $___towrite (; 40 ;) (param $0 i32) (result i32) + (func $___towrite (; 38 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (set_local $1 @@ -1617,7 +1587,7 @@ ) ) ) - (func $_wcrtomb (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_wcrtomb (; 39 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $do-once (result i32) (if (result i32) (get_local $0) @@ -1791,7 +1761,7 @@ ) ) ) - (func $_wctomb (; 42 ;) (param $0 i32) (param $1 i32) (result i32) + (func $_wctomb (; 40 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $0) (call $_wcrtomb @@ -1802,7 +1772,7 @@ (i32.const 0) ) ) - (func $_memchr (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memchr (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2033,7 +2003,7 @@ (get_local $0) ) ) - (func $___syscall_ret (; 44 ;) (param $0 i32) (result i32) + (func $___syscall_ret (; 42 ;) (param $0 i32) (result i32) (if (result i32) (i32.gt_u (get_local $0) @@ -2052,7 +2022,7 @@ (get_local $0) ) ) - (func $___fflush_unlocked (; 45 ;) (param $0 i32) (result i32) + (func $___fflush_unlocked (; 43 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2174,19 +2144,14 @@ ) ) ) - (func $_cleanup (; 46 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $___unlockfile + (func $_cleanup (; 44 ;) (param $0 i32) + (drop + (i32.load offset=68 (get_local $0) ) ) ) - (func $i32s-div (; 47 ;) (param $0 i32) (param $1 i32) (result i32) + (func $i32s-div (; 45 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $1) (if (result i32) @@ -2209,7 +2174,7 @@ (i32.const 0) ) ) - (func $i32u-rem (; 48 ;) (param $0 i32) (param $1 i32) (result i32) + (func $i32u-rem (; 46 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $1) (i32.rem_u @@ -2219,7 +2184,7 @@ (i32.const 0) ) ) - (func $i32u-div (; 49 ;) (param $0 i32) (param $1 i32) (result i32) + (func $i32u-div (; 47 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $1) (i32.div_u @@ -2229,7 +2194,7 @@ (i32.const 0) ) ) - (func $_printf_core (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (func $_printf_core (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -7113,7 +7078,7 @@ ) (get_local $16) ) - (func $_pop_arg_336 (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $_pop_arg_336 (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) @@ -7513,7 +7478,7 @@ ) ) ) - (func $_fmt_u (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_fmt_u (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (if @@ -7635,7 +7600,7 @@ ) (get_local $2) ) - (func $_pad (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (func $_pad (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -7783,7 +7748,7 @@ (get_local $7) ) ) - (func $_malloc (; 54 ;) (param $0 i32) (result i32) + (func $_malloc (; 52 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -13232,7 +13197,7 @@ (i32.const 8) ) ) - (func $_free (; 55 ;) (param $0 i32) + (func $_free (; 53 ;) (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -15009,10 +14974,10 @@ (i32.const -1) ) ) - (func $runPostSets (; 56 ;) + (func $runPostSets (; 54 ;) (nop) ) - (func $_i64Subtract (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $_i64Subtract (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (set_global $tempRet0 (i32.sub (i32.sub @@ -15030,7 +14995,7 @@ (get_local $2) ) ) - (func $_i64Add (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $_i64Add (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (set_global $tempRet0 (i32.add @@ -15051,7 +15016,7 @@ ) (get_local $4) ) - (func $_memset (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memset (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -15189,7 +15154,7 @@ (get_local $2) ) ) - (func $_bitshift64Lshr (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_bitshift64Lshr (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (get_local $2) @@ -15239,7 +15204,7 @@ ) ) ) - (func $_bitshift64Shl (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_bitshift64Shl (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (get_local $2) @@ -15295,7 +15260,7 @@ ) (i32.const 0) ) - (func $_memcpy (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memcpy (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.ge_s @@ -15442,7 +15407,7 @@ ) (get_local $3) ) - (func $___udivdi3 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $___udivdi3 (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call $___udivmoddi4 (get_local $0) (get_local $1) @@ -15451,7 +15416,7 @@ (i32.const 0) ) ) - (func $___uremdi3 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $___uremdi3 (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (set_local $4 (get_global $STACKTOP) @@ -15485,7 +15450,7 @@ (get_local $0) ) ) - (func $___udivmoddi4 (; 65 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (func $___udivmoddi4 (; 63 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) (local $x64 i64) (local $y64 i64) (set_local $x64 @@ -15542,7 +15507,7 @@ (get_local $x64) ) ) - (func $dynCall_ii (; 66 ;) (param $0 i32) (param $1 i32) (result i32) + (func $dynCall_ii (; 64 ;) (param $0 i32) (param $1 i32) (result i32) (call_indirect (type $FUNCSIG$ii) (get_local $1) (i32.and @@ -15551,7 +15516,7 @@ ) ) ) - (func $dynCall_iiii (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $dynCall_iiii (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call_indirect (type $FUNCSIG$iiii) (get_local $1) (get_local $2) @@ -15565,7 +15530,7 @@ ) ) ) - (func $dynCall_vi (; 68 ;) (param $0 i32) (param $1 i32) + (func $dynCall_vi (; 66 ;) (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) (get_local $1) (i32.add @@ -15577,19 +15542,19 @@ ) ) ) - (func $b0 (; 69 ;) (param $0 i32) (result i32) + (func $b0 (; 67 ;) (param $0 i32) (result i32) (call $nullFunc_ii (i32.const 0) ) (i32.const 0) ) - (func $b1 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $b1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call $nullFunc_iiii (i32.const 1) ) (i32.const 0) ) - (func $b2 (; 71 ;) (param $0 i32) + (func $b2 (; 69 ;) (param $0 i32) (call $nullFunc_vi (i32.const 2) ) diff --git a/test/emcc_hello_world.fromasm.clamp b/test/emcc_hello_world.fromasm.clamp index 1a55405ac..c1c7f1485 100644 --- a/test/emcc_hello_world.fromasm.clamp +++ b/test/emcc_hello_world.fromasm.clamp @@ -564,13 +564,6 @@ (br $do-once) ) ) - (set_local $2 - (i32.eqz - (call $___lockfile - (get_local $0) - ) - ) - ) (set_local $1 (call $___fflush_unlocked (get_local $0) @@ -578,14 +571,13 @@ ) (set_local $0 (if (result i32) - (get_local $2) - (get_local $1) - (block (result i32) - (call $___unlockfile - (get_local $0) + (tee_local $2 + (i32.eqz + (i32.const 0) ) - (get_local $1) ) + (get_local $1) + (get_local $1) ) ) ) @@ -621,9 +613,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -645,12 +635,6 @@ ) ) ) - (if - (get_local $2) - (call $___unlockfile - (get_local $1) - ) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -707,13 +691,7 @@ ) (get_local $0) ) - (func $___lockfile (; 34 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $___unlockfile (; 35 ;) (param $0 i32) - (nop) - ) - (func $___stdio_write (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $___stdio_write (; 34 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1059,7 +1037,7 @@ ) (get_local $2) ) - (func $_vfprintf (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_vfprintf (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1161,9 +1139,7 @@ ) (i32.const -1) ) - (call $___lockfile - (get_local $0) - ) + (i32.const 0) (i32.const 0) ) ) @@ -1329,12 +1305,6 @@ ) ) ) - (if - (get_local $14) - (call $___unlockfile - (get_local $0) - ) - ) (select (i32.const -1) (get_local $1) @@ -1351,7 +1321,7 @@ ) (get_local $0) ) - (func $___fwritex (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $___fwritex (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1537,7 +1507,7 @@ ) (get_local $3) ) - (func $___towrite (; 39 ;) (param $0 i32) (result i32) + (func $___towrite (; 37 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (set_local $1 @@ -1615,7 +1585,7 @@ ) ) ) - (func $_wcrtomb (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_wcrtomb (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $do-once (result i32) (if (result i32) (get_local $0) @@ -1789,7 +1759,7 @@ ) ) ) - (func $_wctomb (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + (func $_wctomb (; 39 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $0) (call $_wcrtomb @@ -1800,7 +1770,7 @@ (i32.const 0) ) ) - (func $_memchr (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memchr (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2031,7 +2001,7 @@ (get_local $0) ) ) - (func $___syscall_ret (; 43 ;) (param $0 i32) (result i32) + (func $___syscall_ret (; 41 ;) (param $0 i32) (result i32) (if (result i32) (i32.gt_u (get_local $0) @@ -2050,7 +2020,7 @@ (get_local $0) ) ) - (func $___fflush_unlocked (; 44 ;) (param $0 i32) (result i32) + (func $___fflush_unlocked (; 42 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2172,19 +2142,14 @@ ) ) ) - (func $_cleanup (; 45 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $___unlockfile + (func $_cleanup (; 43 ;) (param $0 i32) + (drop + (i32.load offset=68 (get_local $0) ) ) ) - (func $f64-to-int (; 46 ;) (param $0 f64) (result i32) + (func $f64-to-int (; 44 ;) (param $0 f64) (result i32) (if (result i32) (f64.ne (get_local $0) @@ -2210,7 +2175,7 @@ ) ) ) - (func $f64-to-uint (; 47 ;) (param $0 f64) (result i32) + (func $f64-to-uint (; 45 ;) (param $0 f64) (result i32) (if (result i32) (f64.ne (get_local $0) @@ -2236,7 +2201,7 @@ ) ) ) - (func $i32s-div (; 48 ;) (param $0 i32) (param $1 i32) (result i32) + (func $i32s-div (; 46 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $1) (if (result i32) @@ -2259,7 +2224,7 @@ (i32.const 0) ) ) - (func $i32u-rem (; 49 ;) (param $0 i32) (param $1 i32) (result i32) + (func $i32u-rem (; 47 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $1) (i32.rem_u @@ -2269,7 +2234,7 @@ (i32.const 0) ) ) - (func $i32u-div (; 50 ;) (param $0 i32) (param $1 i32) (result i32) + (func $i32u-div (; 48 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $1) (i32.div_u @@ -2279,7 +2244,7 @@ (i32.const 0) ) ) - (func $_printf_core (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (func $_printf_core (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -7163,7 +7128,7 @@ ) (get_local $16) ) - (func $_pop_arg_336 (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $_pop_arg_336 (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) @@ -7563,7 +7528,7 @@ ) ) ) - (func $_fmt_u (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_fmt_u (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (if @@ -7685,7 +7650,7 @@ ) (get_local $2) ) - (func $_pad (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (func $_pad (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -7833,7 +7798,7 @@ (get_local $7) ) ) - (func $_malloc (; 55 ;) (param $0 i32) (result i32) + (func $_malloc (; 53 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -13282,7 +13247,7 @@ (i32.const 8) ) ) - (func $_free (; 56 ;) (param $0 i32) + (func $_free (; 54 ;) (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -15059,10 +15024,10 @@ (i32.const -1) ) ) - (func $runPostSets (; 57 ;) + (func $runPostSets (; 55 ;) (nop) ) - (func $_i64Subtract (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $_i64Subtract (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (set_global $tempRet0 (i32.sub (i32.sub @@ -15080,7 +15045,7 @@ (get_local $2) ) ) - (func $_i64Add (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $_i64Add (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (set_global $tempRet0 (i32.add @@ -15101,7 +15066,7 @@ ) (get_local $4) ) - (func $_memset (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memset (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -15239,7 +15204,7 @@ (get_local $2) ) ) - (func $_bitshift64Lshr (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_bitshift64Lshr (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (get_local $2) @@ -15289,7 +15254,7 @@ ) ) ) - (func $_bitshift64Shl (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_bitshift64Shl (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (get_local $2) @@ -15345,7 +15310,7 @@ ) (i32.const 0) ) - (func $_memcpy (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memcpy (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.ge_s @@ -15492,7 +15457,7 @@ ) (get_local $3) ) - (func $___udivdi3 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $___udivdi3 (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call $___udivmoddi4 (get_local $0) (get_local $1) @@ -15501,7 +15466,7 @@ (i32.const 0) ) ) - (func $___uremdi3 (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $___uremdi3 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (set_local $4 (get_global $STACKTOP) @@ -15535,7 +15500,7 @@ (get_local $0) ) ) - (func $___udivmoddi4 (; 66 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (func $___udivmoddi4 (; 64 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) (local $x64 i64) (local $y64 i64) (set_local $x64 @@ -15592,7 +15557,7 @@ (get_local $x64) ) ) - (func $dynCall_ii (; 67 ;) (param $0 i32) (param $1 i32) (result i32) + (func $dynCall_ii (; 65 ;) (param $0 i32) (param $1 i32) (result i32) (call_indirect (type $FUNCSIG$ii) (get_local $1) (i32.and @@ -15601,7 +15566,7 @@ ) ) ) - (func $dynCall_iiii (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $dynCall_iiii (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call_indirect (type $FUNCSIG$iiii) (get_local $1) (get_local $2) @@ -15615,7 +15580,7 @@ ) ) ) - (func $dynCall_vi (; 69 ;) (param $0 i32) (param $1 i32) + (func $dynCall_vi (; 67 ;) (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) (get_local $1) (i32.add @@ -15627,19 +15592,19 @@ ) ) ) - (func $b0 (; 70 ;) (param $0 i32) (result i32) + (func $b0 (; 68 ;) (param $0 i32) (result i32) (call $nullFunc_ii (i32.const 0) ) (i32.const 0) ) - (func $b1 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $b1 (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call $nullFunc_iiii (i32.const 1) ) (i32.const 0) ) - (func $b2 (; 72 ;) (param $0 i32) + (func $b2 (; 70 ;) (param $0 i32) (call $nullFunc_vi (i32.const 2) ) diff --git a/test/emcc_hello_world.fromasm.imprecise b/test/emcc_hello_world.fromasm.imprecise index 34f3e1c95..b19993aa8 100644 --- a/test/emcc_hello_world.fromasm.imprecise +++ b/test/emcc_hello_world.fromasm.imprecise @@ -563,13 +563,6 @@ (br $do-once) ) ) - (set_local $2 - (i32.eqz - (call $___lockfile - (get_local $0) - ) - ) - ) (set_local $1 (call $___fflush_unlocked (get_local $0) @@ -577,14 +570,13 @@ ) (set_local $0 (if (result i32) - (get_local $2) - (get_local $1) - (block (result i32) - (call $___unlockfile - (get_local $0) + (tee_local $2 + (i32.eqz + (i32.const 0) ) - (get_local $1) ) + (get_local $1) + (get_local $1) ) ) ) @@ -613,17 +605,15 @@ ) (loop $while-in (set_local $2 - (if (result i32) + (select + (i32.const 0) + (i32.const 0) (i32.gt_s (i32.load offset=76 (get_local $1) ) (i32.const -1) ) - (call $___lockfile - (get_local $1) - ) - (i32.const 0) ) ) (if @@ -644,12 +634,6 @@ ) ) ) - (if - (get_local $2) - (call $___unlockfile - (get_local $1) - ) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -706,13 +690,7 @@ ) (get_local $0) ) - (func $___lockfile (; 34 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $___unlockfile (; 35 ;) (param $0 i32) - (nop) - ) - (func $___stdio_write (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $___stdio_write (; 34 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1058,7 +1036,7 @@ ) (get_local $2) ) - (func $_vfprintf (; 37 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_vfprintf (; 35 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1153,17 +1131,15 @@ (i32.const -1) (block (result i32) (set_local $14 - (if (result i32) + (select + (i32.const 0) + (i32.const 0) (i32.gt_s (i32.load offset=76 (get_local $0) ) (i32.const -1) ) - (call $___lockfile - (get_local $0) - ) - (i32.const 0) ) ) (set_local $10 @@ -1328,12 +1304,6 @@ ) ) ) - (if - (get_local $14) - (call $___unlockfile - (get_local $0) - ) - ) (select (i32.const -1) (get_local $1) @@ -1350,7 +1320,7 @@ ) (get_local $0) ) - (func $___fwritex (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $___fwritex (; 36 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1536,7 +1506,7 @@ ) (get_local $3) ) - (func $___towrite (; 39 ;) (param $0 i32) (result i32) + (func $___towrite (; 37 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (set_local $1 @@ -1614,7 +1584,7 @@ ) ) ) - (func $_wcrtomb (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_wcrtomb (; 38 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (block $do-once (result i32) (if (result i32) (get_local $0) @@ -1788,7 +1758,7 @@ ) ) ) - (func $_wctomb (; 41 ;) (param $0 i32) (param $1 i32) (result i32) + (func $_wctomb (; 39 ;) (param $0 i32) (param $1 i32) (result i32) (if (result i32) (get_local $0) (call $_wcrtomb @@ -1799,7 +1769,7 @@ (i32.const 0) ) ) - (func $_memchr (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memchr (; 40 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2030,7 +2000,7 @@ (get_local $0) ) ) - (func $___syscall_ret (; 43 ;) (param $0 i32) (result i32) + (func $___syscall_ret (; 41 ;) (param $0 i32) (result i32) (if (result i32) (i32.gt_u (get_local $0) @@ -2049,7 +2019,7 @@ (get_local $0) ) ) - (func $___fflush_unlocked (; 44 ;) (param $0 i32) (result i32) + (func $___fflush_unlocked (; 42 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2171,19 +2141,10 @@ ) ) ) - (func $_cleanup (; 45 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $___unlockfile - (get_local $0) - ) - ) + (func $_cleanup (; 43 ;) (param $0 i32) + (nop) ) - (func $_printf_core (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (func $_printf_core (; 44 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -7052,7 +7013,7 @@ ) (get_local $16) ) - (func $_pop_arg_336 (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $_pop_arg_336 (; 45 ;) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 f64) (local $5 i32) @@ -7452,7 +7413,7 @@ ) ) ) - (func $_fmt_u (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_fmt_u (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (if @@ -7574,7 +7535,7 @@ ) (get_local $2) ) - (func $_pad (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (func $_pad (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -7722,7 +7683,7 @@ (get_local $7) ) ) - (func $_malloc (; 50 ;) (param $0 i32) (result i32) + (func $_malloc (; 48 ;) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -13171,7 +13132,7 @@ (i32.const 8) ) ) - (func $_free (; 51 ;) (param $0 i32) + (func $_free (; 49 ;) (param $0 i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -14947,10 +14908,10 @@ (i32.const -1) ) ) - (func $runPostSets (; 52 ;) + (func $runPostSets (; 50 ;) (nop) ) - (func $_i64Subtract (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $_i64Subtract (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (set_global $tempRet0 (i32.sub (i32.sub @@ -14968,7 +14929,7 @@ (get_local $2) ) ) - (func $_i64Add (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $_i64Add (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (set_global $tempRet0 (i32.add @@ -14989,7 +14950,7 @@ ) (get_local $4) ) - (func $_memset (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memset (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -15127,7 +15088,7 @@ (get_local $2) ) ) - (func $_bitshift64Lshr (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_bitshift64Lshr (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (get_local $2) @@ -15177,7 +15138,7 @@ ) ) ) - (func $_bitshift64Shl (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_bitshift64Shl (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (if (i32.lt_s (get_local $2) @@ -15233,7 +15194,7 @@ ) (i32.const 0) ) - (func $_memcpy (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memcpy (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (if (i32.ge_s @@ -15380,7 +15341,7 @@ ) (get_local $3) ) - (func $___udivdi3 (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $___udivdi3 (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call $___udivmoddi4 (get_local $0) (get_local $1) @@ -15389,7 +15350,7 @@ (i32.const 0) ) ) - (func $___uremdi3 (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $___uremdi3 (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (set_local $4 (get_global $STACKTOP) @@ -15423,7 +15384,7 @@ (get_local $0) ) ) - (func $___udivmoddi4 (; 61 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) + (func $___udivmoddi4 (; 59 ;) (param $xl i32) (param $xh i32) (param $yl i32) (param $yh i32) (param $r i32) (result i32) (local $x64 i64) (local $y64 i64) (set_local $x64 @@ -15480,7 +15441,7 @@ (get_local $x64) ) ) - (func $dynCall_ii (; 62 ;) (param $0 i32) (param $1 i32) (result i32) + (func $dynCall_ii (; 60 ;) (param $0 i32) (param $1 i32) (result i32) (call_indirect (type $FUNCSIG$ii) (get_local $1) (i32.and @@ -15489,7 +15450,7 @@ ) ) ) - (func $dynCall_iiii (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (func $dynCall_iiii (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (call_indirect (type $FUNCSIG$iiii) (get_local $1) (get_local $2) @@ -15503,7 +15464,7 @@ ) ) ) - (func $dynCall_vi (; 64 ;) (param $0 i32) (param $1 i32) + (func $dynCall_vi (; 62 ;) (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) (get_local $1) (i32.add @@ -15515,19 +15476,19 @@ ) ) ) - (func $b0 (; 65 ;) (param $0 i32) (result i32) + (func $b0 (; 63 ;) (param $0 i32) (result i32) (call $nullFunc_ii (i32.const 0) ) (i32.const 0) ) - (func $b1 (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $b1 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (call $nullFunc_iiii (i32.const 1) ) (i32.const 0) ) - (func $b2 (; 67 ;) (param $0 i32) + (func $b2 (; 65 ;) (param $0 i32) (call $nullFunc_vi (i32.const 2) ) diff --git a/test/memorygrowth.fromasm b/test/memorygrowth.fromasm index 291cd515d..5b67a3408 100644 --- a/test/memorygrowth.fromasm +++ b/test/memorygrowth.fromasm @@ -8491,24 +8491,14 @@ (br $do-once) ) ) - (set_local $2 - (i32.eqz - (call $Ya - (get_local $0) - ) - ) - ) (set_local $1 (call $$a (get_local $0) ) ) - (if + (set_local $2 (i32.eqz - (get_local $2) - ) - (call $Ta - (get_local $0) + (i32.const 0) ) ) ) @@ -8551,9 +8541,7 @@ ) (i32.const -1) ) - (call $Ya - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -8575,12 +8563,6 @@ ) ) ) - (if - (get_local $0) - (call $Ta - (get_local $1) - ) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -9193,9 +9175,7 @@ ) (i32.const -1) ) - (call $Ya - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -9272,12 +9252,6 @@ ) ) ) - (if - (get_local $3) - (call $Ta - (get_local $1) - ) - ) (i32.shr_s (i32.shl (get_local $0) @@ -9366,7 +9340,6 @@ ) (func $bb (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) - (local $5 i32) (set_local $4 (i32.mul (get_local $2) @@ -9380,28 +9353,11 @@ ) (i32.const -1) ) - (block - (set_local $5 - (i32.eqz - (call $Ya - (get_local $3) - ) - ) - ) - (set_local $0 - (call $Wa - (get_local $0) - (get_local $4) - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (call $Ta - (get_local $3) - ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) ) ) (set_local $0 @@ -9627,7 +9583,7 @@ (i32.const 1160) ) (i32.load offset=64 - (call $ib) + (i32.const 0) ) (i32.const 1204) ) @@ -9699,13 +9655,8 @@ ) ) (func $Sa (; 37 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $Ta + (drop + (i32.load offset=68 (get_local $0) ) ) @@ -9744,34 +9695,28 @@ ) (i32.const 0) ) - (func $Ya (; 42 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $Ta (; 43 ;) (param $0 i32) - (nop) - ) - (func $pb (; 44 ;) (param $0 i32) + (func $pb (; 42 ;) (param $0 i32) (call $ja (i32.const 2) ) ) - (func $La (; 45 ;) (param $0 i32) + (func $La (; 43 ;) (param $0 i32) (set_global $K (get_local $0) ) ) - (func $Ga (; 46 ;) (param $0 i32) + (func $Ga (; 44 ;) (param $0 i32) (set_global $r (get_local $0) ) ) - (func $Ma (; 47 ;) (result i32) + (func $Ma (; 45 ;) (result i32) (get_global $K) ) - (func $Fa (; 48 ;) (result i32) + (func $Fa (; 46 ;) (result i32) (get_global $r) ) - (func $ib (; 49 ;) (result i32) + (func $ib (; 47 ;) (result i32) (i32.const 0) ) ) diff --git a/test/memorygrowth.fromasm.clamp b/test/memorygrowth.fromasm.clamp index 291cd515d..5b67a3408 100644 --- a/test/memorygrowth.fromasm.clamp +++ b/test/memorygrowth.fromasm.clamp @@ -8491,24 +8491,14 @@ (br $do-once) ) ) - (set_local $2 - (i32.eqz - (call $Ya - (get_local $0) - ) - ) - ) (set_local $1 (call $$a (get_local $0) ) ) - (if + (set_local $2 (i32.eqz - (get_local $2) - ) - (call $Ta - (get_local $0) + (i32.const 0) ) ) ) @@ -8551,9 +8541,7 @@ ) (i32.const -1) ) - (call $Ya - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -8575,12 +8563,6 @@ ) ) ) - (if - (get_local $0) - (call $Ta - (get_local $1) - ) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -9193,9 +9175,7 @@ ) (i32.const -1) ) - (call $Ya - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -9272,12 +9252,6 @@ ) ) ) - (if - (get_local $3) - (call $Ta - (get_local $1) - ) - ) (i32.shr_s (i32.shl (get_local $0) @@ -9366,7 +9340,6 @@ ) (func $bb (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) - (local $5 i32) (set_local $4 (i32.mul (get_local $2) @@ -9380,28 +9353,11 @@ ) (i32.const -1) ) - (block - (set_local $5 - (i32.eqz - (call $Ya - (get_local $3) - ) - ) - ) - (set_local $0 - (call $Wa - (get_local $0) - (get_local $4) - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (call $Ta - (get_local $3) - ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) ) ) (set_local $0 @@ -9627,7 +9583,7 @@ (i32.const 1160) ) (i32.load offset=64 - (call $ib) + (i32.const 0) ) (i32.const 1204) ) @@ -9699,13 +9655,8 @@ ) ) (func $Sa (; 37 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $Ta + (drop + (i32.load offset=68 (get_local $0) ) ) @@ -9744,34 +9695,28 @@ ) (i32.const 0) ) - (func $Ya (; 42 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $Ta (; 43 ;) (param $0 i32) - (nop) - ) - (func $pb (; 44 ;) (param $0 i32) + (func $pb (; 42 ;) (param $0 i32) (call $ja (i32.const 2) ) ) - (func $La (; 45 ;) (param $0 i32) + (func $La (; 43 ;) (param $0 i32) (set_global $K (get_local $0) ) ) - (func $Ga (; 46 ;) (param $0 i32) + (func $Ga (; 44 ;) (param $0 i32) (set_global $r (get_local $0) ) ) - (func $Ma (; 47 ;) (result i32) + (func $Ma (; 45 ;) (result i32) (get_global $K) ) - (func $Fa (; 48 ;) (result i32) + (func $Fa (; 46 ;) (result i32) (get_global $r) ) - (func $ib (; 49 ;) (result i32) + (func $ib (; 47 ;) (result i32) (i32.const 0) ) ) diff --git a/test/memorygrowth.fromasm.imprecise b/test/memorygrowth.fromasm.imprecise index bb9d95844..f36b78409 100644 --- a/test/memorygrowth.fromasm.imprecise +++ b/test/memorygrowth.fromasm.imprecise @@ -8489,24 +8489,14 @@ (br $do-once) ) ) - (set_local $2 - (i32.eqz - (call $Ya - (get_local $0) - ) - ) - ) (set_local $1 (call $$a (get_local $0) ) ) - (if + (set_local $2 (i32.eqz - (get_local $2) - ) - (call $Ta - (get_local $0) + (i32.const 0) ) ) ) @@ -8542,17 +8532,15 @@ ) (loop $while-in (set_local $0 - (if (result i32) + (select + (i32.const 0) + (i32.const 0) (i32.gt_s (i32.load offset=76 (get_local $1) ) (i32.const -1) ) - (call $Ya - (get_local $1) - ) - (i32.const 0) ) ) (if @@ -8573,12 +8561,6 @@ ) ) ) - (if - (get_local $0) - (call $Ta - (get_local $1) - ) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -9191,9 +9173,7 @@ ) (i32.const -1) ) - (call $Ya - (get_local $1) - ) + (i32.const 0) (i32.const 0) ) ) @@ -9270,12 +9250,6 @@ ) ) ) - (if - (get_local $3) - (call $Ta - (get_local $1) - ) - ) (i32.shr_s (i32.shl (get_local $0) @@ -9364,7 +9338,6 @@ ) (func $bb (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) - (local $5 i32) (set_local $4 (i32.mul (get_local $2) @@ -9378,28 +9351,11 @@ ) (i32.const -1) ) - (block - (set_local $5 - (i32.eqz - (call $Ya - (get_local $3) - ) - ) - ) - (set_local $0 - (call $Wa - (get_local $0) - (get_local $4) - (get_local $3) - ) - ) - (if - (i32.eqz - (get_local $5) - ) - (call $Ta - (get_local $3) - ) + (set_local $0 + (call $Wa + (get_local $0) + (get_local $4) + (get_local $3) ) ) (set_local $0 @@ -9616,14 +9572,14 @@ ) ) (func $Qa (; 31 ;) (result i32) - (if (result i32) - (i32.load - (i32.const 1160) - ) + (select (i32.load offset=64 - (call $ib) + (i32.const 0) ) (i32.const 1204) + (i32.load + (i32.const 1160) + ) ) ) (func $lb (; 32 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) @@ -9693,16 +9649,7 @@ ) ) (func $Sa (; 37 ;) (param $0 i32) - (if - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) - ) - (call $Ta - (get_local $0) - ) - ) + (nop) ) (func $mb (; 38 ;) (param $0 i32) (param $1 i32) (call_indirect (type $FUNCSIG$vi) @@ -9738,34 +9685,28 @@ ) (i32.const 0) ) - (func $Ya (; 42 ;) (param $0 i32) (result i32) - (i32.const 0) - ) - (func $Ta (; 43 ;) (param $0 i32) - (nop) - ) - (func $pb (; 44 ;) (param $0 i32) + (func $pb (; 42 ;) (param $0 i32) (call $ja (i32.const 2) ) ) - (func $La (; 45 ;) (param $0 i32) + (func $La (; 43 ;) (param $0 i32) (set_global $K (get_local $0) ) ) - (func $Ga (; 46 ;) (param $0 i32) + (func $Ga (; 44 ;) (param $0 i32) (set_global $r (get_local $0) ) ) - (func $Ma (; 47 ;) (result i32) + (func $Ma (; 45 ;) (result i32) (get_global $K) ) - (func $Fa (; 48 ;) (result i32) + (func $Fa (; 46 ;) (result i32) (get_global $r) ) - (func $ib (; 49 ;) (result i32) + (func $ib (; 47 ;) (result i32) (i32.const 0) ) ) diff --git a/test/passes/inlining-optimizing.txt b/test/passes/inlining-optimizing.txt index d4de780d5..eab52a9de 100644 --- a/test/passes/inlining-optimizing.txt +++ b/test/passes/inlining-optimizing.txt @@ -7,6 +7,7 @@ (elem (i32.const 0) $tabled) (export "user" (func $user)) (export "exported" (func $exported)) + (export "exported_small" (func $exported_small)) (func $user (; 0 ;) (type $0) (call $exported) (call $tabled) @@ -15,21 +16,24 @@ ) (func $exported (; 1 ;) (type $0) (nop) + (nop) + ) + (func $exported_small (; 2 ;) (type $0) + (nop) ) - (func $recursive (; 2 ;) (type $0) + (func $recursive (; 3 ;) (type $0) (call $recursive) ) - (func $tabled (; 3 ;) (type $0) + (func $tabled (; 4 ;) (type $0) + (nop) (nop) ) - (func $cycle1 (; 4 ;) (type $0) - (call $cycle2) - ) - (func $cycle2 (; 5 ;) (type $0) + (func $cycle1 (; 5 ;) (type $0) (call $cycle1) ) (func $multi (; 6 ;) (type $0) (nop) + (nop) ) ) (module diff --git a/test/passes/inlining-optimizing.wast b/test/passes/inlining-optimizing.wast index aac4706fe..dbe511b1f 100644 --- a/test/passes/inlining-optimizing.wast +++ b/test/passes/inlining-optimizing.wast @@ -5,9 +5,13 @@ (local $x i32) (local $y f64) (call $exported) + (call $exported_small) (call $tabled) + (call $tabled_small) (call $multi) (call $multi) + (call $multi_small) + (call $multi_small) (call $ok) (drop (call $int)) (drop (call $double)) @@ -21,12 +25,20 @@ ) (func $exported (export "exported") (nop) + (nop) + ) + (func $exported_small (export "exported_small") + (nop) ) (func $recursive (call $recursive) ) (func $tabled (nop) + (nop) + ) + (func $tabled_small + (nop) ) (func $cycle1 (call $cycle2) @@ -36,6 +48,10 @@ ) (func $multi (nop) + (nop) + ) + (func $multi_small + (nop) ) (func $ok (drop (i32.const 1)) diff --git a/test/passes/inlining-optimizing_optimize-level=3.txt b/test/passes/inlining-optimizing_optimize-level=3.txt index 1bc6fe742..b742b1596 100644 --- a/test/passes/inlining-optimizing_optimize-level=3.txt +++ b/test/passes/inlining-optimizing_optimize-level=3.txt @@ -645,9 +645,6 @@ ) ) ) - (drop - (get_local $2) - ) (br_if $while-in (tee_local $1 (i32.load offset=56 @@ -1318,9 +1315,6 @@ ) ) ) - (drop - (get_local $14) - ) (select (i32.const -1) (get_local $1) @@ -2176,10 +2170,8 @@ ) (func $_cleanup (; 43 ;) (type $FUNCSIG$vi) (param $0 i32) (drop - (i32.eqz - (i32.load offset=68 - (get_local $0) - ) + (i32.load offset=68 + (get_local $0) ) ) ) diff --git a/test/passes/inlining.txt b/test/passes/inlining.txt index e1e47176f..9ce569da7 100644 --- a/test/passes/inlining.txt +++ b/test/passes/inlining.txt @@ -86,9 +86,11 @@ (block (block $__inlined_func$multipass (block - (block $__inlined_func$multipass2 - (drop - (i32.const 6) + (block + (block $__inlined_func$multipass2 + (drop + (i32.const 6) + ) ) ) ) @@ -129,12 +131,13 @@ (nop) ) (func $cycle1 (; 4 ;) (type $0) - (call $cycle2) - ) - (func $cycle2 (; 5 ;) (type $0) - (call $cycle1) + (block $__inlined_func$cycle2 + (block + (call $cycle1) + ) + ) ) - (func $multi (; 6 ;) (type $0) + (func $multi (; 5 ;) (type $0) (nop) ) ) diff --git a/test/passes/inlining_optimize-level=3.txt b/test/passes/inlining_optimize-level=3.txt index b245396c7..06486e401 100644 --- a/test/passes/inlining_optimize-level=3.txt +++ b/test/passes/inlining_optimize-level=3.txt @@ -86,8 +86,14 @@ ) (drop (block (result i32) - (block $__inlined_func$yes-calls-but-one-use (result i32) - (call $yes) + (block (result i32) + (block $__inlined_func$yes-calls-but-one-use (result i32) + (block (result i32) + (block $__inlined_func$yes0 (result i32) + (i32.const 1) + ) + ) + ) ) ) ) diff --git a/test/wasm-only.fromasm b/test/wasm-only.fromasm index 2e648f208..784edcf4c 100644 --- a/test/wasm-only.fromasm +++ b/test/wasm-only.fromasm @@ -533,21 +533,18 @@ ) (i64.const 245127260211081) ) - (func $returnCastConst (; 19 ;) (result i64) - (i64.const 0) - ) - (func $ifValue64 (; 20 ;) (param $0 i64) (param $1 i64) (result i64) + (func $ifValue64 (; 19 ;) (param $0 i64) (param $1 i64) (result i64) (call $call2 (get_local $0) ) ) - (func $ifValue32 (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (func $ifValue32 (; 20 ;) (param $0 i32) (param $1 i32) (result i32) (call $ifValue32 (get_local $0) (get_local $1) ) ) - (func $switch64 (; 22 ;) (param $0 i64) (result i32) + (func $switch64 (; 21 ;) (param $0 i64) (result i32) (block $switch (result i32) (block $switch-default (block $switch-case0 @@ -582,7 +579,7 @@ (i32.const 1) ) ) - (func $unreachable_leftovers (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $unreachable_leftovers (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (block $__rjto$0 (if (i32.eqz @@ -605,7 +602,7 @@ ) ) ) - (func $switch64TOOMUCH (; 24 ;) (param $0 i64) (result i32) + (func $switch64TOOMUCH (; 23 ;) (param $0 i64) (result i32) (local $1 i32) (local $2 i64) (block $switch-default @@ -682,7 +679,7 @@ ) (i32.const 44) ) - (func $_memchr (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memchr (; 24 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -913,7 +910,7 @@ (get_local $0) ) ) - (func $keepAlive (; 26 ;) + (func $keepAlive (; 25 ;) (call $loads) (call $loads) (call $stores) @@ -953,12 +950,6 @@ ) ) (drop - (call $returnCastConst) - ) - (drop - (call $returnCastConst) - ) - (drop (call $ifValue64 (i64.const 0) (i64.const 0) @@ -1023,10 +1014,7 @@ ) ) ) - (block - (nop) - (call $abort) - ) + (call $abort) ) (if (i32.eqz @@ -1037,13 +1025,10 @@ ) ) ) - (block - (nop) - (call $abort) - ) + (call $abort) ) ) - (func $legalstub$illegalParam (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (func $legalstub$illegalParam (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) (call $illegalParam (get_local $0) (i64.or @@ -1060,13 +1045,13 @@ (get_local $3) ) ) - (func $legalstub$illegalResult (; 28 ;) (result i32) + (func $legalstub$illegalResult (; 27 ;) (result i32) (set_global $tempRet0 (i32.const 2) ) (i32.const 1) ) - (func $legalfunc$illegalImport (; 29 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (func $legalfunc$illegalImport (; 28 ;) (param $0 f64) (param $1 i64) (param $2 i32) (call $legalimport$illegalImport (get_local $0) (i32.wrap/i64 @@ -1081,7 +1066,7 @@ (get_local $2) ) ) - (func $legalfunc$_fabsf (; 30 ;) (param $0 f32) (result f32) + (func $legalfunc$_fabsf (; 29 ;) (param $0 f32) (result f32) (f32.demote/f64 (call $legalimport$_fabsf (f64.promote/f32 @@ -1090,7 +1075,7 @@ ) ) ) - (func $legalfunc$do_i64 (; 31 ;) (result i64) + (func $legalfunc$do_i64 (; 30 ;) (result i64) (i64.or (i64.extend_u/i32 (call $legalimport$do_i64) diff --git a/test/wasm-only.fromasm.clamp b/test/wasm-only.fromasm.clamp index 2e648f208..784edcf4c 100644 --- a/test/wasm-only.fromasm.clamp +++ b/test/wasm-only.fromasm.clamp @@ -533,21 +533,18 @@ ) (i64.const 245127260211081) ) - (func $returnCastConst (; 19 ;) (result i64) - (i64.const 0) - ) - (func $ifValue64 (; 20 ;) (param $0 i64) (param $1 i64) (result i64) + (func $ifValue64 (; 19 ;) (param $0 i64) (param $1 i64) (result i64) (call $call2 (get_local $0) ) ) - (func $ifValue32 (; 21 ;) (param $0 i32) (param $1 i32) (result i32) + (func $ifValue32 (; 20 ;) (param $0 i32) (param $1 i32) (result i32) (call $ifValue32 (get_local $0) (get_local $1) ) ) - (func $switch64 (; 22 ;) (param $0 i64) (result i32) + (func $switch64 (; 21 ;) (param $0 i64) (result i32) (block $switch (result i32) (block $switch-default (block $switch-case0 @@ -582,7 +579,7 @@ (i32.const 1) ) ) - (func $unreachable_leftovers (; 23 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $unreachable_leftovers (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (block $__rjto$0 (if (i32.eqz @@ -605,7 +602,7 @@ ) ) ) - (func $switch64TOOMUCH (; 24 ;) (param $0 i64) (result i32) + (func $switch64TOOMUCH (; 23 ;) (param $0 i64) (result i32) (local $1 i32) (local $2 i64) (block $switch-default @@ -682,7 +679,7 @@ ) (i32.const 44) ) - (func $_memchr (; 25 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memchr (; 24 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -913,7 +910,7 @@ (get_local $0) ) ) - (func $keepAlive (; 26 ;) + (func $keepAlive (; 25 ;) (call $loads) (call $loads) (call $stores) @@ -953,12 +950,6 @@ ) ) (drop - (call $returnCastConst) - ) - (drop - (call $returnCastConst) - ) - (drop (call $ifValue64 (i64.const 0) (i64.const 0) @@ -1023,10 +1014,7 @@ ) ) ) - (block - (nop) - (call $abort) - ) + (call $abort) ) (if (i32.eqz @@ -1037,13 +1025,10 @@ ) ) ) - (block - (nop) - (call $abort) - ) + (call $abort) ) ) - (func $legalstub$illegalParam (; 27 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (func $legalstub$illegalParam (; 26 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) (call $illegalParam (get_local $0) (i64.or @@ -1060,13 +1045,13 @@ (get_local $3) ) ) - (func $legalstub$illegalResult (; 28 ;) (result i32) + (func $legalstub$illegalResult (; 27 ;) (result i32) (set_global $tempRet0 (i32.const 2) ) (i32.const 1) ) - (func $legalfunc$illegalImport (; 29 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (func $legalfunc$illegalImport (; 28 ;) (param $0 f64) (param $1 i64) (param $2 i32) (call $legalimport$illegalImport (get_local $0) (i32.wrap/i64 @@ -1081,7 +1066,7 @@ (get_local $2) ) ) - (func $legalfunc$_fabsf (; 30 ;) (param $0 f32) (result f32) + (func $legalfunc$_fabsf (; 29 ;) (param $0 f32) (result f32) (f32.demote/f64 (call $legalimport$_fabsf (f64.promote/f32 @@ -1090,7 +1075,7 @@ ) ) ) - (func $legalfunc$do_i64 (; 31 ;) (result i64) + (func $legalfunc$do_i64 (; 30 ;) (result i64) (i64.or (i64.extend_u/i32 (call $legalimport$do_i64) diff --git a/test/wasm-only.fromasm.imprecise b/test/wasm-only.fromasm.imprecise index 30a26bf5d..a35dda983 100644 --- a/test/wasm-only.fromasm.imprecise +++ b/test/wasm-only.fromasm.imprecise @@ -17,10 +17,7 @@ (export "illegalParam" (func $legalstub$illegalParam)) (export "illegalResult" (func $legalstub$illegalResult)) (export "keepAlive" (func $keepAlive)) - (func $loads (; 5 ;) - (nop) - ) - (func $stores (; 6 ;) + (func $stores (; 5 ;) (local $0 i32) (local $1 f64) (local $2 f32) @@ -113,7 +110,7 @@ (get_local $1) ) ) - (func $test (; 7 ;) + (func $test (; 6 ;) (local $0 f32) (local $1 i32) (set_local $1 @@ -122,7 +119,7 @@ ) ) ) - (func $test64 (; 8 ;) + (func $test64 (; 7 ;) (local $0 i64) (local $1 i32) (local $2 i64) @@ -164,7 +161,7 @@ ) ) ) - (func $imports (; 9 ;) (result i64) + (func $imports (; 8 ;) (result i64) (call $legalfunc$illegalImport (f64.const -3.13159) (i64.const 94489280523) @@ -182,7 +179,7 @@ ) ) ) - (func $arg (; 10 ;) (param $0 i64) + (func $arg (; 9 ;) (param $0 i64) (i64.store (i32.const 100) (get_local $0) @@ -191,7 +188,7 @@ (get_local $0) ) ) - (func $illegalParam (; 11 ;) (param $0 i32) (param $1 i64) (param $2 f64) + (func $illegalParam (; 10 ;) (param $0 i32) (param $1 i64) (param $2 f64) (i64.store (i32.const 100) (get_local $1) @@ -202,12 +199,12 @@ (f64.const 12.34) ) ) - (func $call1 (; 12 ;) (param $0 i64) (result i64) + (func $call1 (; 11 ;) (param $0 i64) (result i64) (call $call1 (get_local $0) ) ) - (func $call2 (; 13 ;) (param $0 i64) (result i64) + (func $call2 (; 12 ;) (param $0 i64) (result i64) (drop (call $call2 (call $call2 @@ -217,21 +214,18 @@ ) (i64.const 245127260211081) ) - (func $returnCastConst (; 14 ;) (result i64) - (i64.const 0) - ) - (func $ifValue64 (; 15 ;) (param $0 i64) (param $1 i64) (result i64) + (func $ifValue64 (; 13 ;) (param $0 i64) (param $1 i64) (result i64) (call $call2 (get_local $0) ) ) - (func $ifValue32 (; 16 ;) (param $0 i32) (param $1 i32) (result i32) + (func $ifValue32 (; 14 ;) (param $0 i32) (param $1 i32) (result i32) (call $ifValue32 (get_local $0) (get_local $1) ) ) - (func $switch64 (; 17 ;) (param $0 i64) (result i32) + (func $switch64 (; 15 ;) (param $0 i64) (result i32) (block $switch (result i32) (block $switch-default (block $switch-case0 @@ -266,7 +260,7 @@ (i32.const 1) ) ) - (func $unreachable_leftovers (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) + (func $unreachable_leftovers (; 16 ;) (param $0 i32) (param $1 i32) (param $2 i32) (block $__rjto$0 (if (i32.eqz @@ -289,7 +283,7 @@ ) ) ) - (func $switch64TOOMUCH (; 19 ;) (param $0 i64) (result i32) + (func $switch64TOOMUCH (; 17 ;) (param $0 i64) (result i32) (local $1 i32) (local $2 i64) (block $switch-default @@ -366,7 +360,7 @@ ) (i32.const 44) ) - (func $_memchr (; 20 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $_memchr (; 18 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -597,9 +591,7 @@ (get_local $0) ) ) - (func $keepAlive (; 21 ;) - (call $loads) - (call $loads) + (func $keepAlive (; 19 ;) (call $stores) (call $stores) (call $test) @@ -637,12 +629,6 @@ ) ) (drop - (call $returnCastConst) - ) - (drop - (call $returnCastConst) - ) - (drop (call $ifValue64 (i64.const 0) (i64.const 0) @@ -707,10 +693,7 @@ ) ) ) - (block - (nop) - (call $abort) - ) + (call $abort) ) (if (i32.eqz @@ -721,13 +704,10 @@ ) ) ) - (block - (nop) - (call $abort) - ) + (call $abort) ) ) - (func $legalstub$illegalParam (; 22 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) + (func $legalstub$illegalParam (; 20 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 f64) (call $illegalParam (get_local $0) (i64.or @@ -744,13 +724,13 @@ (get_local $3) ) ) - (func $legalstub$illegalResult (; 23 ;) (result i32) + (func $legalstub$illegalResult (; 21 ;) (result i32) (set_global $tempRet0 (i32.const 2) ) (i32.const 1) ) - (func $legalfunc$illegalImport (; 24 ;) (param $0 f64) (param $1 i64) (param $2 i32) + (func $legalfunc$illegalImport (; 22 ;) (param $0 f64) (param $1 i64) (param $2 i32) (call $legalimport$illegalImport (get_local $0) (i32.wrap/i64 @@ -765,7 +745,7 @@ (get_local $2) ) ) - (func $legalfunc$_fabsf (; 25 ;) (param $0 f32) (result f32) + (func $legalfunc$_fabsf (; 23 ;) (param $0 f32) (result f32) (f32.demote/f64 (call $legalimport$_fabsf (f64.promote/f32 @@ -774,7 +754,7 @@ ) ) ) - (func $legalfunc$do_i64 (; 26 ;) (result i64) + (func $legalfunc$do_i64 (; 24 ;) (result i64) (i64.or (i64.extend_u/i32 (call $legalimport$do_i64) |