diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-06 15:37:24 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-06 15:37:24 -0700 |
commit | a3279d60a87539301186f0558231f726dc905cdc (patch) | |
tree | 75cebfc73fd2097bb89b2db6e4adb039a9c2f55b | |
parent | 265225f703a6d94dd20d42c322233b52d73f22f8 (diff) | |
download | binaryen-a3279d60a87539301186f0558231f726dc905cdc.tar.gz binaryen-a3279d60a87539301186f0558231f726dc905cdc.tar.bz2 binaryen-a3279d60a87539301186f0558231f726dc905cdc.zip |
optimize if-eqz
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rwxr-xr-x | build.sh | 2 | ||||
-rw-r--r-- | src/asm2wasm.h | 1 | ||||
-rw-r--r-- | src/binaryen-shell.cpp | 1 | ||||
-rw-r--r-- | src/passes/OptimizeInstructions.cpp | 43 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm | 920 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm.imprecise | 920 | ||||
-rw-r--r-- | test/memorygrowth.fromasm | 1710 | ||||
-rw-r--r-- | test/memorygrowth.fromasm.imprecise | 1710 | ||||
-rw-r--r-- | test/passes/optimize-instructions.txt | 23 | ||||
-rw-r--r-- | test/passes/optimize-instructions.wast | 26 | ||||
-rw-r--r-- | test/two_sides.fromasm | 16 | ||||
-rw-r--r-- | test/two_sides.fromasm.imprecise | 16 |
13 files changed, 2509 insertions, 2881 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d434e221d..e0ee31f11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,6 +84,7 @@ SET(binaryen-shell_SOURCES src/passes/LowerIfElse.cpp src/passes/MergeBlocks.cpp src/passes/NameManager.cpp + src/passes/OptimizeInstructions.cpp src/passes/PostEmscripten.cpp src/passes/Print.cpp src/passes/RemoveImports.cpp @@ -104,6 +105,7 @@ SET(asm2wasm_SOURCES src/asm2wasm-main.cpp src/pass.cpp src/passes/MergeBlocks.cpp + src/passes/OptimizeInstructions.cpp src/passes/PostEmscripten.cpp src/passes/Print.cpp src/passes/RemoveUnusedBrs.cpp @@ -11,7 +11,7 @@ make -j #echo "building s2wasm" #g++ -O2 -std=c++11 src/s2wasm-main.cpp src/support/command-line.cpp src/support/file.cpp src/support/colors.cpp -Isrc/ -o bin/s2wasm echo "building wasm.js" -em++ -std=c++11 src/wasm-js.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/Print.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/PostEmscripten.cpp src/passes/SimplifyLocals.cpp src/passes/ReorderLocals.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp src/support/safe_integer.cpp src/support/bits.cpp -Isrc/ -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2 +em++ -std=c++11 src/wasm-js.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/Print.cpp src/passes/OptimizeInstructions.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/PostEmscripten.cpp src/passes/SimplifyLocals.cpp src/passes/ReorderLocals.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp src/support/safe_integer.cpp src/support/bits.cpp -Isrc/ -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2 echo "building binaryen.js" python ~/Dev/emscripten/tools/webidl_binder.py src/js/binaryen.idl glue em++ -std=c++11 src/binaryen-js.cpp src/pass.cpp src/passes/MergeBlocks.cpp src/passes/Print.cpp src/passes/RemoveUnusedBrs.cpp src/passes/RemoveUnusedNames.cpp src/passes/PostEmscripten.cpp src/passes/SimplifyLocals.cpp src/passes/ReorderLocals.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp src/support/colors.cpp src/support/safe_integer.cpp src/support/bits.cpp -Isrc/ -o bin/binaryen.js -s MODULARIZE=1 -s 'EXPORT_NAME="Binaryen"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 -s INVOKE_RUN=0 --post-js glue.js diff --git a/src/asm2wasm.h b/src/asm2wasm.h index e4bfdc341..2f18b98f1 100644 --- a/src/asm2wasm.h +++ b/src/asm2wasm.h @@ -1603,6 +1603,7 @@ void Asm2WasmBuilder::optimize() { passRunner.add("remove-unused-brs"); passRunner.add("remove-unused-names"); passRunner.add("merge-blocks"); + passRunner.add("optimize-instructions"); passRunner.add("simplify-locals"); passRunner.add("reorder-locals"); if (maxGlobal < 1024) { diff --git a/src/binaryen-shell.cpp b/src/binaryen-shell.cpp index 72fad992b..14cc66406 100644 --- a/src/binaryen-shell.cpp +++ b/src/binaryen-shell.cpp @@ -176,6 +176,7 @@ int main(int argc, const char* argv[]) { static const char* default_passes[] = {"remove-unused-brs", "remove-unused-names", "merge-blocks", + "optimize-instructions", "simplify-locals", "reorder-locals"}; Options options("binaryen-shell", "Execute .wast files"); diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp new file mode 100644 index 000000000..638977353 --- /dev/null +++ b/src/passes/OptimizeInstructions.cpp @@ -0,0 +1,43 @@ +/* + * 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. + */ + +// +// Optimize combinations of instructions +// + +#include <algorithm> + +#include <wasm.h> +#include <pass.h> + +namespace wasm { + +struct OptimizeInstructions : public WalkerPass<WasmWalker<OptimizeInstructions>> { + void visitIf(If* curr) { + // flip branches to get rid of an i32.eqz + if (curr->ifFalse) { + auto condition = curr->condition->dyn_cast<Unary>(); + if (condition && condition->op == EqZ && condition->value->type == i32) { + curr->condition = condition->value; + std::swap(curr->ifTrue, curr->ifFalse); + } + } + } +}; + +static RegisterPass<OptimizeInstructions> registerPass("optimize-instructions", "optimizes instruction combinations"); + +} // namespace wasm diff --git a/test/emcc_O2_hello_world.fromasm b/test/emcc_O2_hello_world.fromasm index f0a74eb1e..329833970 100644 --- a/test/emcc_O2_hello_world.fromasm +++ b/test/emcc_O2_hello_world.fromasm @@ -862,7 +862,8 @@ ) ) (if - (i32.eqz + (get_local $i10) + (set_local $i23 (get_local $i10) ) (block @@ -872,7 +873,8 @@ ) ) (if - (i32.eqz + (get_local $i15) + (set_local $i23 (get_local $i15) ) (block @@ -884,14 +886,8 @@ ) (br $while-out$6) ) - (set_local $i23 - (get_local $i15) - ) ) ) - (set_local $i23 - (get_local $i10) - ) ) (set_local $i10 (i32.sub @@ -983,8 +979,14 @@ ) ) (if - (i32.eqz - (get_local $i17) + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) ) (block (set_local $i15 @@ -999,15 +1001,7 @@ ) ) (if - (i32.eqz - (get_local $i10) - ) - (block - (set_local $i24 - (i32.const 0) - ) - (br $do-once$8) - ) + (get_local $i10) (block (set_local $i25 (get_local $i10) @@ -1016,14 +1010,12 @@ (get_local $i15) ) ) - ) - ) - (block - (set_local $i25 - (get_local $i17) - ) - (set_local $i26 - (get_local $i14) + (block + (set_local $i24 + (i32.const 0) + ) + (br $do-once$8) + ) ) ) ) @@ -1063,8 +1055,14 @@ ) ) (if - (i32.eqz - (get_local $i17) + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) ) (block (set_local $i27 @@ -1075,14 +1073,6 @@ ) (br $while-out$10) ) - (block - (set_local $i25 - (get_local $i17) - ) - (set_local $i26 - (get_local $i14) - ) - ) ) (br $while-in$11) ) @@ -1688,23 +1678,7 @@ ) (block $label$break$L123 (if - (i32.eqz - (get_local $i4) - ) - (block - (set_local $i33 - (get_local $i14) - ) - (set_local $i34 - (i32.const 0) - ) - (set_local $i35 - (i32.const 0) - ) - (set_local $i36 - (i32.const 86) - ) - ) + (get_local $i4) (block (set_local $i12 (get_local $i14) @@ -1883,6 +1857,20 @@ (br $while-in$18) ) ) + (block + (set_local $i33 + (get_local $i14) + ) + (set_local $i34 + (i32.const 0) + ) + (set_local $i35 + (i32.const 0) + ) + (set_local $i36 + (i32.const 86) + ) + ) ) ) (if @@ -2045,17 +2033,7 @@ ) ) (if - (i32.eqz - (get_local $i42) - ) - (block - (set_local $i43 - (get_local $i33) - ) - (set_local $i44 - (get_local $i35) - ) - ) + (get_local $i42) (block (set_local $i37 (get_local $i33) @@ -2070,6 +2048,14 @@ (i32.const 90) ) ) + (block + (set_local $i43 + (get_local $i33) + ) + (set_local $i44 + (get_local $i35) + ) + ) ) ) ) @@ -2142,28 +2128,26 @@ ) ) (if - (i32.eqz - (get_local $i38) - ) + (get_local $i38) (block - (set_local $i43 + (set_local $i37 (get_local $i3) ) - (set_local $i44 + (set_local $i39 (get_local $i8) ) - (br $while-out$19) + (set_local $i36 + (i32.const 90) + ) ) (block - (set_local $i37 + (set_local $i43 (get_local $i3) ) - (set_local $i39 + (set_local $i44 (get_local $i8) ) - (set_local $i36 - (i32.const 90) - ) + (br $while-out$19) ) ) (br $while-in$20) @@ -2241,8 +2225,14 @@ ) ) (if - (i32.eqz - (get_local $i14) + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) ) (block (set_local $i4 @@ -2257,15 +2247,7 @@ ) ) (if - (i32.eqz - (get_local $i10) - ) - (block - (set_local $i45 - (i32.const 0) - ) - (br $do-once$21) - ) + (get_local $i10) (block (set_local $i46 (get_local $i10) @@ -2274,14 +2256,12 @@ (get_local $i4) ) ) - ) - ) - (block - (set_local $i46 - (get_local $i14) - ) - (set_local $i47 - (get_local $i2) + (block + (set_local $i45 + (i32.const 0) + ) + (br $do-once$21) + ) ) ) ) @@ -2321,8 +2301,14 @@ ) ) (if - (i32.eqz - (get_local $i14) + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) ) (block (set_local $i48 @@ -2333,14 +2319,6 @@ ) (br $while-out$23) ) - (block - (set_local $i46 - (get_local $i14) - ) - (set_local $i47 - (get_local $i2) - ) - ) ) (br $while-in$24) ) @@ -2974,8 +2952,17 @@ ) ) (if - (i32.eqz - (get_local $i2) + (get_local $i2) + (block + (set_local $i4 + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + (set_local $i7 + (get_local $i2) + ) ) (block (set_local $i54 @@ -2989,17 +2976,6 @@ ) (br $while-out$31) ) - (block - (set_local $i4 - (i32.shl - (get_local $i4) - (i32.const 1) - ) - ) - (set_local $i7 - (get_local $i2) - ) - ) ) (br $while-in$32) ) @@ -3345,15 +3321,14 @@ ) ) (if - (i32.eqz - (i32.and - (i32.add - (get_local $i53) - (i32.const -1) - ) + (i32.and + (i32.add (get_local $i53) + (i32.const -1) ) + (get_local $i53) ) + (call_import $_abort) (block (i32.store (i32.const 656) @@ -3393,7 +3368,6 @@ ) (br $do-once$33) ) - (call_import $_abort) ) ) ) @@ -3494,13 +3468,14 @@ ) (block $label$break$L257 (if - (i32.eqz - (i32.and - (i32.load - (i32.const 620) - ) - (i32.const 4) + (i32.and + (i32.load + (i32.const 620) ) + (i32.const 4) + ) + (set_local $i36 + (i32.const 190) ) (block (set_local $i52 @@ -3682,14 +3657,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $i45) - (get_local $i5) - ) - ) - (set_local $i62 - (get_local $i43) + (i32.and + (get_local $i45) + (get_local $i5) ) (set_local $i62 (i32.add @@ -3709,6 +3679,9 @@ ) ) ) + (set_local $i62 + (get_local $i43) + ) ) (set_local $i50 (i32.load @@ -3918,9 +3891,6 @@ (i32.const 190) ) ) - (set_local $i36 - (i32.const 190) - ) ) ) (if @@ -4282,13 +4252,14 @@ (i32.const 211) ) (if - (i32.eqz - (i32.and - (i32.load offset=12 - (get_local $i70) - ) - (i32.const 8) + (i32.and + (i32.load offset=12 + (get_local $i70) ) + (i32.const 8) + ) + (set_local $i71 + (i32.const 624) ) (block (i32.store @@ -4504,8 +4475,14 @@ ) ) (if - (i32.eqz - (get_local $i52) + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) ) (block (set_local $i50 @@ -4514,15 +4491,7 @@ ) ) (if - (i32.eqz - (get_local $i50) - ) - (block - (set_local $i72 - (i32.const 0) - ) - (br $do-once$53) - ) + (get_local $i50) (block (set_local $i73 (get_local $i50) @@ -4531,14 +4500,12 @@ (get_local $i45) ) ) - ) - ) - (block - (set_local $i73 - (get_local $i52) - ) - (set_local $i74 - (get_local $i5) + (block + (set_local $i72 + (i32.const 0) + ) + (br $do-once$53) + ) ) ) ) @@ -4578,8 +4545,14 @@ ) ) (if - (i32.eqz - (get_local $i52) + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) ) (block (set_local $i75 @@ -4590,14 +4563,6 @@ ) (br $while-out$55) ) - (block - (set_local $i73 - (get_local $i52) - ) - (set_local $i74 - (get_local $i5) - ) - ) ) (br $while-in$56) ) @@ -5068,29 +5033,9 @@ ) (block $do-once$65 (if - (i32.eqz - (i32.and - (get_local $i54) - (get_local $i5) - ) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (get_local $i54) - (get_local $i5) - ) - ) - (set_local $i80 - (i32.add - (get_local $i62) - (i32.const 8) - ) - ) - (set_local $i81 - (get_local $i62) - ) + (i32.and + (get_local $i54) + (get_local $i5) ) (block (set_local $i56 @@ -5123,6 +5068,24 @@ ) (call_import $_abort) ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i54) + (get_local $i5) + ) + ) + (set_local $i80 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i81 + (get_local $i62) + ) + ) ) ) (i32.store @@ -5152,12 +5115,7 @@ ) (block $do-once$67 (if - (i32.eqz - (get_local $i5) - ) - (set_local $i82 - (i32.const 0) - ) + (get_local $i5) (block (if (i32.gt_u @@ -5259,6 +5217,9 @@ ) ) ) + (set_local $i82 + (i32.const 0) + ) ) ) (set_local $i5 @@ -5399,8 +5360,17 @@ ) ) (if - (i32.eqz - (get_local $i57) + (get_local $i57) + (block + (set_local $i50 + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) ) (block (set_local $i84 @@ -5414,17 +5384,6 @@ ) (br $while-out$69) ) - (block - (set_local $i50 - (i32.shl - (get_local $i50) - (i32.const 1) - ) - ) - (set_local $i62 - (get_local $i57) - ) - ) ) (br $while-in$70) ) @@ -5560,9 +5519,6 @@ (get_local $i13) ) ) - (set_local $i71 - (i32.const 624) - ) ) ) (loop $while-out$71 $while-in$72 @@ -6190,8 +6146,17 @@ ) ) (if - (i32.eqz - (get_local $i57) + (get_local $i57) + (block + (set_local $i5 + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) ) (block (set_local $i91 @@ -6205,17 +6170,6 @@ ) (br $while-out$75) ) - (block - (set_local $i5 - (i32.shl - (get_local $i5) - (i32.const 1) - ) - ) - (set_local $i62 - (get_local $i57) - ) - ) ) (br $while-in$76) ) @@ -6638,10 +6592,16 @@ ) (block $do-once$0 (if - (i32.eqz - (i32.and - (get_local $i4) - (i32.const 1) + (i32.and + (get_local $i4) + (i32.const 1) + ) + (block + (set_local $i12 + (get_local $i2) + ) + (set_local $i13 + (get_local $i5) ) ) (block @@ -6922,8 +6882,14 @@ ) ) (if - (i32.eqz - (get_local $i16) + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) ) (block (set_local $i17 @@ -6932,15 +6898,7 @@ ) ) (if - (i32.eqz - (get_local $i17) - ) - (block - (set_local $i18 - (i32.const 0) - ) - (br $do-once$2) - ) + (get_local $i17) (block (set_local $i19 (get_local $i17) @@ -6949,14 +6907,12 @@ (get_local $i14) ) ) - ) - ) - (block - (set_local $i19 - (get_local $i16) - ) - (set_local $i20 - (get_local $i11) + (block + (set_local $i18 + (i32.const 0) + ) + (br $do-once$2) + ) ) ) ) @@ -6996,8 +6952,14 @@ ) ) (if - (i32.eqz - (get_local $i16) + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) ) (block (set_local $i21 @@ -7008,14 +6970,6 @@ ) (br $while-out$4) ) - (block - (set_local $i19 - (get_local $i16) - ) - (set_local $i20 - (get_local $i11) - ) - ) ) (br $while-in$5) ) @@ -7307,14 +7261,6 @@ ) ) ) - (block - (set_local $i12 - (get_local $i2) - ) - (set_local $i13 - (get_local $i5) - ) - ) ) ) (if @@ -7345,10 +7291,34 @@ (call_import $_abort) ) (if - (i32.eqz - (i32.and - (get_local $i2) - (i32.const 2) + (i32.and + (get_local $i2) + (i32.const 2) + ) + (block + (i32.store + (get_local $i5) + (i32.and + (get_local $i2) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $i12) + (i32.or + (get_local $i13) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i13) + ) + (get_local $i13) + ) + (set_local $i29 + (get_local $i13) ) ) (block @@ -7501,8 +7471,14 @@ ) ) (if - (i32.eqz - (get_local $i15) + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) ) (block (set_local $i1 @@ -7511,15 +7487,7 @@ ) ) (if - (i32.eqz - (get_local $i1) - ) - (block - (set_local $i23 - (i32.const 0) - ) - (br $do-once$10) - ) + (get_local $i1) (block (set_local $i24 (get_local $i1) @@ -7528,14 +7496,12 @@ (get_local $i20) ) ) - ) - ) - (block - (set_local $i24 - (get_local $i15) - ) - (set_local $i25 - (get_local $i19) + (block + (set_local $i23 + (i32.const 0) + ) + (br $do-once$10) + ) ) ) ) @@ -7575,8 +7541,14 @@ ) ) (if - (i32.eqz - (get_local $i15) + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) ) (block (set_local $i26 @@ -7587,14 +7559,6 @@ ) (br $while-out$12) ) - (block - (set_local $i24 - (get_local $i15) - ) - (set_local $i25 - (get_local $i19) - ) - ) ) (br $while-in$13) ) @@ -8011,32 +7975,6 @@ ) ) ) - (block - (i32.store - (get_local $i5) - (i32.and - (get_local $i2) - (i32.const -2) - ) - ) - (i32.store offset=4 - (get_local $i12) - (i32.or - (get_local $i13) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (get_local $i12) - (get_local $i13) - ) - (get_local $i13) - ) - (set_local $i29 - (get_local $i13) - ) - ) ) (set_local $i13 (i32.shr_u @@ -8361,8 +8299,17 @@ ) ) (if - (i32.eqz - (get_local $i13) + (get_local $i13) + (block + (set_local $i31 + (i32.shl + (get_local $i31) + (i32.const 1) + ) + ) + (set_local $i2 + (get_local $i13) + ) ) (block (set_local $i35 @@ -8376,17 +8323,6 @@ ) (br $while-out$18) ) - (block - (set_local $i31 - (i32.shl - (get_local $i31) - (i32.const 1) - ) - ) - (set_local $i2 - (get_local $i13) - ) - ) ) (br $while-in$19) ) @@ -8525,13 +8461,11 @@ (get_local $i12) ) (if - (i32.eqz - (get_local $i12) - ) + (get_local $i12) + (return) (set_local $i37 (i32.const 632) ) - (return) ) (loop $while-out$20 $while-in$21 (set_local $i12 @@ -8540,16 +8474,14 @@ ) ) (if - (i32.eqz - (get_local $i12) - ) - (br $while-out$20) + (get_local $i12) (set_local $i37 (i32.add (get_local $i12) (i32.const 8) ) ) + (br $while-out$20) ) (br $while-in$21) ) @@ -8677,68 +8609,66 @@ ) (loop $while-out$0 $while-in$1 (if - (i32.eqz - (i32.load - (i32.const 8) - ) + (i32.load + (i32.const 8) ) (block + (call_import $_pthread_cleanup_push + (i32.const 4) + (get_local $i1) + ) (i32.store - (get_local $i5) + (get_local $i6) (i32.load (get_local $i2) ) ) (i32.store offset=4 - (get_local $i5) + (get_local $i6) (get_local $i12) ) (i32.store offset=8 - (get_local $i5) + (get_local $i6) (get_local $i7) ) - (set_local $i14 + (set_local $i11 (call $___syscall_ret (call_import $___syscall146 (i32.const 146) - (get_local $i5) + (get_local $i6) ) ) ) + (call_import $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $i14 + (get_local $i11) + ) ) (block - (call_import $_pthread_cleanup_push - (i32.const 4) - (get_local $i1) - ) (i32.store - (get_local $i6) + (get_local $i5) (i32.load (get_local $i2) ) ) (i32.store offset=4 - (get_local $i6) + (get_local $i5) (get_local $i12) ) (i32.store offset=8 - (get_local $i6) + (get_local $i5) (get_local $i7) ) - (set_local $i11 + (set_local $i14 (call $___syscall_ret (call_import $___syscall146 (i32.const 146) - (get_local $i6) + (get_local $i5) ) ) ) - (call_import $_pthread_cleanup_pop - (i32.const 0) - ) - (set_local $i14 - (get_local $i11) - ) ) ) (if @@ -9011,14 +8941,21 @@ ) ) (if - (i32.eqz - (get_local $i5) + (get_local $i5) + (block + (set_local $i6 + (get_local $i5) + ) + (set_local $i7 + (i32.const 5) + ) ) (if - (i32.eqz - (call $___towrite - (get_local $i3) - ) + (call $___towrite + (get_local $i3) + ) + (set_local $i8 + (i32.const 0) ) (block (set_local $i6 @@ -9030,17 +8967,6 @@ (i32.const 5) ) ) - (set_local $i8 - (i32.const 0) - ) - ) - (block - (set_local $i6 - (get_local $i5) - ) - (set_local $i7 - (i32.const 5) - ) ) ) (block $label$break$L5 @@ -9300,13 +9226,8 @@ ) (block (if - (i32.eqz - (i32.load - (i32.const 56) - ) - ) - (set_local $i5 - (i32.const 0) + (i32.load + (i32.const 56) ) (set_local $i5 (call $_fflush @@ -9315,6 +9236,9 @@ ) ) ) + (set_local $i5 + (i32.const 0) + ) ) (call_import $___lock (i32.const 36) @@ -9325,12 +9249,7 @@ ) ) (if - (i32.eqz - (get_local $i4) - ) - (set_local $i6 - (get_local $i5) - ) + (get_local $i4) (block (set_local $i3 (get_local $i4) @@ -9388,8 +9307,9 @@ ) ) (if - (i32.eqz - (get_local $i3) + (get_local $i3) + (set_local $i4 + (get_local $i8) ) (block (set_local $i6 @@ -9397,13 +9317,13 @@ ) (br $while-out$2) ) - (set_local $i4 - (get_local $i8) - ) ) (br $while-in$3) ) ) + (set_local $i6 + (get_local $i5) + ) ) (call_import $___unlock (i32.const 36) @@ -9434,19 +9354,9 @@ ) (block $label$break$L1 (if - (i32.eqz - (i32.and - (get_local $i2) - (i32.const 3) - ) - ) - (block - (set_local $i3 - (get_local $i1) - ) - (set_local $i4 - (i32.const 4) - ) + (i32.and + (get_local $i2) + (i32.const 3) ) (block (set_local $i5 @@ -9479,11 +9389,12 @@ (get_local $i8) ) (if - (i32.eqz - (i32.and - (get_local $i6) - (i32.const 3) - ) + (i32.and + (get_local $i6) + (i32.const 3) + ) + (set_local $i5 + (get_local $i8) ) (block (set_local $i3 @@ -9494,13 +9405,18 @@ ) (br $while-out$1) ) - (set_local $i5 - (get_local $i8) - ) ) (br $while-in$2) ) ) + (block + (set_local $i3 + (get_local $i1) + ) + (set_local $i4 + (i32.const 4) + ) + ) ) ) (if @@ -9519,25 +9435,17 @@ ) ) (if - (i32.eqz - (i32.and - (i32.xor - (i32.and - (get_local $i3) - (i32.const -2139062144) - ) - (i32.const -2139062144) - ) - (i32.add + (i32.and + (i32.xor + (i32.and (get_local $i3) - (i32.const -16843009) + (i32.const -2139062144) ) + (i32.const -2139062144) ) - ) - (set_local $i4 (i32.add - (get_local $i4) - (i32.const 4) + (get_local $i3) + (i32.const -16843009) ) ) (block @@ -9549,24 +9457,25 @@ ) (br $while-out$3) ) + (set_local $i4 + (i32.add + (get_local $i4) + (i32.const 4) + ) + ) ) (br $while-in$4) ) (if - (i32.eqz - (i32.shr_s - (i32.shl - (i32.and - (get_local $i9) - (i32.const 255) - ) - (i32.const 24) + (i32.shr_s + (i32.shl + (i32.and + (get_local $i9) + (i32.const 255) ) (i32.const 24) ) - ) - (set_local $i11 - (get_local $i10) + (i32.const 24) ) (block (set_local $i9 @@ -9580,10 +9489,11 @@ ) ) (if - (i32.eqz - (i32.load8_s - (get_local $i10) - ) + (i32.load8_s + (get_local $i10) + ) + (set_local $i9 + (get_local $i10) ) (block (set_local $i11 @@ -9591,13 +9501,13 @@ ) (br $while-out$5) ) - (set_local $i9 - (get_local $i10) - ) ) (br $while-in$6) ) ) + (set_local $i11 + (get_local $i10) + ) ) (set_local $i7 (get_local $i11) @@ -9660,14 +9570,21 @@ ) ) (if - (i32.eqz - (get_local $i7) + (get_local $i7) + (block + (set_local $i8 + (get_local $i7) + ) + (set_local $i9 + (i32.const 4) + ) ) (if - (i32.eqz - (call $___towrite - (get_local $i1) - ) + (call $___towrite + (get_local $i1) + ) + (set_local $i10 + (i32.const -1) ) (block (set_local $i8 @@ -9679,17 +9596,6 @@ (i32.const 4) ) ) - (set_local $i10 - (i32.const -1) - ) - ) - (block - (set_local $i8 - (get_local $i7) - ) - (set_local $i9 - (i32.const 4) - ) ) ) (block $do-once$0 @@ -10446,10 +10352,20 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $i3) - (i32.const 8) + (i32.and + (get_local $i3) + (i32.const 8) + ) + (block + (i32.store + (get_local $i1) + (i32.or + (get_local $i3) + (i32.const 32) + ) + ) + (set_local $i4 + (i32.const -1) ) ) (block @@ -10487,18 +10403,6 @@ (i32.const 0) ) ) - (block - (i32.store - (get_local $i1) - (i32.or - (get_local $i3) - (i32.const 32) - ) - ) - (set_local $i4 - (i32.const -1) - ) - ) ) (return (get_local $i4) @@ -10884,19 +10788,17 @@ (func $___errno_location (result i32) (local $i1 i32) (if - (i32.eqz - (i32.load - (i32.const 8) - ) - ) - (set_local $i1 - (i32.const 60) + (i32.load + (i32.const 8) ) (set_local $i1 (i32.load offset=60 (call_import $_pthread_self) ) ) + (set_local $i1 + (i32.const 60) + ) ) (return (get_local $i1) diff --git a/test/emcc_O2_hello_world.fromasm.imprecise b/test/emcc_O2_hello_world.fromasm.imprecise index f0a74eb1e..329833970 100644 --- a/test/emcc_O2_hello_world.fromasm.imprecise +++ b/test/emcc_O2_hello_world.fromasm.imprecise @@ -862,7 +862,8 @@ ) ) (if - (i32.eqz + (get_local $i10) + (set_local $i23 (get_local $i10) ) (block @@ -872,7 +873,8 @@ ) ) (if - (i32.eqz + (get_local $i15) + (set_local $i23 (get_local $i15) ) (block @@ -884,14 +886,8 @@ ) (br $while-out$6) ) - (set_local $i23 - (get_local $i15) - ) ) ) - (set_local $i23 - (get_local $i10) - ) ) (set_local $i10 (i32.sub @@ -983,8 +979,14 @@ ) ) (if - (i32.eqz - (get_local $i17) + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) ) (block (set_local $i15 @@ -999,15 +1001,7 @@ ) ) (if - (i32.eqz - (get_local $i10) - ) - (block - (set_local $i24 - (i32.const 0) - ) - (br $do-once$8) - ) + (get_local $i10) (block (set_local $i25 (get_local $i10) @@ -1016,14 +1010,12 @@ (get_local $i15) ) ) - ) - ) - (block - (set_local $i25 - (get_local $i17) - ) - (set_local $i26 - (get_local $i14) + (block + (set_local $i24 + (i32.const 0) + ) + (br $do-once$8) + ) ) ) ) @@ -1063,8 +1055,14 @@ ) ) (if - (i32.eqz - (get_local $i17) + (get_local $i17) + (block + (set_local $i25 + (get_local $i17) + ) + (set_local $i26 + (get_local $i14) + ) ) (block (set_local $i27 @@ -1075,14 +1073,6 @@ ) (br $while-out$10) ) - (block - (set_local $i25 - (get_local $i17) - ) - (set_local $i26 - (get_local $i14) - ) - ) ) (br $while-in$11) ) @@ -1688,23 +1678,7 @@ ) (block $label$break$L123 (if - (i32.eqz - (get_local $i4) - ) - (block - (set_local $i33 - (get_local $i14) - ) - (set_local $i34 - (i32.const 0) - ) - (set_local $i35 - (i32.const 0) - ) - (set_local $i36 - (i32.const 86) - ) - ) + (get_local $i4) (block (set_local $i12 (get_local $i14) @@ -1883,6 +1857,20 @@ (br $while-in$18) ) ) + (block + (set_local $i33 + (get_local $i14) + ) + (set_local $i34 + (i32.const 0) + ) + (set_local $i35 + (i32.const 0) + ) + (set_local $i36 + (i32.const 86) + ) + ) ) ) (if @@ -2045,17 +2033,7 @@ ) ) (if - (i32.eqz - (get_local $i42) - ) - (block - (set_local $i43 - (get_local $i33) - ) - (set_local $i44 - (get_local $i35) - ) - ) + (get_local $i42) (block (set_local $i37 (get_local $i33) @@ -2070,6 +2048,14 @@ (i32.const 90) ) ) + (block + (set_local $i43 + (get_local $i33) + ) + (set_local $i44 + (get_local $i35) + ) + ) ) ) ) @@ -2142,28 +2128,26 @@ ) ) (if - (i32.eqz - (get_local $i38) - ) + (get_local $i38) (block - (set_local $i43 + (set_local $i37 (get_local $i3) ) - (set_local $i44 + (set_local $i39 (get_local $i8) ) - (br $while-out$19) + (set_local $i36 + (i32.const 90) + ) ) (block - (set_local $i37 + (set_local $i43 (get_local $i3) ) - (set_local $i39 + (set_local $i44 (get_local $i8) ) - (set_local $i36 - (i32.const 90) - ) + (br $while-out$19) ) ) (br $while-in$20) @@ -2241,8 +2225,14 @@ ) ) (if - (i32.eqz - (get_local $i14) + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) ) (block (set_local $i4 @@ -2257,15 +2247,7 @@ ) ) (if - (i32.eqz - (get_local $i10) - ) - (block - (set_local $i45 - (i32.const 0) - ) - (br $do-once$21) - ) + (get_local $i10) (block (set_local $i46 (get_local $i10) @@ -2274,14 +2256,12 @@ (get_local $i4) ) ) - ) - ) - (block - (set_local $i46 - (get_local $i14) - ) - (set_local $i47 - (get_local $i2) + (block + (set_local $i45 + (i32.const 0) + ) + (br $do-once$21) + ) ) ) ) @@ -2321,8 +2301,14 @@ ) ) (if - (i32.eqz - (get_local $i14) + (get_local $i14) + (block + (set_local $i46 + (get_local $i14) + ) + (set_local $i47 + (get_local $i2) + ) ) (block (set_local $i48 @@ -2333,14 +2319,6 @@ ) (br $while-out$23) ) - (block - (set_local $i46 - (get_local $i14) - ) - (set_local $i47 - (get_local $i2) - ) - ) ) (br $while-in$24) ) @@ -2974,8 +2952,17 @@ ) ) (if - (i32.eqz - (get_local $i2) + (get_local $i2) + (block + (set_local $i4 + (i32.shl + (get_local $i4) + (i32.const 1) + ) + ) + (set_local $i7 + (get_local $i2) + ) ) (block (set_local $i54 @@ -2989,17 +2976,6 @@ ) (br $while-out$31) ) - (block - (set_local $i4 - (i32.shl - (get_local $i4) - (i32.const 1) - ) - ) - (set_local $i7 - (get_local $i2) - ) - ) ) (br $while-in$32) ) @@ -3345,15 +3321,14 @@ ) ) (if - (i32.eqz - (i32.and - (i32.add - (get_local $i53) - (i32.const -1) - ) + (i32.and + (i32.add (get_local $i53) + (i32.const -1) ) + (get_local $i53) ) + (call_import $_abort) (block (i32.store (i32.const 656) @@ -3393,7 +3368,6 @@ ) (br $do-once$33) ) - (call_import $_abort) ) ) ) @@ -3494,13 +3468,14 @@ ) (block $label$break$L257 (if - (i32.eqz - (i32.and - (i32.load - (i32.const 620) - ) - (i32.const 4) + (i32.and + (i32.load + (i32.const 620) ) + (i32.const 4) + ) + (set_local $i36 + (i32.const 190) ) (block (set_local $i52 @@ -3682,14 +3657,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $i45) - (get_local $i5) - ) - ) - (set_local $i62 - (get_local $i43) + (i32.and + (get_local $i45) + (get_local $i5) ) (set_local $i62 (i32.add @@ -3709,6 +3679,9 @@ ) ) ) + (set_local $i62 + (get_local $i43) + ) ) (set_local $i50 (i32.load @@ -3918,9 +3891,6 @@ (i32.const 190) ) ) - (set_local $i36 - (i32.const 190) - ) ) ) (if @@ -4282,13 +4252,14 @@ (i32.const 211) ) (if - (i32.eqz - (i32.and - (i32.load offset=12 - (get_local $i70) - ) - (i32.const 8) + (i32.and + (i32.load offset=12 + (get_local $i70) ) + (i32.const 8) + ) + (set_local $i71 + (i32.const 624) ) (block (i32.store @@ -4504,8 +4475,14 @@ ) ) (if - (i32.eqz - (get_local $i52) + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) ) (block (set_local $i50 @@ -4514,15 +4491,7 @@ ) ) (if - (i32.eqz - (get_local $i50) - ) - (block - (set_local $i72 - (i32.const 0) - ) - (br $do-once$53) - ) + (get_local $i50) (block (set_local $i73 (get_local $i50) @@ -4531,14 +4500,12 @@ (get_local $i45) ) ) - ) - ) - (block - (set_local $i73 - (get_local $i52) - ) - (set_local $i74 - (get_local $i5) + (block + (set_local $i72 + (i32.const 0) + ) + (br $do-once$53) + ) ) ) ) @@ -4578,8 +4545,14 @@ ) ) (if - (i32.eqz - (get_local $i52) + (get_local $i52) + (block + (set_local $i73 + (get_local $i52) + ) + (set_local $i74 + (get_local $i5) + ) ) (block (set_local $i75 @@ -4590,14 +4563,6 @@ ) (br $while-out$55) ) - (block - (set_local $i73 - (get_local $i52) - ) - (set_local $i74 - (get_local $i5) - ) - ) ) (br $while-in$56) ) @@ -5068,29 +5033,9 @@ ) (block $do-once$65 (if - (i32.eqz - (i32.and - (get_local $i54) - (get_local $i5) - ) - ) - (block - (i32.store - (i32.const 176) - (i32.or - (get_local $i54) - (get_local $i5) - ) - ) - (set_local $i80 - (i32.add - (get_local $i62) - (i32.const 8) - ) - ) - (set_local $i81 - (get_local $i62) - ) + (i32.and + (get_local $i54) + (get_local $i5) ) (block (set_local $i56 @@ -5123,6 +5068,24 @@ ) (call_import $_abort) ) + (block + (i32.store + (i32.const 176) + (i32.or + (get_local $i54) + (get_local $i5) + ) + ) + (set_local $i80 + (i32.add + (get_local $i62) + (i32.const 8) + ) + ) + (set_local $i81 + (get_local $i62) + ) + ) ) ) (i32.store @@ -5152,12 +5115,7 @@ ) (block $do-once$67 (if - (i32.eqz - (get_local $i5) - ) - (set_local $i82 - (i32.const 0) - ) + (get_local $i5) (block (if (i32.gt_u @@ -5259,6 +5217,9 @@ ) ) ) + (set_local $i82 + (i32.const 0) + ) ) ) (set_local $i5 @@ -5399,8 +5360,17 @@ ) ) (if - (i32.eqz - (get_local $i57) + (get_local $i57) + (block + (set_local $i50 + (i32.shl + (get_local $i50) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) ) (block (set_local $i84 @@ -5414,17 +5384,6 @@ ) (br $while-out$69) ) - (block - (set_local $i50 - (i32.shl - (get_local $i50) - (i32.const 1) - ) - ) - (set_local $i62 - (get_local $i57) - ) - ) ) (br $while-in$70) ) @@ -5560,9 +5519,6 @@ (get_local $i13) ) ) - (set_local $i71 - (i32.const 624) - ) ) ) (loop $while-out$71 $while-in$72 @@ -6190,8 +6146,17 @@ ) ) (if - (i32.eqz - (get_local $i57) + (get_local $i57) + (block + (set_local $i5 + (i32.shl + (get_local $i5) + (i32.const 1) + ) + ) + (set_local $i62 + (get_local $i57) + ) ) (block (set_local $i91 @@ -6205,17 +6170,6 @@ ) (br $while-out$75) ) - (block - (set_local $i5 - (i32.shl - (get_local $i5) - (i32.const 1) - ) - ) - (set_local $i62 - (get_local $i57) - ) - ) ) (br $while-in$76) ) @@ -6638,10 +6592,16 @@ ) (block $do-once$0 (if - (i32.eqz - (i32.and - (get_local $i4) - (i32.const 1) + (i32.and + (get_local $i4) + (i32.const 1) + ) + (block + (set_local $i12 + (get_local $i2) + ) + (set_local $i13 + (get_local $i5) ) ) (block @@ -6922,8 +6882,14 @@ ) ) (if - (i32.eqz - (get_local $i16) + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) ) (block (set_local $i17 @@ -6932,15 +6898,7 @@ ) ) (if - (i32.eqz - (get_local $i17) - ) - (block - (set_local $i18 - (i32.const 0) - ) - (br $do-once$2) - ) + (get_local $i17) (block (set_local $i19 (get_local $i17) @@ -6949,14 +6907,12 @@ (get_local $i14) ) ) - ) - ) - (block - (set_local $i19 - (get_local $i16) - ) - (set_local $i20 - (get_local $i11) + (block + (set_local $i18 + (i32.const 0) + ) + (br $do-once$2) + ) ) ) ) @@ -6996,8 +6952,14 @@ ) ) (if - (i32.eqz - (get_local $i16) + (get_local $i16) + (block + (set_local $i19 + (get_local $i16) + ) + (set_local $i20 + (get_local $i11) + ) ) (block (set_local $i21 @@ -7008,14 +6970,6 @@ ) (br $while-out$4) ) - (block - (set_local $i19 - (get_local $i16) - ) - (set_local $i20 - (get_local $i11) - ) - ) ) (br $while-in$5) ) @@ -7307,14 +7261,6 @@ ) ) ) - (block - (set_local $i12 - (get_local $i2) - ) - (set_local $i13 - (get_local $i5) - ) - ) ) ) (if @@ -7345,10 +7291,34 @@ (call_import $_abort) ) (if - (i32.eqz - (i32.and - (get_local $i2) - (i32.const 2) + (i32.and + (get_local $i2) + (i32.const 2) + ) + (block + (i32.store + (get_local $i5) + (i32.and + (get_local $i2) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $i12) + (i32.or + (get_local $i13) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $i12) + (get_local $i13) + ) + (get_local $i13) + ) + (set_local $i29 + (get_local $i13) ) ) (block @@ -7501,8 +7471,14 @@ ) ) (if - (i32.eqz - (get_local $i15) + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) ) (block (set_local $i1 @@ -7511,15 +7487,7 @@ ) ) (if - (i32.eqz - (get_local $i1) - ) - (block - (set_local $i23 - (i32.const 0) - ) - (br $do-once$10) - ) + (get_local $i1) (block (set_local $i24 (get_local $i1) @@ -7528,14 +7496,12 @@ (get_local $i20) ) ) - ) - ) - (block - (set_local $i24 - (get_local $i15) - ) - (set_local $i25 - (get_local $i19) + (block + (set_local $i23 + (i32.const 0) + ) + (br $do-once$10) + ) ) ) ) @@ -7575,8 +7541,14 @@ ) ) (if - (i32.eqz - (get_local $i15) + (get_local $i15) + (block + (set_local $i24 + (get_local $i15) + ) + (set_local $i25 + (get_local $i19) + ) ) (block (set_local $i26 @@ -7587,14 +7559,6 @@ ) (br $while-out$12) ) - (block - (set_local $i24 - (get_local $i15) - ) - (set_local $i25 - (get_local $i19) - ) - ) ) (br $while-in$13) ) @@ -8011,32 +7975,6 @@ ) ) ) - (block - (i32.store - (get_local $i5) - (i32.and - (get_local $i2) - (i32.const -2) - ) - ) - (i32.store offset=4 - (get_local $i12) - (i32.or - (get_local $i13) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (get_local $i12) - (get_local $i13) - ) - (get_local $i13) - ) - (set_local $i29 - (get_local $i13) - ) - ) ) (set_local $i13 (i32.shr_u @@ -8361,8 +8299,17 @@ ) ) (if - (i32.eqz - (get_local $i13) + (get_local $i13) + (block + (set_local $i31 + (i32.shl + (get_local $i31) + (i32.const 1) + ) + ) + (set_local $i2 + (get_local $i13) + ) ) (block (set_local $i35 @@ -8376,17 +8323,6 @@ ) (br $while-out$18) ) - (block - (set_local $i31 - (i32.shl - (get_local $i31) - (i32.const 1) - ) - ) - (set_local $i2 - (get_local $i13) - ) - ) ) (br $while-in$19) ) @@ -8525,13 +8461,11 @@ (get_local $i12) ) (if - (i32.eqz - (get_local $i12) - ) + (get_local $i12) + (return) (set_local $i37 (i32.const 632) ) - (return) ) (loop $while-out$20 $while-in$21 (set_local $i12 @@ -8540,16 +8474,14 @@ ) ) (if - (i32.eqz - (get_local $i12) - ) - (br $while-out$20) + (get_local $i12) (set_local $i37 (i32.add (get_local $i12) (i32.const 8) ) ) + (br $while-out$20) ) (br $while-in$21) ) @@ -8677,68 +8609,66 @@ ) (loop $while-out$0 $while-in$1 (if - (i32.eqz - (i32.load - (i32.const 8) - ) + (i32.load + (i32.const 8) ) (block + (call_import $_pthread_cleanup_push + (i32.const 4) + (get_local $i1) + ) (i32.store - (get_local $i5) + (get_local $i6) (i32.load (get_local $i2) ) ) (i32.store offset=4 - (get_local $i5) + (get_local $i6) (get_local $i12) ) (i32.store offset=8 - (get_local $i5) + (get_local $i6) (get_local $i7) ) - (set_local $i14 + (set_local $i11 (call $___syscall_ret (call_import $___syscall146 (i32.const 146) - (get_local $i5) + (get_local $i6) ) ) ) + (call_import $_pthread_cleanup_pop + (i32.const 0) + ) + (set_local $i14 + (get_local $i11) + ) ) (block - (call_import $_pthread_cleanup_push - (i32.const 4) - (get_local $i1) - ) (i32.store - (get_local $i6) + (get_local $i5) (i32.load (get_local $i2) ) ) (i32.store offset=4 - (get_local $i6) + (get_local $i5) (get_local $i12) ) (i32.store offset=8 - (get_local $i6) + (get_local $i5) (get_local $i7) ) - (set_local $i11 + (set_local $i14 (call $___syscall_ret (call_import $___syscall146 (i32.const 146) - (get_local $i6) + (get_local $i5) ) ) ) - (call_import $_pthread_cleanup_pop - (i32.const 0) - ) - (set_local $i14 - (get_local $i11) - ) ) ) (if @@ -9011,14 +8941,21 @@ ) ) (if - (i32.eqz - (get_local $i5) + (get_local $i5) + (block + (set_local $i6 + (get_local $i5) + ) + (set_local $i7 + (i32.const 5) + ) ) (if - (i32.eqz - (call $___towrite - (get_local $i3) - ) + (call $___towrite + (get_local $i3) + ) + (set_local $i8 + (i32.const 0) ) (block (set_local $i6 @@ -9030,17 +8967,6 @@ (i32.const 5) ) ) - (set_local $i8 - (i32.const 0) - ) - ) - (block - (set_local $i6 - (get_local $i5) - ) - (set_local $i7 - (i32.const 5) - ) ) ) (block $label$break$L5 @@ -9300,13 +9226,8 @@ ) (block (if - (i32.eqz - (i32.load - (i32.const 56) - ) - ) - (set_local $i5 - (i32.const 0) + (i32.load + (i32.const 56) ) (set_local $i5 (call $_fflush @@ -9315,6 +9236,9 @@ ) ) ) + (set_local $i5 + (i32.const 0) + ) ) (call_import $___lock (i32.const 36) @@ -9325,12 +9249,7 @@ ) ) (if - (i32.eqz - (get_local $i4) - ) - (set_local $i6 - (get_local $i5) - ) + (get_local $i4) (block (set_local $i3 (get_local $i4) @@ -9388,8 +9307,9 @@ ) ) (if - (i32.eqz - (get_local $i3) + (get_local $i3) + (set_local $i4 + (get_local $i8) ) (block (set_local $i6 @@ -9397,13 +9317,13 @@ ) (br $while-out$2) ) - (set_local $i4 - (get_local $i8) - ) ) (br $while-in$3) ) ) + (set_local $i6 + (get_local $i5) + ) ) (call_import $___unlock (i32.const 36) @@ -9434,19 +9354,9 @@ ) (block $label$break$L1 (if - (i32.eqz - (i32.and - (get_local $i2) - (i32.const 3) - ) - ) - (block - (set_local $i3 - (get_local $i1) - ) - (set_local $i4 - (i32.const 4) - ) + (i32.and + (get_local $i2) + (i32.const 3) ) (block (set_local $i5 @@ -9479,11 +9389,12 @@ (get_local $i8) ) (if - (i32.eqz - (i32.and - (get_local $i6) - (i32.const 3) - ) + (i32.and + (get_local $i6) + (i32.const 3) + ) + (set_local $i5 + (get_local $i8) ) (block (set_local $i3 @@ -9494,13 +9405,18 @@ ) (br $while-out$1) ) - (set_local $i5 - (get_local $i8) - ) ) (br $while-in$2) ) ) + (block + (set_local $i3 + (get_local $i1) + ) + (set_local $i4 + (i32.const 4) + ) + ) ) ) (if @@ -9519,25 +9435,17 @@ ) ) (if - (i32.eqz - (i32.and - (i32.xor - (i32.and - (get_local $i3) - (i32.const -2139062144) - ) - (i32.const -2139062144) - ) - (i32.add + (i32.and + (i32.xor + (i32.and (get_local $i3) - (i32.const -16843009) + (i32.const -2139062144) ) + (i32.const -2139062144) ) - ) - (set_local $i4 (i32.add - (get_local $i4) - (i32.const 4) + (get_local $i3) + (i32.const -16843009) ) ) (block @@ -9549,24 +9457,25 @@ ) (br $while-out$3) ) + (set_local $i4 + (i32.add + (get_local $i4) + (i32.const 4) + ) + ) ) (br $while-in$4) ) (if - (i32.eqz - (i32.shr_s - (i32.shl - (i32.and - (get_local $i9) - (i32.const 255) - ) - (i32.const 24) + (i32.shr_s + (i32.shl + (i32.and + (get_local $i9) + (i32.const 255) ) (i32.const 24) ) - ) - (set_local $i11 - (get_local $i10) + (i32.const 24) ) (block (set_local $i9 @@ -9580,10 +9489,11 @@ ) ) (if - (i32.eqz - (i32.load8_s - (get_local $i10) - ) + (i32.load8_s + (get_local $i10) + ) + (set_local $i9 + (get_local $i10) ) (block (set_local $i11 @@ -9591,13 +9501,13 @@ ) (br $while-out$5) ) - (set_local $i9 - (get_local $i10) - ) ) (br $while-in$6) ) ) + (set_local $i11 + (get_local $i10) + ) ) (set_local $i7 (get_local $i11) @@ -9660,14 +9570,21 @@ ) ) (if - (i32.eqz - (get_local $i7) + (get_local $i7) + (block + (set_local $i8 + (get_local $i7) + ) + (set_local $i9 + (i32.const 4) + ) ) (if - (i32.eqz - (call $___towrite - (get_local $i1) - ) + (call $___towrite + (get_local $i1) + ) + (set_local $i10 + (i32.const -1) ) (block (set_local $i8 @@ -9679,17 +9596,6 @@ (i32.const 4) ) ) - (set_local $i10 - (i32.const -1) - ) - ) - (block - (set_local $i8 - (get_local $i7) - ) - (set_local $i9 - (i32.const 4) - ) ) ) (block $do-once$0 @@ -10446,10 +10352,20 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $i3) - (i32.const 8) + (i32.and + (get_local $i3) + (i32.const 8) + ) + (block + (i32.store + (get_local $i1) + (i32.or + (get_local $i3) + (i32.const 32) + ) + ) + (set_local $i4 + (i32.const -1) ) ) (block @@ -10487,18 +10403,6 @@ (i32.const 0) ) ) - (block - (i32.store - (get_local $i1) - (i32.or - (get_local $i3) - (i32.const 32) - ) - ) - (set_local $i4 - (i32.const -1) - ) - ) ) (return (get_local $i4) @@ -10884,19 +10788,17 @@ (func $___errno_location (result i32) (local $i1 i32) (if - (i32.eqz - (i32.load - (i32.const 8) - ) - ) - (set_local $i1 - (i32.const 60) + (i32.load + (i32.const 8) ) (set_local $i1 (i32.load offset=60 (call_import $_pthread_self) ) ) + (set_local $i1 + (i32.const 60) + ) ) (return (get_local $i1) diff --git a/test/memorygrowth.fromasm b/test/memorygrowth.fromasm index f17a8a053..521a533ae 100644 --- a/test/memorygrowth.fromasm +++ b/test/memorygrowth.fromasm @@ -657,29 +657,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $e) - (get_local $g) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $e) - (get_local $g) - ) - ) - (set_local $w - (i32.add - (get_local $f) - (i32.const 8) - ) - ) - (set_local $x - (get_local $f) - ) + (i32.and + (get_local $e) + (get_local $g) ) (block (set_local $g @@ -711,6 +691,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $g) + ) + ) + (set_local $w + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $x + (get_local $f) + ) + ) ) (i32.store (get_local $w) @@ -756,12 +754,7 @@ ) ) (if - (i32.eqz - (get_local $t) - ) - (set_local $y - (get_local $d) - ) + (get_local $t) (block (set_local $i (i32.add @@ -897,7 +890,8 @@ ) ) (if - (i32.eqz + (get_local $j) + (set_local $B (get_local $j) ) (block @@ -907,7 +901,8 @@ ) ) (if - (i32.eqz + (get_local $f) + (set_local $B (get_local $f) ) (block @@ -919,14 +914,8 @@ ) (br $while-out$6) ) - (set_local $B - (get_local $f) - ) ) ) - (set_local $B - (get_local $j) - ) ) (set_local $j (i32.sub @@ -1018,8 +1007,14 @@ ) ) (if - (i32.eqz - (get_local $u) + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) ) (block (set_local $f @@ -1034,15 +1029,7 @@ ) ) (if - (i32.eqz - (get_local $j) - ) - (block - (set_local $C - (i32.const 0) - ) - (br $do-once$8) - ) + (get_local $j) (block (set_local $D (get_local $j) @@ -1051,14 +1038,12 @@ (get_local $f) ) ) - ) - ) - (block - (set_local $D - (get_local $u) - ) - (set_local $E - (get_local $q) + (block + (set_local $C + (i32.const 0) + ) + (br $do-once$8) + ) ) ) ) @@ -1098,8 +1083,14 @@ ) ) (if - (i32.eqz - (get_local $u) + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) ) (block (set_local $F @@ -1110,14 +1101,6 @@ ) (br $while-out$10) ) - (block - (set_local $D - (get_local $u) - ) - (set_local $E - (get_local $q) - ) - ) ) (br $while-in$11) ) @@ -1470,29 +1453,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $q) - (get_local $f) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $q) - (get_local $f) - ) - ) - (set_local $H - (i32.add - (get_local $s) - (i32.const 8) - ) - ) - (set_local $I - (get_local $s) - ) + (i32.and + (get_local $q) + (get_local $f) ) (block (set_local $f @@ -1524,6 +1487,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $q) + (get_local $f) + ) + ) + (set_local $H + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $I + (get_local $s) + ) + ) ) (i32.store (get_local $H) @@ -1567,6 +1548,9 @@ (get_local $p) ) ) + (set_local $y + (get_local $d) + ) ) ) (set_local $y @@ -1601,12 +1585,7 @@ ) ) (if - (i32.eqz - (get_local $q) - ) - (set_local $y - (get_local $e) - ) + (get_local $q) (block (set_local $f (i32.sub @@ -1621,12 +1600,7 @@ ) ) (if - (i32.eqz - (get_local $o) - ) - (set_local $J - (i32.const 0) - ) + (get_local $o) (if (i32.gt_u (get_local $e) @@ -1725,6 +1699,9 @@ ) ) ) + (set_local $J + (i32.const 0) + ) ) (set_local $t (i32.load @@ -1739,23 +1716,7 @@ ) (block $label$break$a (if - (i32.eqz - (get_local $t) - ) - (block - (set_local $K - (get_local $f) - ) - (set_local $L - (i32.const 0) - ) - (set_local $M - (i32.const 0) - ) - (set_local $N - (i32.const 86) - ) - ) + (get_local $t) (block (set_local $u (get_local $f) @@ -1934,6 +1895,20 @@ (br $while-in$18) ) ) + (block + (set_local $K + (get_local $f) + ) + (set_local $L + (i32.const 0) + ) + (set_local $M + (i32.const 0) + ) + (set_local $N + (i32.const 86) + ) + ) ) ) (if @@ -2099,17 +2074,7 @@ ) ) (if - (i32.eqz - (get_local $T) - ) - (block - (set_local $U - (get_local $K) - ) - (set_local $V - (get_local $M) - ) - ) + (get_local $T) (block (set_local $O (get_local $K) @@ -2124,6 +2089,14 @@ (i32.const 90) ) ) + (block + (set_local $U + (get_local $K) + ) + (set_local $V + (get_local $M) + ) + ) ) ) ) @@ -2196,40 +2169,33 @@ ) ) (if - (i32.eqz - (get_local $P) - ) + (get_local $P) (block - (set_local $U + (set_local $O (get_local $g) ) - (set_local $V + (set_local $Q (get_local $i) ) - (br $while-out$19) + (set_local $N + (i32.const 90) + ) ) (block - (set_local $O + (set_local $U (get_local $g) ) - (set_local $Q + (set_local $V (get_local $i) ) - (set_local $N - (i32.const 90) - ) + (br $while-out$19) ) ) (br $while-in$20) ) ) (if - (i32.eqz - (get_local $V) - ) - (set_local $y - (get_local $e) - ) + (get_local $V) (if (i32.lt_u (get_local $U) @@ -2295,8 +2261,14 @@ ) ) (if - (i32.eqz - (get_local $f) + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) ) (block (set_local $t @@ -2311,15 +2283,7 @@ ) ) (if - (i32.eqz - (get_local $j) - ) - (block - (set_local $W - (i32.const 0) - ) - (br $do-once$21) - ) + (get_local $j) (block (set_local $X (get_local $j) @@ -2328,14 +2292,12 @@ (get_local $t) ) ) - ) - ) - (block - (set_local $X - (get_local $f) - ) - (set_local $Y - (get_local $d) + (block + (set_local $W + (i32.const 0) + ) + (br $do-once$21) + ) ) ) ) @@ -2375,8 +2337,14 @@ ) ) (if - (i32.eqz - (get_local $f) + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) ) (block (set_local $Z @@ -2387,14 +2355,6 @@ ) (br $while-out$23) ) - (block - (set_local $X - (get_local $f) - ) - (set_local $Y - (get_local $d) - ) - ) ) (br $while-in$24) ) @@ -2741,29 +2701,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $s) - (get_local $d) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $s) - (get_local $d) - ) - ) - (set_local $$ - (i32.add - (get_local $g) - (i32.const 8) - ) - ) - (set_local $aa - (get_local $g) - ) + (i32.and + (get_local $s) + (get_local $d) ) (block (set_local $d @@ -2795,6 +2735,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $s) + (get_local $d) + ) + ) + (set_local $$ + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $aa + (get_local $g) + ) + ) ) (i32.store (get_local $$) @@ -2822,12 +2780,7 @@ ) ) (if - (i32.eqz - (get_local $g) - ) - (set_local $ba - (i32.const 0) - ) + (get_local $g) (if (i32.gt_u (get_local $U) @@ -2926,6 +2879,9 @@ ) ) ) + (set_local $ba + (i32.const 0) + ) ) (set_local $t (i32.add @@ -3065,8 +3021,17 @@ ) ) (if - (i32.eqz - (get_local $s) + (get_local $s) + (block + (set_local $q + (i32.shl + (get_local $q) + (i32.const 1) + ) + ) + (set_local $d + (get_local $s) + ) ) (block (set_local $da @@ -3080,17 +3045,6 @@ ) (br $while-out$31) ) - (block - (set_local $q - (i32.shl - (get_local $q) - (i32.const 1) - ) - ) - (set_local $d - (get_local $s) - ) - ) ) (br $while-in$32) ) @@ -3209,8 +3163,14 @@ (get_local $e) ) ) + (set_local $y + (get_local $e) + ) ) ) + (set_local $y + (get_local $e) + ) ) ) ) @@ -3546,13 +3506,14 @@ ) (block $label$break$b (if - (i32.eqz - (i32.and - (i32.load - (i32.const 1652) - ) - (i32.const 4) + (i32.and + (i32.load + (i32.const 1652) ) + (i32.const 4) + ) + (set_local $N + (i32.const 188) ) (block (set_local $U @@ -3562,12 +3523,7 @@ ) (block $label$break$c (if - (i32.eqz - (get_local $U) - ) - (set_local $N - (i32.const 171) - ) + (get_local $U) (block (set_local $aa (i32.const 1656) @@ -3697,6 +3653,9 @@ ) ) ) + (set_local $N + (i32.const 171) + ) ) ) (block $do-once$37 @@ -3732,14 +3691,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $$) - (get_local $e) - ) - ) - (set_local $la - (get_local $c) + (i32.and + (get_local $$) + (get_local $e) ) (set_local $la (i32.add @@ -3759,6 +3713,9 @@ ) ) ) + (set_local $la + (get_local $c) + ) ) (set_local $aa (i32.load @@ -3968,9 +3925,6 @@ (i32.const 188) ) ) - (set_local $N - (i32.const 188) - ) ) ) (if @@ -4080,159 +4034,7 @@ ) (block $do-once$42 (if - (i32.eqz - (get_local $ja) - ) - (block - (set_local $ma - (i32.load - (i32.const 1224) - ) - ) - (if - (i32.or - (i32.eq - (get_local $ma) - (i32.const 0) - ) - (i32.lt_u - (get_local $ha) - (get_local $ma) - ) - ) - (i32.store - (i32.const 1224) - (get_local $ha) - ) - ) - (i32.store - (i32.const 1656) - (get_local $ha) - ) - (i32.store - (i32.const 1660) - (get_local $ia) - ) - (i32.store - (i32.const 1668) - (i32.const 0) - ) - (i32.store - (i32.const 1244) - (i32.load - (i32.const 1680) - ) - ) - (i32.store - (i32.const 1240) - (i32.const -1) - ) - (set_local $ma - (i32.const 0) - ) - (loop $do-out$44 $do-in$45 - (set_local $c - (i32.add - (i32.const 1248) - (i32.shl - (i32.shl - (get_local $ma) - (i32.const 1) - ) - (i32.const 2) - ) - ) - ) - (i32.store offset=12 - (get_local $c) - (get_local $c) - ) - (i32.store offset=8 - (get_local $c) - (get_local $c) - ) - (set_local $ma - (i32.add - (get_local $ma) - (i32.const 1) - ) - ) - (br_if $do-in$45 - (i32.ne - (get_local $ma) - (i32.const 32) - ) - ) - ) - (set_local $ma - (i32.add - (get_local $ha) - (i32.const 8) - ) - ) - (set_local $c - (if - (i32.eq - (i32.and - (get_local $ma) - (i32.const 7) - ) - (i32.const 0) - ) - (i32.const 0) - (i32.and - (i32.sub - (i32.const 0) - (get_local $ma) - ) - (i32.const 7) - ) - ) - ) - (set_local $ma - (i32.add - (get_local $ha) - (get_local $c) - ) - ) - (set_local $ka - (i32.sub - (i32.add - (get_local $ia) - (i32.const -40) - ) - (get_local $c) - ) - ) - (i32.store - (i32.const 1232) - (get_local $ma) - ) - (i32.store - (i32.const 1220) - (get_local $ka) - ) - (i32.store offset=4 - (get_local $ma) - (i32.or - (get_local $ka) - (i32.const 1) - ) - ) - (i32.store offset=4 - (i32.add - (get_local $ma) - (get_local $ka) - ) - (i32.const 40) - ) - (i32.store - (i32.const 1236) - (i32.load - (i32.const 1696) - ) - ) - ) + (get_local $ja) (block (set_local $ka (i32.const 1656) @@ -4478,13 +4280,14 @@ (i32.const 209) ) (if - (i32.eqz - (i32.and - (i32.load offset=12 - (get_local $va) - ) - (i32.const 8) + (i32.and + (i32.load offset=12 + (get_local $va) ) + (i32.const 8) + ) + (set_local $wa + (i32.const 1656) ) (block (i32.store @@ -4851,8 +4654,14 @@ ) ) (if - (i32.eqz - (get_local $ba) + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) ) (block (set_local $W @@ -4861,15 +4670,7 @@ ) ) (if - (i32.eqz - (get_local $W) - ) - (block - (set_local $ya - (i32.const 0) - ) - (br $do-once$57) - ) + (get_local $W) (block (set_local $za (get_local $W) @@ -4878,14 +4679,12 @@ (get_local $U) ) ) - ) - ) - (block - (set_local $za - (get_local $ba) - ) - (set_local $Aa - (get_local $aa) + (block + (set_local $ya + (i32.const 0) + ) + (br $do-once$57) + ) ) ) ) @@ -4925,8 +4724,14 @@ ) ) (if - (i32.eqz - (get_local $ba) + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) ) (block (set_local $Ba @@ -4937,14 +4742,6 @@ ) (br $while-out$59) ) - (block - (set_local $za - (get_local $ba) - ) - (set_local $Aa - (get_local $aa) - ) - ) ) (br $while-in$60) ) @@ -5289,29 +5086,9 @@ ) (block $do-once$65 (if - (i32.eqz - (i32.and - (get_local $V) - (get_local $e) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $V) - (get_local $e) - ) - ) - (set_local $Fa - (i32.add - (get_local $la) - (i32.const 8) - ) - ) - (set_local $Ga - (get_local $la) - ) + (i32.and + (get_local $V) + (get_local $e) ) (block (set_local $fa @@ -5344,6 +5121,24 @@ ) (call_import $qa) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $V) + (get_local $e) + ) + ) + (set_local $Fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $Ga + (get_local $la) + ) + ) ) ) (i32.store @@ -5373,12 +5168,7 @@ ) (block $do-once$67 (if - (i32.eqz - (get_local $e) - ) - (set_local $Ha - (i32.const 0) - ) + (get_local $e) (block (if (i32.gt_u @@ -5480,6 +5270,9 @@ ) ) ) + (set_local $Ha + (i32.const 0) + ) ) ) (set_local $e @@ -5620,8 +5413,17 @@ ) ) (if - (i32.eqz - (get_local $ga) + (get_local $ga) + (block + (set_local $aa + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + (set_local $la + (get_local $ga) + ) ) (block (set_local $Ja @@ -5635,17 +5437,6 @@ ) (br $while-out$69) ) - (block - (set_local $aa - (i32.shl - (get_local $aa) - (i32.const 1) - ) - ) - (set_local $la - (get_local $ga) - ) - ) ) (br $while-in$70) ) @@ -5760,9 +5551,6 @@ (get_local $p) ) ) - (set_local $wa - (i32.const 1656) - ) ) ) (loop $while-out$71 $while-in$72 @@ -6075,29 +5863,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $la) - (get_local $ga) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $la) - (get_local $ga) - ) - ) - (set_local $Ma - (i32.add - (get_local $c) - (i32.const 8) - ) - ) - (set_local $Na - (get_local $c) - ) + (i32.and + (get_local $la) + (get_local $ga) ) (block (set_local $ga @@ -6129,6 +5897,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $la) + (get_local $ga) + ) + ) + (set_local $Ma + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $Na + (get_local $c) + ) + ) ) (i32.store (get_local $Ma) @@ -6156,12 +5942,7 @@ ) ) (if - (i32.eqz - (get_local $c) - ) - (set_local $Oa - (i32.const 0) - ) + (get_local $c) (if (i32.gt_u (get_local $ka) @@ -6260,6 +6041,9 @@ ) ) ) + (set_local $Oa + (i32.const 0) + ) ) (set_local $e (i32.add @@ -6393,8 +6177,17 @@ ) ) (if - (i32.eqz - (get_local $la) + (get_local $la) + (block + (set_local $ma + (i32.shl + (get_local $ma) + (i32.const 1) + ) + ) + (set_local $ga + (get_local $la) + ) ) (block (set_local $Ra @@ -6408,17 +6201,6 @@ ) (br $while-out$75) ) - (block - (set_local $ma - (i32.shl - (get_local $ma) - (i32.const 1) - ) - ) - (set_local $ga - (get_local $la) - ) - ) ) (br $while-in$76) ) @@ -6519,6 +6301,156 @@ ) ) ) + (block + (set_local $ma + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.or + (i32.eq + (get_local $ma) + (i32.const 0) + ) + (i32.lt_u + (get_local $ha) + (get_local $ma) + ) + ) + (i32.store + (i32.const 1224) + (get_local $ha) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $ma + (i32.const 0) + ) + (loop $do-out$44 $do-in$45 + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store offset=12 + (get_local $c) + (get_local $c) + ) + (i32.store offset=8 + (get_local $c) + (get_local $c) + ) + (set_local $ma + (i32.add + (get_local $ma) + (i32.const 1) + ) + ) + (br_if $do-in$45 + (i32.ne + (get_local $ma) + (i32.const 32) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $ka + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $ka) + ) + (i32.store offset=4 + (get_local $ma) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $ma) + (get_local $ka) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) ) ) (set_local $ja @@ -6702,10 +6634,16 @@ ) (block $do-once$0 (if - (i32.eqz - (i32.and - (get_local $d) - (i32.const 1) + (i32.and + (get_local $d) + (i32.const 1) + ) + (block + (set_local $m + (get_local $b) + ) + (set_local $n + (get_local $e) ) ) (block @@ -6986,8 +6924,14 @@ ) ) (if - (i32.eqz - (get_local $q) + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) ) (block (set_local $r @@ -6996,15 +6940,7 @@ ) ) (if - (i32.eqz - (get_local $r) - ) - (block - (set_local $s - (i32.const 0) - ) - (br $do-once$2) - ) + (get_local $r) (block (set_local $t (get_local $r) @@ -7013,14 +6949,12 @@ (get_local $o) ) ) - ) - ) - (block - (set_local $t - (get_local $q) - ) - (set_local $u - (get_local $l) + (block + (set_local $s + (i32.const 0) + ) + (br $do-once$2) + ) ) ) ) @@ -7060,8 +6994,14 @@ ) ) (if - (i32.eqz - (get_local $q) + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) ) (block (set_local $v @@ -7072,14 +7012,6 @@ ) (br $while-out$4) ) - (block - (set_local $t - (get_local $q) - ) - (set_local $u - (get_local $l) - ) - ) ) (br $while-in$5) ) @@ -7162,17 +7094,7 @@ ) ) (if - (i32.eqz - (get_local $g) - ) - (block - (set_local $m - (get_local $h) - ) - (set_local $n - (get_local $i) - ) - ) + (get_local $g) (block (set_local $j (i32.load offset=28 @@ -7334,17 +7256,7 @@ ) ) (if - (i32.eqz - (get_local $o) - ) - (block - (set_local $m - (get_local $h) - ) - (set_local $n - (get_local $i) - ) - ) + (get_local $o) (if (i32.lt_u (get_local $o) @@ -7371,16 +7283,24 @@ (br $do-once$0) ) ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + ) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) ) ) - ) - ) - (block - (set_local $m - (get_local $b) - ) - (set_local $n - (get_local $e) ) ) ) @@ -7413,10 +7333,34 @@ (call_import $qa) ) (if - (i32.eqz - (i32.and - (get_local $b) - (i32.const 2) + (i32.and + (get_local $b) + (i32.const 2) + ) + (block + (i32.store + (get_local $e) + (i32.and + (get_local $b) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $m) + (i32.or + (get_local $n) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $n) + ) + (get_local $n) + ) + (set_local $D + (get_local $n) ) ) (block @@ -7692,8 +7636,14 @@ ) ) (if - (i32.eqz - (get_local $p) + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) ) (block (set_local $a @@ -7702,15 +7652,7 @@ ) ) (if - (i32.eqz - (get_local $a) - ) - (block - (set_local $y - (i32.const 0) - ) - (br $do-once$10) - ) + (get_local $a) (block (set_local $z (get_local $a) @@ -7719,14 +7661,12 @@ (get_local $u) ) ) - ) - ) - (block - (set_local $z - (get_local $p) - ) - (set_local $A - (get_local $t) + (block + (set_local $y + (i32.const 0) + ) + (br $do-once$10) + ) ) ) ) @@ -7766,8 +7706,14 @@ ) ) (if - (i32.eqz - (get_local $p) + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) ) (block (set_local $B @@ -7778,14 +7724,6 @@ ) (br $while-out$12) ) - (block - (set_local $z - (get_local $p) - ) - (set_local $A - (get_local $t) - ) - ) ) (br $while-in$13) ) @@ -8079,32 +8017,6 @@ ) ) ) - (block - (i32.store - (get_local $e) - (i32.and - (get_local $b) - (i32.const -2) - ) - ) - (i32.store offset=4 - (get_local $m) - (i32.or - (get_local $n) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (get_local $m) - (get_local $n) - ) - (get_local $n) - ) - (set_local $D - (get_local $n) - ) - ) ) (set_local $n (i32.shr_u @@ -8142,29 +8054,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $e) - (get_local $s) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $e) - (get_local $s) - ) - ) - (set_local $E - (i32.add - (get_local $b) - (i32.const 8) - ) - ) - (set_local $F - (get_local $b) - ) + (i32.and + (get_local $e) + (get_local $s) ) (block (set_local $s @@ -8196,6 +8088,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $s) + ) + ) + (set_local $E + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $F + (get_local $b) + ) + ) ) (i32.store (get_local $E) @@ -8223,12 +8133,7 @@ ) ) (if - (i32.eqz - (get_local $b) - ) - (set_local $G - (i32.const 0) - ) + (get_local $b) (if (i32.gt_u (get_local $D) @@ -8327,6 +8232,9 @@ ) ) ) + (set_local $G + (i32.const 0) + ) ) (set_local $s (i32.add @@ -8362,36 +8270,9 @@ ) (block $do-once$16 (if - (i32.eqz - (i32.and - (get_local $E) - (get_local $e) - ) - ) - (block - (i32.store - (i32.const 1212) - (i32.or - (get_local $E) - (get_local $e) - ) - ) - (i32.store - (get_local $s) - (get_local $m) - ) - (i32.store offset=24 - (get_local $m) - (get_local $s) - ) - (i32.store offset=12 - (get_local $m) - (get_local $m) - ) - (i32.store offset=8 - (get_local $m) - (get_local $m) - ) + (i32.and + (get_local $E) + (get_local $e) ) (block (set_local $F @@ -8460,8 +8341,17 @@ ) ) (if - (i32.eqz - (get_local $y) + (get_local $y) + (block + (set_local $F + (i32.shl + (get_local $F) + (i32.const 1) + ) + ) + (set_local $b + (get_local $y) + ) ) (block (set_local $J @@ -8475,17 +8365,6 @@ ) (br $while-out$18) ) - (block - (set_local $F - (i32.shl - (get_local $F) - (i32.const 1) - ) - ) - (set_local $b - (get_local $y) - ) - ) ) (br $while-in$19) ) @@ -8584,6 +8463,31 @@ ) ) ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $E) + (get_local $e) + ) + ) + (i32.store + (get_local $s) + (get_local $m) + ) + (i32.store offset=24 + (get_local $m) + (get_local $s) + ) + (i32.store offset=12 + (get_local $m) + (get_local $m) + ) + (i32.store offset=8 + (get_local $m) + (get_local $m) + ) + ) ) ) (set_local $m @@ -8599,13 +8503,11 @@ (get_local $m) ) (if - (i32.eqz - (get_local $m) - ) + (get_local $m) + (return) (set_local $L (i32.const 1664) ) - (return) ) (loop $while-out$20 $while-in$21 (set_local $m @@ -8614,16 +8516,14 @@ ) ) (if - (i32.eqz - (get_local $m) - ) - (br $while-out$20) + (get_local $m) (set_local $L (i32.add (get_local $m) (i32.const 8) ) ) + (br $while-out$20) ) (br $while-in$21) ) @@ -8751,68 +8651,66 @@ ) (loop $while-out$0 $while-in$1 (if - (i32.eqz - (i32.load - (i32.const 1160) - ) + (i32.load + (i32.const 1160) ) (block + (call_import $ra + (i32.const 1) + (get_local $a) + ) (i32.store - (get_local $e) + (get_local $f) (i32.load (get_local $b) ) ) (i32.store offset=4 - (get_local $e) + (get_local $f) (get_local $m) ) (i32.store offset=8 - (get_local $e) + (get_local $f) (get_local $g) ) - (set_local $o + (set_local $l (call $Pa (call_import $ya (i32.const 146) - (get_local $e) + (get_local $f) ) ) ) + (call_import $oa + (i32.const 0) + ) + (set_local $o + (get_local $l) + ) ) (block - (call_import $ra - (i32.const 1) - (get_local $a) - ) (i32.store - (get_local $f) + (get_local $e) (i32.load (get_local $b) ) ) (i32.store offset=4 - (get_local $f) + (get_local $e) (get_local $m) ) (i32.store offset=8 - (get_local $f) + (get_local $e) (get_local $g) ) - (set_local $l + (set_local $o (call $Pa (call_import $ya (i32.const 146) - (get_local $f) + (get_local $e) ) ) ) - (call_import $oa - (i32.const 0) - ) - (set_local $o - (get_local $l) - ) ) ) (if @@ -9085,14 +8983,21 @@ ) ) (if - (i32.eqz - (get_local $e) + (get_local $e) + (block + (set_local $f + (get_local $e) + ) + (set_local $g + (i32.const 5) + ) ) (if - (i32.eqz - (call $Xa - (get_local $c) - ) + (call $Xa + (get_local $c) + ) + (set_local $h + (i32.const 0) ) (block (set_local $f @@ -9104,17 +9009,6 @@ (i32.const 5) ) ) - (set_local $h - (i32.const 0) - ) - ) - (block - (set_local $f - (get_local $e) - ) - (set_local $g - (i32.const 5) - ) ) ) (block $label$break$a @@ -9332,19 +9226,9 @@ ) (block $label$break$a (if - (i32.eqz - (i32.and - (get_local $b) - (i32.const 3) - ) - ) - (block - (set_local $c - (get_local $a) - ) - (set_local $d - (i32.const 4) - ) + (i32.and + (get_local $b) + (i32.const 3) ) (block (set_local $e @@ -9377,11 +9261,12 @@ (get_local $h) ) (if - (i32.eqz - (i32.and - (get_local $f) - (i32.const 3) - ) + (i32.and + (get_local $f) + (i32.const 3) + ) + (set_local $e + (get_local $h) ) (block (set_local $c @@ -9392,13 +9277,18 @@ ) (br $while-out$1) ) - (set_local $e - (get_local $h) - ) ) (br $while-in$2) ) ) + (block + (set_local $c + (get_local $a) + ) + (set_local $d + (i32.const 4) + ) + ) ) ) (if @@ -9417,25 +9307,17 @@ ) ) (if - (i32.eqz - (i32.and - (i32.xor - (i32.and - (get_local $c) - (i32.const -2139062144) - ) - (i32.const -2139062144) - ) - (i32.add + (i32.and + (i32.xor + (i32.and (get_local $c) - (i32.const -16843009) + (i32.const -2139062144) ) + (i32.const -2139062144) ) - ) - (set_local $d (i32.add - (get_local $d) - (i32.const 4) + (get_local $c) + (i32.const -16843009) ) ) (block @@ -9447,24 +9329,25 @@ ) (br $while-out$3) ) + (set_local $d + (i32.add + (get_local $d) + (i32.const 4) + ) + ) ) (br $while-in$4) ) (if - (i32.eqz - (i32.shr_s - (i32.shl - (i32.and - (get_local $j) - (i32.const 255) - ) - (i32.const 24) + (i32.shr_s + (i32.shl + (i32.and + (get_local $j) + (i32.const 255) ) (i32.const 24) ) - ) - (set_local $m - (get_local $l) + (i32.const 24) ) (block (set_local $j @@ -9478,10 +9361,11 @@ ) ) (if - (i32.eqz - (i32.load8_s - (get_local $l) - ) + (i32.load8_s + (get_local $l) + ) + (set_local $j + (get_local $l) ) (block (set_local $m @@ -9489,13 +9373,13 @@ ) (br $while-out$5) ) - (set_local $j - (get_local $l) - ) ) (br $while-in$6) ) ) + (set_local $m + (get_local $l) + ) ) (set_local $g (get_local $m) @@ -9519,19 +9403,57 @@ (local $d i32) (block $do-once$0 (if - (i32.eqz - (get_local $a) - ) + (get_local $a) (block (if - (i32.eqz - (i32.load - (i32.const 1140) + (i32.le_s + (i32.load offset=76 + (get_local $a) ) + (i32.const -1) ) - (set_local $b + (block + (set_local $h + (call $$a + (get_local $a) + ) + ) + (br $do-once$0) + ) + ) + (set_local $c + (i32.eq + (call $Ya + (get_local $a) + ) (i32.const 0) ) + ) + (set_local $e + (call $$a + (get_local $a) + ) + ) + (if + (get_local $c) + (set_local $h + (get_local $e) + ) + (block + (call $Ta + (get_local $a) + ) + (set_local $h + (get_local $e) + ) + ) + ) + ) + (block + (if + (i32.load + (i32.const 1140) + ) (set_local $b (call $_a (i32.load @@ -9539,6 +9461,9 @@ ) ) ) + (set_local $b + (i32.const 0) + ) ) (call_import $pa (i32.const 1188) @@ -9549,12 +9474,7 @@ ) ) (if - (i32.eqz - (get_local $c) - ) - (set_local $d - (get_local $b) - ) + (get_local $c) (block (set_local $e (get_local $c) @@ -9612,8 +9532,9 @@ ) ) (if - (i32.eqz - (get_local $e) + (get_local $e) + (set_local $c + (get_local $g) ) (block (set_local $d @@ -9621,13 +9542,13 @@ ) (br $while-out$2) ) - (set_local $c - (get_local $g) - ) ) (br $while-in$3) ) ) + (set_local $d + (get_local $b) + ) ) (call_import $xa (i32.const 1188) @@ -9636,51 +9557,6 @@ (get_local $d) ) ) - (block - (if - (i32.le_s - (i32.load offset=76 - (get_local $a) - ) - (i32.const -1) - ) - (block - (set_local $h - (call $$a - (get_local $a) - ) - ) - (br $do-once$0) - ) - ) - (set_local $c - (i32.eq - (call $Ya - (get_local $a) - ) - (i32.const 0) - ) - ) - (set_local $e - (call $$a - (get_local $a) - ) - ) - (if - (get_local $c) - (set_local $h - (get_local $e) - ) - (block - (call $Ta - (get_local $a) - ) - (set_local $h - (get_local $e) - ) - ) - ) - ) ) ) (return @@ -9736,14 +9612,21 @@ ) ) (if - (i32.eqz - (get_local $g) + (get_local $g) + (block + (set_local $h + (get_local $g) + ) + (set_local $j + (i32.const 4) + ) ) (if - (i32.eqz - (call $Xa - (get_local $a) - ) + (call $Xa + (get_local $a) + ) + (set_local $m + (i32.const -1) ) (block (set_local $h @@ -9755,17 +9638,6 @@ (i32.const 4) ) ) - (set_local $m - (i32.const -1) - ) - ) - (block - (set_local $h - (get_local $g) - ) - (set_local $j - (i32.const 4) - ) ) ) (block $do-once$0 @@ -9908,17 +9780,15 @@ (i32.const 0) ) (if - (i32.eqz - (i32.load - (get_local $b) - ) - ) - (set_local $d - (i32.const -1) + (i32.load + (get_local $b) ) (set_local $e (i32.const 3) ) + (set_local $d + (i32.const -1) + ) ) ) (set_local $e @@ -10447,10 +10317,20 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $c) - (i32.const 8) + (i32.and + (get_local $c) + (i32.const 8) + ) + (block + (i32.store + (get_local $a) + (i32.or + (get_local $c) + (i32.const 32) + ) + ) + (set_local $d + (i32.const -1) ) ) (block @@ -10488,18 +10368,6 @@ (i32.const 0) ) ) - (block - (i32.store - (get_local $a) - (i32.or - (get_local $c) - (i32.const 32) - ) - ) - (set_local $d - (i32.const -1) - ) - ) ) (return (get_local $d) @@ -10920,13 +10788,8 @@ (local $a i32) (local $b i32) (if - (i32.eqz - (i32.load - (i32.const 1160) - ) - ) - (set_local $a - (i32.const 1204) + (i32.load + (i32.const 1160) ) (block (set_local $b @@ -10941,6 +10804,9 @@ ) ) ) + (set_local $a + (i32.const 1204) + ) ) (return (get_local $a) diff --git a/test/memorygrowth.fromasm.imprecise b/test/memorygrowth.fromasm.imprecise index f17a8a053..521a533ae 100644 --- a/test/memorygrowth.fromasm.imprecise +++ b/test/memorygrowth.fromasm.imprecise @@ -657,29 +657,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $e) - (get_local $g) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $e) - (get_local $g) - ) - ) - (set_local $w - (i32.add - (get_local $f) - (i32.const 8) - ) - ) - (set_local $x - (get_local $f) - ) + (i32.and + (get_local $e) + (get_local $g) ) (block (set_local $g @@ -711,6 +691,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $g) + ) + ) + (set_local $w + (i32.add + (get_local $f) + (i32.const 8) + ) + ) + (set_local $x + (get_local $f) + ) + ) ) (i32.store (get_local $w) @@ -756,12 +754,7 @@ ) ) (if - (i32.eqz - (get_local $t) - ) - (set_local $y - (get_local $d) - ) + (get_local $t) (block (set_local $i (i32.add @@ -897,7 +890,8 @@ ) ) (if - (i32.eqz + (get_local $j) + (set_local $B (get_local $j) ) (block @@ -907,7 +901,8 @@ ) ) (if - (i32.eqz + (get_local $f) + (set_local $B (get_local $f) ) (block @@ -919,14 +914,8 @@ ) (br $while-out$6) ) - (set_local $B - (get_local $f) - ) ) ) - (set_local $B - (get_local $j) - ) ) (set_local $j (i32.sub @@ -1018,8 +1007,14 @@ ) ) (if - (i32.eqz - (get_local $u) + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) ) (block (set_local $f @@ -1034,15 +1029,7 @@ ) ) (if - (i32.eqz - (get_local $j) - ) - (block - (set_local $C - (i32.const 0) - ) - (br $do-once$8) - ) + (get_local $j) (block (set_local $D (get_local $j) @@ -1051,14 +1038,12 @@ (get_local $f) ) ) - ) - ) - (block - (set_local $D - (get_local $u) - ) - (set_local $E - (get_local $q) + (block + (set_local $C + (i32.const 0) + ) + (br $do-once$8) + ) ) ) ) @@ -1098,8 +1083,14 @@ ) ) (if - (i32.eqz - (get_local $u) + (get_local $u) + (block + (set_local $D + (get_local $u) + ) + (set_local $E + (get_local $q) + ) ) (block (set_local $F @@ -1110,14 +1101,6 @@ ) (br $while-out$10) ) - (block - (set_local $D - (get_local $u) - ) - (set_local $E - (get_local $q) - ) - ) ) (br $while-in$11) ) @@ -1470,29 +1453,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $q) - (get_local $f) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $q) - (get_local $f) - ) - ) - (set_local $H - (i32.add - (get_local $s) - (i32.const 8) - ) - ) - (set_local $I - (get_local $s) - ) + (i32.and + (get_local $q) + (get_local $f) ) (block (set_local $f @@ -1524,6 +1487,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $q) + (get_local $f) + ) + ) + (set_local $H + (i32.add + (get_local $s) + (i32.const 8) + ) + ) + (set_local $I + (get_local $s) + ) + ) ) (i32.store (get_local $H) @@ -1567,6 +1548,9 @@ (get_local $p) ) ) + (set_local $y + (get_local $d) + ) ) ) (set_local $y @@ -1601,12 +1585,7 @@ ) ) (if - (i32.eqz - (get_local $q) - ) - (set_local $y - (get_local $e) - ) + (get_local $q) (block (set_local $f (i32.sub @@ -1621,12 +1600,7 @@ ) ) (if - (i32.eqz - (get_local $o) - ) - (set_local $J - (i32.const 0) - ) + (get_local $o) (if (i32.gt_u (get_local $e) @@ -1725,6 +1699,9 @@ ) ) ) + (set_local $J + (i32.const 0) + ) ) (set_local $t (i32.load @@ -1739,23 +1716,7 @@ ) (block $label$break$a (if - (i32.eqz - (get_local $t) - ) - (block - (set_local $K - (get_local $f) - ) - (set_local $L - (i32.const 0) - ) - (set_local $M - (i32.const 0) - ) - (set_local $N - (i32.const 86) - ) - ) + (get_local $t) (block (set_local $u (get_local $f) @@ -1934,6 +1895,20 @@ (br $while-in$18) ) ) + (block + (set_local $K + (get_local $f) + ) + (set_local $L + (i32.const 0) + ) + (set_local $M + (i32.const 0) + ) + (set_local $N + (i32.const 86) + ) + ) ) ) (if @@ -2099,17 +2074,7 @@ ) ) (if - (i32.eqz - (get_local $T) - ) - (block - (set_local $U - (get_local $K) - ) - (set_local $V - (get_local $M) - ) - ) + (get_local $T) (block (set_local $O (get_local $K) @@ -2124,6 +2089,14 @@ (i32.const 90) ) ) + (block + (set_local $U + (get_local $K) + ) + (set_local $V + (get_local $M) + ) + ) ) ) ) @@ -2196,40 +2169,33 @@ ) ) (if - (i32.eqz - (get_local $P) - ) + (get_local $P) (block - (set_local $U + (set_local $O (get_local $g) ) - (set_local $V + (set_local $Q (get_local $i) ) - (br $while-out$19) + (set_local $N + (i32.const 90) + ) ) (block - (set_local $O + (set_local $U (get_local $g) ) - (set_local $Q + (set_local $V (get_local $i) ) - (set_local $N - (i32.const 90) - ) + (br $while-out$19) ) ) (br $while-in$20) ) ) (if - (i32.eqz - (get_local $V) - ) - (set_local $y - (get_local $e) - ) + (get_local $V) (if (i32.lt_u (get_local $U) @@ -2295,8 +2261,14 @@ ) ) (if - (i32.eqz - (get_local $f) + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) ) (block (set_local $t @@ -2311,15 +2283,7 @@ ) ) (if - (i32.eqz - (get_local $j) - ) - (block - (set_local $W - (i32.const 0) - ) - (br $do-once$21) - ) + (get_local $j) (block (set_local $X (get_local $j) @@ -2328,14 +2292,12 @@ (get_local $t) ) ) - ) - ) - (block - (set_local $X - (get_local $f) - ) - (set_local $Y - (get_local $d) + (block + (set_local $W + (i32.const 0) + ) + (br $do-once$21) + ) ) ) ) @@ -2375,8 +2337,14 @@ ) ) (if - (i32.eqz - (get_local $f) + (get_local $f) + (block + (set_local $X + (get_local $f) + ) + (set_local $Y + (get_local $d) + ) ) (block (set_local $Z @@ -2387,14 +2355,6 @@ ) (br $while-out$23) ) - (block - (set_local $X - (get_local $f) - ) - (set_local $Y - (get_local $d) - ) - ) ) (br $while-in$24) ) @@ -2741,29 +2701,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $s) - (get_local $d) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $s) - (get_local $d) - ) - ) - (set_local $$ - (i32.add - (get_local $g) - (i32.const 8) - ) - ) - (set_local $aa - (get_local $g) - ) + (i32.and + (get_local $s) + (get_local $d) ) (block (set_local $d @@ -2795,6 +2735,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $s) + (get_local $d) + ) + ) + (set_local $$ + (i32.add + (get_local $g) + (i32.const 8) + ) + ) + (set_local $aa + (get_local $g) + ) + ) ) (i32.store (get_local $$) @@ -2822,12 +2780,7 @@ ) ) (if - (i32.eqz - (get_local $g) - ) - (set_local $ba - (i32.const 0) - ) + (get_local $g) (if (i32.gt_u (get_local $U) @@ -2926,6 +2879,9 @@ ) ) ) + (set_local $ba + (i32.const 0) + ) ) (set_local $t (i32.add @@ -3065,8 +3021,17 @@ ) ) (if - (i32.eqz - (get_local $s) + (get_local $s) + (block + (set_local $q + (i32.shl + (get_local $q) + (i32.const 1) + ) + ) + (set_local $d + (get_local $s) + ) ) (block (set_local $da @@ -3080,17 +3045,6 @@ ) (br $while-out$31) ) - (block - (set_local $q - (i32.shl - (get_local $q) - (i32.const 1) - ) - ) - (set_local $d - (get_local $s) - ) - ) ) (br $while-in$32) ) @@ -3209,8 +3163,14 @@ (get_local $e) ) ) + (set_local $y + (get_local $e) + ) ) ) + (set_local $y + (get_local $e) + ) ) ) ) @@ -3546,13 +3506,14 @@ ) (block $label$break$b (if - (i32.eqz - (i32.and - (i32.load - (i32.const 1652) - ) - (i32.const 4) + (i32.and + (i32.load + (i32.const 1652) ) + (i32.const 4) + ) + (set_local $N + (i32.const 188) ) (block (set_local $U @@ -3562,12 +3523,7 @@ ) (block $label$break$c (if - (i32.eqz - (get_local $U) - ) - (set_local $N - (i32.const 171) - ) + (get_local $U) (block (set_local $aa (i32.const 1656) @@ -3697,6 +3653,9 @@ ) ) ) + (set_local $N + (i32.const 171) + ) ) ) (block $do-once$37 @@ -3732,14 +3691,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $$) - (get_local $e) - ) - ) - (set_local $la - (get_local $c) + (i32.and + (get_local $$) + (get_local $e) ) (set_local $la (i32.add @@ -3759,6 +3713,9 @@ ) ) ) + (set_local $la + (get_local $c) + ) ) (set_local $aa (i32.load @@ -3968,9 +3925,6 @@ (i32.const 188) ) ) - (set_local $N - (i32.const 188) - ) ) ) (if @@ -4080,159 +4034,7 @@ ) (block $do-once$42 (if - (i32.eqz - (get_local $ja) - ) - (block - (set_local $ma - (i32.load - (i32.const 1224) - ) - ) - (if - (i32.or - (i32.eq - (get_local $ma) - (i32.const 0) - ) - (i32.lt_u - (get_local $ha) - (get_local $ma) - ) - ) - (i32.store - (i32.const 1224) - (get_local $ha) - ) - ) - (i32.store - (i32.const 1656) - (get_local $ha) - ) - (i32.store - (i32.const 1660) - (get_local $ia) - ) - (i32.store - (i32.const 1668) - (i32.const 0) - ) - (i32.store - (i32.const 1244) - (i32.load - (i32.const 1680) - ) - ) - (i32.store - (i32.const 1240) - (i32.const -1) - ) - (set_local $ma - (i32.const 0) - ) - (loop $do-out$44 $do-in$45 - (set_local $c - (i32.add - (i32.const 1248) - (i32.shl - (i32.shl - (get_local $ma) - (i32.const 1) - ) - (i32.const 2) - ) - ) - ) - (i32.store offset=12 - (get_local $c) - (get_local $c) - ) - (i32.store offset=8 - (get_local $c) - (get_local $c) - ) - (set_local $ma - (i32.add - (get_local $ma) - (i32.const 1) - ) - ) - (br_if $do-in$45 - (i32.ne - (get_local $ma) - (i32.const 32) - ) - ) - ) - (set_local $ma - (i32.add - (get_local $ha) - (i32.const 8) - ) - ) - (set_local $c - (if - (i32.eq - (i32.and - (get_local $ma) - (i32.const 7) - ) - (i32.const 0) - ) - (i32.const 0) - (i32.and - (i32.sub - (i32.const 0) - (get_local $ma) - ) - (i32.const 7) - ) - ) - ) - (set_local $ma - (i32.add - (get_local $ha) - (get_local $c) - ) - ) - (set_local $ka - (i32.sub - (i32.add - (get_local $ia) - (i32.const -40) - ) - (get_local $c) - ) - ) - (i32.store - (i32.const 1232) - (get_local $ma) - ) - (i32.store - (i32.const 1220) - (get_local $ka) - ) - (i32.store offset=4 - (get_local $ma) - (i32.or - (get_local $ka) - (i32.const 1) - ) - ) - (i32.store offset=4 - (i32.add - (get_local $ma) - (get_local $ka) - ) - (i32.const 40) - ) - (i32.store - (i32.const 1236) - (i32.load - (i32.const 1696) - ) - ) - ) + (get_local $ja) (block (set_local $ka (i32.const 1656) @@ -4478,13 +4280,14 @@ (i32.const 209) ) (if - (i32.eqz - (i32.and - (i32.load offset=12 - (get_local $va) - ) - (i32.const 8) + (i32.and + (i32.load offset=12 + (get_local $va) ) + (i32.const 8) + ) + (set_local $wa + (i32.const 1656) ) (block (i32.store @@ -4851,8 +4654,14 @@ ) ) (if - (i32.eqz - (get_local $ba) + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) ) (block (set_local $W @@ -4861,15 +4670,7 @@ ) ) (if - (i32.eqz - (get_local $W) - ) - (block - (set_local $ya - (i32.const 0) - ) - (br $do-once$57) - ) + (get_local $W) (block (set_local $za (get_local $W) @@ -4878,14 +4679,12 @@ (get_local $U) ) ) - ) - ) - (block - (set_local $za - (get_local $ba) - ) - (set_local $Aa - (get_local $aa) + (block + (set_local $ya + (i32.const 0) + ) + (br $do-once$57) + ) ) ) ) @@ -4925,8 +4724,14 @@ ) ) (if - (i32.eqz - (get_local $ba) + (get_local $ba) + (block + (set_local $za + (get_local $ba) + ) + (set_local $Aa + (get_local $aa) + ) ) (block (set_local $Ba @@ -4937,14 +4742,6 @@ ) (br $while-out$59) ) - (block - (set_local $za - (get_local $ba) - ) - (set_local $Aa - (get_local $aa) - ) - ) ) (br $while-in$60) ) @@ -5289,29 +5086,9 @@ ) (block $do-once$65 (if - (i32.eqz - (i32.and - (get_local $V) - (get_local $e) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $V) - (get_local $e) - ) - ) - (set_local $Fa - (i32.add - (get_local $la) - (i32.const 8) - ) - ) - (set_local $Ga - (get_local $la) - ) + (i32.and + (get_local $V) + (get_local $e) ) (block (set_local $fa @@ -5344,6 +5121,24 @@ ) (call_import $qa) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $V) + (get_local $e) + ) + ) + (set_local $Fa + (i32.add + (get_local $la) + (i32.const 8) + ) + ) + (set_local $Ga + (get_local $la) + ) + ) ) ) (i32.store @@ -5373,12 +5168,7 @@ ) (block $do-once$67 (if - (i32.eqz - (get_local $e) - ) - (set_local $Ha - (i32.const 0) - ) + (get_local $e) (block (if (i32.gt_u @@ -5480,6 +5270,9 @@ ) ) ) + (set_local $Ha + (i32.const 0) + ) ) ) (set_local $e @@ -5620,8 +5413,17 @@ ) ) (if - (i32.eqz - (get_local $ga) + (get_local $ga) + (block + (set_local $aa + (i32.shl + (get_local $aa) + (i32.const 1) + ) + ) + (set_local $la + (get_local $ga) + ) ) (block (set_local $Ja @@ -5635,17 +5437,6 @@ ) (br $while-out$69) ) - (block - (set_local $aa - (i32.shl - (get_local $aa) - (i32.const 1) - ) - ) - (set_local $la - (get_local $ga) - ) - ) ) (br $while-in$70) ) @@ -5760,9 +5551,6 @@ (get_local $p) ) ) - (set_local $wa - (i32.const 1656) - ) ) ) (loop $while-out$71 $while-in$72 @@ -6075,29 +5863,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $la) - (get_local $ga) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $la) - (get_local $ga) - ) - ) - (set_local $Ma - (i32.add - (get_local $c) - (i32.const 8) - ) - ) - (set_local $Na - (get_local $c) - ) + (i32.and + (get_local $la) + (get_local $ga) ) (block (set_local $ga @@ -6129,6 +5897,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $la) + (get_local $ga) + ) + ) + (set_local $Ma + (i32.add + (get_local $c) + (i32.const 8) + ) + ) + (set_local $Na + (get_local $c) + ) + ) ) (i32.store (get_local $Ma) @@ -6156,12 +5942,7 @@ ) ) (if - (i32.eqz - (get_local $c) - ) - (set_local $Oa - (i32.const 0) - ) + (get_local $c) (if (i32.gt_u (get_local $ka) @@ -6260,6 +6041,9 @@ ) ) ) + (set_local $Oa + (i32.const 0) + ) ) (set_local $e (i32.add @@ -6393,8 +6177,17 @@ ) ) (if - (i32.eqz - (get_local $la) + (get_local $la) + (block + (set_local $ma + (i32.shl + (get_local $ma) + (i32.const 1) + ) + ) + (set_local $ga + (get_local $la) + ) ) (block (set_local $Ra @@ -6408,17 +6201,6 @@ ) (br $while-out$75) ) - (block - (set_local $ma - (i32.shl - (get_local $ma) - (i32.const 1) - ) - ) - (set_local $ga - (get_local $la) - ) - ) ) (br $while-in$76) ) @@ -6519,6 +6301,156 @@ ) ) ) + (block + (set_local $ma + (i32.load + (i32.const 1224) + ) + ) + (if + (i32.or + (i32.eq + (get_local $ma) + (i32.const 0) + ) + (i32.lt_u + (get_local $ha) + (get_local $ma) + ) + ) + (i32.store + (i32.const 1224) + (get_local $ha) + ) + ) + (i32.store + (i32.const 1656) + (get_local $ha) + ) + (i32.store + (i32.const 1660) + (get_local $ia) + ) + (i32.store + (i32.const 1668) + (i32.const 0) + ) + (i32.store + (i32.const 1244) + (i32.load + (i32.const 1680) + ) + ) + (i32.store + (i32.const 1240) + (i32.const -1) + ) + (set_local $ma + (i32.const 0) + ) + (loop $do-out$44 $do-in$45 + (set_local $c + (i32.add + (i32.const 1248) + (i32.shl + (i32.shl + (get_local $ma) + (i32.const 1) + ) + (i32.const 2) + ) + ) + ) + (i32.store offset=12 + (get_local $c) + (get_local $c) + ) + (i32.store offset=8 + (get_local $c) + (get_local $c) + ) + (set_local $ma + (i32.add + (get_local $ma) + (i32.const 1) + ) + ) + (br_if $do-in$45 + (i32.ne + (get_local $ma) + (i32.const 32) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (i32.const 8) + ) + ) + (set_local $c + (if + (i32.eq + (i32.and + (get_local $ma) + (i32.const 7) + ) + (i32.const 0) + ) + (i32.const 0) + (i32.and + (i32.sub + (i32.const 0) + (get_local $ma) + ) + (i32.const 7) + ) + ) + ) + (set_local $ma + (i32.add + (get_local $ha) + (get_local $c) + ) + ) + (set_local $ka + (i32.sub + (i32.add + (get_local $ia) + (i32.const -40) + ) + (get_local $c) + ) + ) + (i32.store + (i32.const 1232) + (get_local $ma) + ) + (i32.store + (i32.const 1220) + (get_local $ka) + ) + (i32.store offset=4 + (get_local $ma) + (i32.or + (get_local $ka) + (i32.const 1) + ) + ) + (i32.store offset=4 + (i32.add + (get_local $ma) + (get_local $ka) + ) + (i32.const 40) + ) + (i32.store + (i32.const 1236) + (i32.load + (i32.const 1696) + ) + ) + ) ) ) (set_local $ja @@ -6702,10 +6634,16 @@ ) (block $do-once$0 (if - (i32.eqz - (i32.and - (get_local $d) - (i32.const 1) + (i32.and + (get_local $d) + (i32.const 1) + ) + (block + (set_local $m + (get_local $b) + ) + (set_local $n + (get_local $e) ) ) (block @@ -6986,8 +6924,14 @@ ) ) (if - (i32.eqz - (get_local $q) + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) ) (block (set_local $r @@ -6996,15 +6940,7 @@ ) ) (if - (i32.eqz - (get_local $r) - ) - (block - (set_local $s - (i32.const 0) - ) - (br $do-once$2) - ) + (get_local $r) (block (set_local $t (get_local $r) @@ -7013,14 +6949,12 @@ (get_local $o) ) ) - ) - ) - (block - (set_local $t - (get_local $q) - ) - (set_local $u - (get_local $l) + (block + (set_local $s + (i32.const 0) + ) + (br $do-once$2) + ) ) ) ) @@ -7060,8 +6994,14 @@ ) ) (if - (i32.eqz - (get_local $q) + (get_local $q) + (block + (set_local $t + (get_local $q) + ) + (set_local $u + (get_local $l) + ) ) (block (set_local $v @@ -7072,14 +7012,6 @@ ) (br $while-out$4) ) - (block - (set_local $t - (get_local $q) - ) - (set_local $u - (get_local $l) - ) - ) ) (br $while-in$5) ) @@ -7162,17 +7094,7 @@ ) ) (if - (i32.eqz - (get_local $g) - ) - (block - (set_local $m - (get_local $h) - ) - (set_local $n - (get_local $i) - ) - ) + (get_local $g) (block (set_local $j (i32.load offset=28 @@ -7334,17 +7256,7 @@ ) ) (if - (i32.eqz - (get_local $o) - ) - (block - (set_local $m - (get_local $h) - ) - (set_local $n - (get_local $i) - ) - ) + (get_local $o) (if (i32.lt_u (get_local $o) @@ -7371,16 +7283,24 @@ (br $do-once$0) ) ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) + ) + ) + ) + ) + (block + (set_local $m + (get_local $h) + ) + (set_local $n + (get_local $i) ) ) - ) - ) - (block - (set_local $m - (get_local $b) - ) - (set_local $n - (get_local $e) ) ) ) @@ -7413,10 +7333,34 @@ (call_import $qa) ) (if - (i32.eqz - (i32.and - (get_local $b) - (i32.const 2) + (i32.and + (get_local $b) + (i32.const 2) + ) + (block + (i32.store + (get_local $e) + (i32.and + (get_local $b) + (i32.const -2) + ) + ) + (i32.store offset=4 + (get_local $m) + (i32.or + (get_local $n) + (i32.const 1) + ) + ) + (i32.store + (i32.add + (get_local $m) + (get_local $n) + ) + (get_local $n) + ) + (set_local $D + (get_local $n) ) ) (block @@ -7692,8 +7636,14 @@ ) ) (if - (i32.eqz - (get_local $p) + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) ) (block (set_local $a @@ -7702,15 +7652,7 @@ ) ) (if - (i32.eqz - (get_local $a) - ) - (block - (set_local $y - (i32.const 0) - ) - (br $do-once$10) - ) + (get_local $a) (block (set_local $z (get_local $a) @@ -7719,14 +7661,12 @@ (get_local $u) ) ) - ) - ) - (block - (set_local $z - (get_local $p) - ) - (set_local $A - (get_local $t) + (block + (set_local $y + (i32.const 0) + ) + (br $do-once$10) + ) ) ) ) @@ -7766,8 +7706,14 @@ ) ) (if - (i32.eqz - (get_local $p) + (get_local $p) + (block + (set_local $z + (get_local $p) + ) + (set_local $A + (get_local $t) + ) ) (block (set_local $B @@ -7778,14 +7724,6 @@ ) (br $while-out$12) ) - (block - (set_local $z - (get_local $p) - ) - (set_local $A - (get_local $t) - ) - ) ) (br $while-in$13) ) @@ -8079,32 +8017,6 @@ ) ) ) - (block - (i32.store - (get_local $e) - (i32.and - (get_local $b) - (i32.const -2) - ) - ) - (i32.store offset=4 - (get_local $m) - (i32.or - (get_local $n) - (i32.const 1) - ) - ) - (i32.store - (i32.add - (get_local $m) - (get_local $n) - ) - (get_local $n) - ) - (set_local $D - (get_local $n) - ) - ) ) (set_local $n (i32.shr_u @@ -8142,29 +8054,9 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $e) - (get_local $s) - ) - ) - (block - (i32.store - (i32.const 1208) - (i32.or - (get_local $e) - (get_local $s) - ) - ) - (set_local $E - (i32.add - (get_local $b) - (i32.const 8) - ) - ) - (set_local $F - (get_local $b) - ) + (i32.and + (get_local $e) + (get_local $s) ) (block (set_local $s @@ -8196,6 +8088,24 @@ ) ) ) + (block + (i32.store + (i32.const 1208) + (i32.or + (get_local $e) + (get_local $s) + ) + ) + (set_local $E + (i32.add + (get_local $b) + (i32.const 8) + ) + ) + (set_local $F + (get_local $b) + ) + ) ) (i32.store (get_local $E) @@ -8223,12 +8133,7 @@ ) ) (if - (i32.eqz - (get_local $b) - ) - (set_local $G - (i32.const 0) - ) + (get_local $b) (if (i32.gt_u (get_local $D) @@ -8327,6 +8232,9 @@ ) ) ) + (set_local $G + (i32.const 0) + ) ) (set_local $s (i32.add @@ -8362,36 +8270,9 @@ ) (block $do-once$16 (if - (i32.eqz - (i32.and - (get_local $E) - (get_local $e) - ) - ) - (block - (i32.store - (i32.const 1212) - (i32.or - (get_local $E) - (get_local $e) - ) - ) - (i32.store - (get_local $s) - (get_local $m) - ) - (i32.store offset=24 - (get_local $m) - (get_local $s) - ) - (i32.store offset=12 - (get_local $m) - (get_local $m) - ) - (i32.store offset=8 - (get_local $m) - (get_local $m) - ) + (i32.and + (get_local $E) + (get_local $e) ) (block (set_local $F @@ -8460,8 +8341,17 @@ ) ) (if - (i32.eqz - (get_local $y) + (get_local $y) + (block + (set_local $F + (i32.shl + (get_local $F) + (i32.const 1) + ) + ) + (set_local $b + (get_local $y) + ) ) (block (set_local $J @@ -8475,17 +8365,6 @@ ) (br $while-out$18) ) - (block - (set_local $F - (i32.shl - (get_local $F) - (i32.const 1) - ) - ) - (set_local $b - (get_local $y) - ) - ) ) (br $while-in$19) ) @@ -8584,6 +8463,31 @@ ) ) ) + (block + (i32.store + (i32.const 1212) + (i32.or + (get_local $E) + (get_local $e) + ) + ) + (i32.store + (get_local $s) + (get_local $m) + ) + (i32.store offset=24 + (get_local $m) + (get_local $s) + ) + (i32.store offset=12 + (get_local $m) + (get_local $m) + ) + (i32.store offset=8 + (get_local $m) + (get_local $m) + ) + ) ) ) (set_local $m @@ -8599,13 +8503,11 @@ (get_local $m) ) (if - (i32.eqz - (get_local $m) - ) + (get_local $m) + (return) (set_local $L (i32.const 1664) ) - (return) ) (loop $while-out$20 $while-in$21 (set_local $m @@ -8614,16 +8516,14 @@ ) ) (if - (i32.eqz - (get_local $m) - ) - (br $while-out$20) + (get_local $m) (set_local $L (i32.add (get_local $m) (i32.const 8) ) ) + (br $while-out$20) ) (br $while-in$21) ) @@ -8751,68 +8651,66 @@ ) (loop $while-out$0 $while-in$1 (if - (i32.eqz - (i32.load - (i32.const 1160) - ) + (i32.load + (i32.const 1160) ) (block + (call_import $ra + (i32.const 1) + (get_local $a) + ) (i32.store - (get_local $e) + (get_local $f) (i32.load (get_local $b) ) ) (i32.store offset=4 - (get_local $e) + (get_local $f) (get_local $m) ) (i32.store offset=8 - (get_local $e) + (get_local $f) (get_local $g) ) - (set_local $o + (set_local $l (call $Pa (call_import $ya (i32.const 146) - (get_local $e) + (get_local $f) ) ) ) + (call_import $oa + (i32.const 0) + ) + (set_local $o + (get_local $l) + ) ) (block - (call_import $ra - (i32.const 1) - (get_local $a) - ) (i32.store - (get_local $f) + (get_local $e) (i32.load (get_local $b) ) ) (i32.store offset=4 - (get_local $f) + (get_local $e) (get_local $m) ) (i32.store offset=8 - (get_local $f) + (get_local $e) (get_local $g) ) - (set_local $l + (set_local $o (call $Pa (call_import $ya (i32.const 146) - (get_local $f) + (get_local $e) ) ) ) - (call_import $oa - (i32.const 0) - ) - (set_local $o - (get_local $l) - ) ) ) (if @@ -9085,14 +8983,21 @@ ) ) (if - (i32.eqz - (get_local $e) + (get_local $e) + (block + (set_local $f + (get_local $e) + ) + (set_local $g + (i32.const 5) + ) ) (if - (i32.eqz - (call $Xa - (get_local $c) - ) + (call $Xa + (get_local $c) + ) + (set_local $h + (i32.const 0) ) (block (set_local $f @@ -9104,17 +9009,6 @@ (i32.const 5) ) ) - (set_local $h - (i32.const 0) - ) - ) - (block - (set_local $f - (get_local $e) - ) - (set_local $g - (i32.const 5) - ) ) ) (block $label$break$a @@ -9332,19 +9226,9 @@ ) (block $label$break$a (if - (i32.eqz - (i32.and - (get_local $b) - (i32.const 3) - ) - ) - (block - (set_local $c - (get_local $a) - ) - (set_local $d - (i32.const 4) - ) + (i32.and + (get_local $b) + (i32.const 3) ) (block (set_local $e @@ -9377,11 +9261,12 @@ (get_local $h) ) (if - (i32.eqz - (i32.and - (get_local $f) - (i32.const 3) - ) + (i32.and + (get_local $f) + (i32.const 3) + ) + (set_local $e + (get_local $h) ) (block (set_local $c @@ -9392,13 +9277,18 @@ ) (br $while-out$1) ) - (set_local $e - (get_local $h) - ) ) (br $while-in$2) ) ) + (block + (set_local $c + (get_local $a) + ) + (set_local $d + (i32.const 4) + ) + ) ) ) (if @@ -9417,25 +9307,17 @@ ) ) (if - (i32.eqz - (i32.and - (i32.xor - (i32.and - (get_local $c) - (i32.const -2139062144) - ) - (i32.const -2139062144) - ) - (i32.add + (i32.and + (i32.xor + (i32.and (get_local $c) - (i32.const -16843009) + (i32.const -2139062144) ) + (i32.const -2139062144) ) - ) - (set_local $d (i32.add - (get_local $d) - (i32.const 4) + (get_local $c) + (i32.const -16843009) ) ) (block @@ -9447,24 +9329,25 @@ ) (br $while-out$3) ) + (set_local $d + (i32.add + (get_local $d) + (i32.const 4) + ) + ) ) (br $while-in$4) ) (if - (i32.eqz - (i32.shr_s - (i32.shl - (i32.and - (get_local $j) - (i32.const 255) - ) - (i32.const 24) + (i32.shr_s + (i32.shl + (i32.and + (get_local $j) + (i32.const 255) ) (i32.const 24) ) - ) - (set_local $m - (get_local $l) + (i32.const 24) ) (block (set_local $j @@ -9478,10 +9361,11 @@ ) ) (if - (i32.eqz - (i32.load8_s - (get_local $l) - ) + (i32.load8_s + (get_local $l) + ) + (set_local $j + (get_local $l) ) (block (set_local $m @@ -9489,13 +9373,13 @@ ) (br $while-out$5) ) - (set_local $j - (get_local $l) - ) ) (br $while-in$6) ) ) + (set_local $m + (get_local $l) + ) ) (set_local $g (get_local $m) @@ -9519,19 +9403,57 @@ (local $d i32) (block $do-once$0 (if - (i32.eqz - (get_local $a) - ) + (get_local $a) (block (if - (i32.eqz - (i32.load - (i32.const 1140) + (i32.le_s + (i32.load offset=76 + (get_local $a) ) + (i32.const -1) ) - (set_local $b + (block + (set_local $h + (call $$a + (get_local $a) + ) + ) + (br $do-once$0) + ) + ) + (set_local $c + (i32.eq + (call $Ya + (get_local $a) + ) (i32.const 0) ) + ) + (set_local $e + (call $$a + (get_local $a) + ) + ) + (if + (get_local $c) + (set_local $h + (get_local $e) + ) + (block + (call $Ta + (get_local $a) + ) + (set_local $h + (get_local $e) + ) + ) + ) + ) + (block + (if + (i32.load + (i32.const 1140) + ) (set_local $b (call $_a (i32.load @@ -9539,6 +9461,9 @@ ) ) ) + (set_local $b + (i32.const 0) + ) ) (call_import $pa (i32.const 1188) @@ -9549,12 +9474,7 @@ ) ) (if - (i32.eqz - (get_local $c) - ) - (set_local $d - (get_local $b) - ) + (get_local $c) (block (set_local $e (get_local $c) @@ -9612,8 +9532,9 @@ ) ) (if - (i32.eqz - (get_local $e) + (get_local $e) + (set_local $c + (get_local $g) ) (block (set_local $d @@ -9621,13 +9542,13 @@ ) (br $while-out$2) ) - (set_local $c - (get_local $g) - ) ) (br $while-in$3) ) ) + (set_local $d + (get_local $b) + ) ) (call_import $xa (i32.const 1188) @@ -9636,51 +9557,6 @@ (get_local $d) ) ) - (block - (if - (i32.le_s - (i32.load offset=76 - (get_local $a) - ) - (i32.const -1) - ) - (block - (set_local $h - (call $$a - (get_local $a) - ) - ) - (br $do-once$0) - ) - ) - (set_local $c - (i32.eq - (call $Ya - (get_local $a) - ) - (i32.const 0) - ) - ) - (set_local $e - (call $$a - (get_local $a) - ) - ) - (if - (get_local $c) - (set_local $h - (get_local $e) - ) - (block - (call $Ta - (get_local $a) - ) - (set_local $h - (get_local $e) - ) - ) - ) - ) ) ) (return @@ -9736,14 +9612,21 @@ ) ) (if - (i32.eqz - (get_local $g) + (get_local $g) + (block + (set_local $h + (get_local $g) + ) + (set_local $j + (i32.const 4) + ) ) (if - (i32.eqz - (call $Xa - (get_local $a) - ) + (call $Xa + (get_local $a) + ) + (set_local $m + (i32.const -1) ) (block (set_local $h @@ -9755,17 +9638,6 @@ (i32.const 4) ) ) - (set_local $m - (i32.const -1) - ) - ) - (block - (set_local $h - (get_local $g) - ) - (set_local $j - (i32.const 4) - ) ) ) (block $do-once$0 @@ -9908,17 +9780,15 @@ (i32.const 0) ) (if - (i32.eqz - (i32.load - (get_local $b) - ) - ) - (set_local $d - (i32.const -1) + (i32.load + (get_local $b) ) (set_local $e (i32.const 3) ) + (set_local $d + (i32.const -1) + ) ) ) (set_local $e @@ -10447,10 +10317,20 @@ ) ) (if - (i32.eqz - (i32.and - (get_local $c) - (i32.const 8) + (i32.and + (get_local $c) + (i32.const 8) + ) + (block + (i32.store + (get_local $a) + (i32.or + (get_local $c) + (i32.const 32) + ) + ) + (set_local $d + (i32.const -1) ) ) (block @@ -10488,18 +10368,6 @@ (i32.const 0) ) ) - (block - (i32.store - (get_local $a) - (i32.or - (get_local $c) - (i32.const 32) - ) - ) - (set_local $d - (i32.const -1) - ) - ) ) (return (get_local $d) @@ -10920,13 +10788,8 @@ (local $a i32) (local $b i32) (if - (i32.eqz - (i32.load - (i32.const 1160) - ) - ) - (set_local $a - (i32.const 1204) + (i32.load + (i32.const 1160) ) (block (set_local $b @@ -10941,6 +10804,9 @@ ) ) ) + (set_local $a + (i32.const 1204) + ) ) (return (get_local $a) diff --git a/test/passes/optimize-instructions.txt b/test/passes/optimize-instructions.txt new file mode 100644 index 000000000..ea6e78908 --- /dev/null +++ b/test/passes/optimize-instructions.txt @@ -0,0 +1,23 @@ +(module + (memory 0) + (func $f (param $i1 i32) (param $i2 i64) + (if + (i32.eqz + (get_local $i1) + ) + (i32.const 10) + ) + (if + (get_local $i1) + (i32.const 12) + (i32.const 11) + ) + (if + (i64.eqz + (get_local $i2) + ) + (i32.const 11) + (i32.const 12) + ) + ) +) diff --git a/test/passes/optimize-instructions.wast b/test/passes/optimize-instructions.wast new file mode 100644 index 000000000..058aee042 --- /dev/null +++ b/test/passes/optimize-instructions.wast @@ -0,0 +1,26 @@ +(module + (memory 0) + (func $f (param $i1 i32) (param $i2 i64) + (if + (i32.eqz + (get_local $i1) + ) + (i32.const 10) + ) + (if + (i32.eqz + (get_local $i1) + ) + (i32.const 11) + (i32.const 12) + ) + (if + (i64.eqz + (get_local $i2) + ) + (i32.const 11) + (i32.const 12) + ) + ) +) + diff --git a/test/two_sides.fromasm b/test/two_sides.fromasm index 719566b73..83933ba0c 100644 --- a/test/two_sides.fromasm +++ b/test/two_sides.fromasm @@ -7,15 +7,13 @@ (func $_test (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (param $i5 i32) (result i32) (local $d6 f64) (if - (i32.eqz - (get_local $i5) - ) + (get_local $i5) (block (set_local $d6 (f64.convert_s/i32 (i32.mul - (get_local $i4) - (get_local $i3) + (get_local $i2) + (get_local $i1) ) ) ) @@ -28,10 +26,10 @@ (get_local $d6) ) (f64.add + (get_local $d6) (f64.convert_s/i32 (get_local $i4) ) - (get_local $d6) ) ) ) @@ -48,8 +46,8 @@ (set_local $d6 (f64.convert_s/i32 (i32.mul - (get_local $i2) - (get_local $i1) + (get_local $i4) + (get_local $i3) ) ) ) @@ -62,10 +60,10 @@ (get_local $d6) ) (f64.add - (get_local $d6) (f64.convert_s/i32 (get_local $i4) ) + (get_local $d6) ) ) ) diff --git a/test/two_sides.fromasm.imprecise b/test/two_sides.fromasm.imprecise index 6c2aa1d83..4056f9e8c 100644 --- a/test/two_sides.fromasm.imprecise +++ b/test/two_sides.fromasm.imprecise @@ -5,15 +5,13 @@ (func $_test (param $i1 i32) (param $i2 i32) (param $i3 i32) (param $i4 i32) (param $i5 i32) (result i32) (local $d6 f64) (if - (i32.eqz - (get_local $i5) - ) + (get_local $i5) (block (set_local $d6 (f64.convert_s/i32 (i32.mul - (get_local $i4) - (get_local $i3) + (get_local $i2) + (get_local $i1) ) ) ) @@ -26,10 +24,10 @@ (get_local $d6) ) (f64.add + (get_local $d6) (f64.convert_s/i32 (get_local $i4) ) - (get_local $d6) ) ) ) @@ -46,8 +44,8 @@ (set_local $d6 (f64.convert_s/i32 (i32.mul - (get_local $i2) - (get_local $i1) + (get_local $i4) + (get_local $i3) ) ) ) @@ -60,10 +58,10 @@ (get_local $d6) ) (f64.add - (get_local $d6) (f64.convert_s/i32 (get_local $i4) ) + (get_local $d6) ) ) ) |