diff options
-rw-r--r-- | src/passes/PostEmscripten.cpp | 14 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm | 1223 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm | 183 |
3 files changed, 424 insertions, 996 deletions
diff --git a/src/passes/PostEmscripten.cpp b/src/passes/PostEmscripten.cpp index aa561baf8..14476b727 100644 --- a/src/passes/PostEmscripten.cpp +++ b/src/passes/PostEmscripten.cpp @@ -39,9 +39,12 @@ struct PostEmscripten : public WalkerPass<WasmWalker<PostEmscripten>> { // a mapped global, but it can't be because they are accessed directly (at worst, // it's 0 or an unused section of memory that was reserved for mapped globlas). // Thus it is ok to optimize such small constants into Load offsets. - void visitLoad(Load *curr) { + + template<typename T> + void visitMemoryOp(T *curr) { if (curr->offset) return; - auto add = curr->ptr->dyn_cast<Binary>(); + Expression* ptr = curr->ptr; + auto add = ptr->dyn_cast<Binary>(); if (!add || add->op != Add) return; assert(add->type == i32); auto c = add->right->dyn_cast<Const>(); @@ -61,6 +64,13 @@ struct PostEmscripten : public WalkerPass<WasmWalker<PostEmscripten>> { curr->offset = value; } } + + void visitLoad(Load* curr) { + visitMemoryOp(curr); + } + void visitStore(Store* curr) { + visitMemoryOp(curr); + } }; static RegisterPass<PostEmscripten> registerPass("post-emscripten", "miscellaneous optimizations for Emscripten-generated code"); diff --git a/test/emcc_O2_hello_world.fromasm b/test/emcc_O2_hello_world.fromasm index ab2634757..752a055ab 100644 --- a/test/emcc_O2_hello_world.fromasm +++ b/test/emcc_O2_hello_world.fromasm @@ -290,11 +290,8 @@ (i32.const 3) ) ) - (i32.store align=4 - (i32.add - (get_local $i9) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i9) (i32.or (get_local $i11) (i32.const 3) @@ -574,11 +571,8 @@ (get_local $i2) ) ) - (i32.store align=4 - (i32.add - (get_local $i14) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i14) (i32.or (get_local $i2) (i32.const 3) @@ -590,11 +584,8 @@ (get_local $i2) ) ) - (i32.store align=4 - (i32.add - (get_local $i4) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i4) (i32.or (get_local $i8) (i32.const 1) @@ -702,25 +693,16 @@ (get_local $i19) (get_local $i7) ) - (i32.store align=4 - (i32.add - (get_local $i20) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i20) (get_local $i7) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i7) (get_local $i20) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i7) (get_local $i15) ) ) @@ -1269,11 +1251,8 @@ (get_local $i12) (get_local $i24) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i5) (get_local $i24) ) ) @@ -1298,11 +1277,8 @@ ) (call_import $_abort) ) - (i32.store align=4 - (i32.add - (get_local $i24) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i24) (get_local $i5) ) (set_local $i7 @@ -1320,18 +1296,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i24) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i24) (get_local $i7) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i7) (get_local $i24) ) (br $do-once$9) @@ -1355,18 +1325,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i24) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i24) (get_local $i7) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i7) (get_local $i24) ) (br $do-once$8) @@ -1388,11 +1352,8 @@ (get_local $i2) ) ) - (i32.store align=4 - (i32.add - (get_local $i22) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i22) (i32.or (get_local $i5) (i32.const 3) @@ -1418,21 +1379,15 @@ ) ) (block - (i32.store align=4 - (i32.add - (get_local $i22) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i22) (i32.or (get_local $i2) (i32.const 3) ) ) - (i32.store align=4 - (i32.add - (get_local $i3) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i3) (i32.or (get_local $i21) (i32.const 1) @@ -1545,25 +1500,16 @@ (get_local $i29) (get_local $i5) ) - (i32.store align=4 - (i32.add - (get_local $i30) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i30) (get_local $i5) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i5) (get_local $i30) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i5) (get_local $i7) ) ) @@ -2573,11 +2519,8 @@ (get_local $i7) (get_local $i45) ) - (i32.store align=4 - (i32.add - (get_local $i3) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i3) (get_local $i45) ) ) @@ -2602,11 +2545,8 @@ ) (call_import $_abort) ) - (i32.store align=4 - (i32.add - (get_local $i45) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i45) (get_local $i3) ) (set_local $i15 @@ -2624,18 +2564,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i45) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i45) (get_local $i15) ) - (i32.store align=4 - (i32.add - (get_local $i15) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i15) (get_local $i45) ) (br $do-once$18) @@ -2659,18 +2593,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i45) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i45) (get_local $i15) ) - (i32.store align=4 - (i32.add - (get_local $i15) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i15) (get_local $i45) ) (br $do-once$17) @@ -2687,21 +2615,15 @@ (i32.const 16) ) (block - (i32.store align=4 - (i32.add - (get_local $i44) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i44) (i32.or (get_local $i5) (i32.const 3) ) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i8) (i32.or (get_local $i43) (i32.const 1) @@ -2807,25 +2729,16 @@ (get_local $i50) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i51) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i51) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i8) (get_local $i51) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i8) (get_local $i15) ) (br $do-once$19) @@ -2950,11 +2863,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 28) - ) + (i32.store offset=28 align=4 + (get_local $i8) (get_local $i52) ) (set_local $i7 @@ -2963,11 +2873,8 @@ (i32.const 16) ) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i7) (i32.const 0) ) (i32.store align=4 @@ -3005,25 +2912,16 @@ (get_local $i3) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i8) (get_local $i3) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i8) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i8) (get_local $i8) ) (br $do-once$19) @@ -3143,25 +3041,16 @@ (get_local $i54) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i8) (get_local $i55) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i8) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i8) (get_local $i8) ) (br $do-once$19) @@ -3201,36 +3090,24 @@ ) ) (block - (i32.store align=4 - (i32.add - (get_local $i4) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i4) (get_local $i8) ) (i32.store align=4 (get_local $i7) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i8) (get_local $i4) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i8) (get_local $i53) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i8) (i32.const 0) ) (br $do-once$19) @@ -3248,11 +3125,8 @@ (get_local $i5) ) ) - (i32.store align=4 - (i32.add - (get_local $i44) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i44) (i32.or (get_local $i4) (i32.const 3) @@ -3347,11 +3221,8 @@ (i32.const 184) (get_local $i43) ) - (i32.store align=4 - (i32.add - (get_local $i55) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i55) (i32.or (get_local $i43) (i32.const 1) @@ -3364,11 +3235,8 @@ ) (get_local $i43) ) - (i32.store align=4 - (i32.add - (get_local $i53) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i53) (i32.or (get_local $i31) (i32.const 3) @@ -3384,11 +3252,8 @@ (i32.const 196) (i32.const 0) ) - (i32.store align=4 - (i32.add - (get_local $i53) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i53) (i32.or (get_local $i44) (i32.const 3) @@ -3461,21 +3326,15 @@ (i32.const 200) (get_local $i44) ) - (i32.store align=4 - (i32.add - (get_local $i44) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i44) (i32.or (get_local $i43) (i32.const 1) ) ) - (i32.store align=4 - (i32.add - (get_local $i53) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i53) (i32.or (get_local $i31) (i32.const 3) @@ -4350,23 +4209,17 @@ (i32.const 188) (get_local $i61) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i63) (i32.or (get_local $i61) (i32.const 1) ) ) - (i32.store align=4 + (i32.store offset=4 align=4 (i32.add - (i32.add - (get_local $i63) - (get_local $i61) - ) - (i32.const 4) + (get_local $i63) + (get_local $i61) ) (i32.const 40) ) @@ -4557,11 +4410,8 @@ (get_local $i31) ) ) - (i32.store align=4 - (i32.add - (get_local $i44) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i44) (i32.or (get_local $i31) (i32.const 3) @@ -4598,11 +4448,8 @@ (i32.const 196) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i63) (i32.or (get_local $i62) (i32.const 1) @@ -4920,11 +4767,8 @@ (get_local $i45) (get_local $i72) ) - (i32.store align=4 - (i32.add - (get_local $i54) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i54) (get_local $i72) ) ) @@ -4976,11 +4820,8 @@ ) (call_import $_abort) ) - (i32.store align=4 - (i32.add - (get_local $i72) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i72) (get_local $i54) ) (set_local $i5 @@ -5004,18 +4845,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i72) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i72) (get_local $i45) ) - (i32.store align=4 - (i32.add - (get_local $i45) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i45) (get_local $i72) ) (br $do-once$37) @@ -5044,18 +4879,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i72) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i72) (get_local $i45) ) - (i32.store align=4 - (i32.add - (get_local $i45) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i45) (get_local $i72) ) (br $label$break$L331) @@ -5180,11 +5009,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i45) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i45) (get_local $i55) ) (i32.store align=4 @@ -5231,11 +5057,8 @@ (i32.const -2) ) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i63) (i32.or (get_local $i79) (i32.const 1) @@ -5347,25 +5170,16 @@ (get_local $i80) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i81) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i81) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i63) (get_local $i81) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i63) (get_local $i62) ) (br $do-once$32) @@ -5498,11 +5312,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 28) - ) + (i32.store offset=28 align=4 + (get_local $i63) (get_local $i82) ) (set_local $i62 @@ -5511,11 +5322,8 @@ (i32.const 16) ) ) - (i32.store align=4 - (i32.add - (get_local $i62) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i62) (i32.const 0) ) (i32.store align=4 @@ -5553,25 +5361,16 @@ (get_local $i5) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i63) (get_local $i5) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i63) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i63) (get_local $i63) ) (br $do-once$32) @@ -5691,25 +5490,16 @@ (get_local $i84) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i63) (get_local $i85) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i63) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i63) (get_local $i63) ) (br $do-once$32) @@ -5749,36 +5539,24 @@ ) ) (block - (i32.store align=4 - (i32.add - (get_local $i50) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i50) (get_local $i63) ) (i32.store align=4 (get_local $i62) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i63) (get_local $i50) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i63) (get_local $i83) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i63) (i32.const 0) ) (br $do-once$32) @@ -5806,11 +5584,8 @@ (i32.const 200) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i63) (i32.or (get_local $i50) (i32.const 1) @@ -5980,23 +5755,17 @@ (i32.const 188) (get_local $i50) ) - (i32.store align=4 - (i32.add - (get_local $i43) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i43) (i32.or (get_local $i50) (i32.const 1) ) ) - (i32.store align=4 + (i32.store offset=4 align=4 (i32.add - (i32.add - (get_local $i43) - (get_local $i50) - ) - (i32.const 4) + (get_local $i43) + (get_local $i50) ) (i32.const 40) ) @@ -6022,29 +5791,20 @@ (i32.const 624) ) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i63) (i32.load align=4 (i32.const 628) ) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i63) (i32.load align=4 (i32.const 632) ) ) - (i32.store align=4 - (i32.add - (get_local $i63) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i63) (i32.load align=4 (i32.const 636) ) @@ -6114,11 +5874,8 @@ (i32.const -2) ) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i60) (i32.or (get_local $i63) (i32.const 1) @@ -6221,25 +5978,16 @@ (get_local $i87) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i88) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i88) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i60) (get_local $i88) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i60) (get_local $i61) ) (br $do-once$27) @@ -6364,18 +6112,12 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 28) - ) + (i32.store offset=28 align=4 + (get_local $i60) (get_local $i89) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i60) (i32.const 0) ) (i32.store align=4 @@ -6413,25 +6155,16 @@ (get_local $i43) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i60) (get_local $i43) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i60) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i60) (get_local $i60) ) (br $do-once$27) @@ -6551,25 +6284,16 @@ (get_local $i91) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i60) (get_local $i92) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i60) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i60) (get_local $i60) ) (br $do-once$27) @@ -6609,36 +6333,24 @@ ) ) (block - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i5) (get_local $i60) ) (i32.store align=4 (get_local $i62) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i60) (get_local $i5) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i60) (get_local $i90) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i60) (i32.const 0) ) (br $do-once$27) @@ -6711,18 +6423,12 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i62) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i62) (get_local $i62) ) - (i32.store align=4 - (i32.add - (get_local $i62) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i62) (get_local $i62) ) (set_local $i5 @@ -6787,23 +6493,17 @@ (i32.const 188) (get_local $i63) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i5) (i32.or (get_local $i63) (i32.const 1) ) ) - (i32.store align=4 + (i32.store offset=4 align=4 (i32.add - (i32.add - (get_local $i5) - (get_local $i63) - ) - (i32.const 4) + (get_local $i5) + (get_local $i63) ) (i32.const 40) ) @@ -6852,21 +6552,15 @@ (i32.const 200) (get_local $i60) ) - (i32.store align=4 - (i32.add - (get_local $i60) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i60) (i32.or (get_local $i58) (i32.const 1) ) ) - (i32.store align=4 - (i32.add - (get_local $i59) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i59) (i32.or (get_local $i31) (i32.const 3) @@ -7082,11 +6776,8 @@ (i32.const -2) ) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i8) (i32.or (get_local $i9) (i32.const 1) @@ -7229,11 +6920,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i7) (get_local $i10) ) (i32.store align=4 @@ -7549,11 +7237,8 @@ (get_local $i10) (get_local $i18) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i7) (get_local $i18) ) ) @@ -7586,11 +7271,8 @@ ) (call_import $_abort) ) - (i32.store align=4 - (i32.add - (get_local $i18) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i18) (get_local $i7) ) (set_local $i11 @@ -7614,18 +7296,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i18) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i18) (get_local $i14) ) - (i32.store align=4 - (i32.add - (get_local $i14) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i14) (get_local $i18) ) (br $do-once$4) @@ -7649,18 +7325,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i18) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i18) (get_local $i14) ) - (i32.store align=4 - (i32.add - (get_local $i14) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i14) (get_local $i18) ) (set_local $i12 @@ -7763,11 +7433,8 @@ (i32.const 200) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i12) (i32.or (get_local $i18) (i32.const 1) @@ -7817,11 +7484,8 @@ (i32.const 196) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i12) (i32.or (get_local $i18) (i32.const 1) @@ -8157,11 +7821,8 @@ (get_local $i22) (get_local $i23) ) - (i32.store align=4 - (i32.add - (get_local $i21) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i21) (get_local $i23) ) ) @@ -8186,11 +7847,8 @@ ) (call_import $_abort) ) - (i32.store align=4 - (i32.add - (get_local $i23) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i23) (get_local $i21) ) (set_local $i9 @@ -8214,18 +7872,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i23) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i23) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i8) (get_local $i23) ) (br $do-once$9) @@ -8249,18 +7901,12 @@ ) (call_import $_abort) (block - (i32.store align=4 - (i32.add - (get_local $i23) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i23) (get_local $i8) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i8) (get_local $i23) ) (br $do-once$5) @@ -8384,11 +8030,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i8) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i8) (get_local $i22) ) (i32.store align=4 @@ -8398,11 +8041,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i12) (i32.or (get_local $i18) (i32.const 1) @@ -8442,11 +8082,8 @@ (i32.const -2) ) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i12) (i32.or (get_local $i13) (i32.const 1) @@ -8557,25 +8194,16 @@ (get_local $i30) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i31) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i31) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i12) (get_local $i31) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i12) (get_local $i2) ) (br $topmost) @@ -8700,25 +8328,16 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 28) - ) + (i32.store offset=28 align=4 + (get_local $i12) (get_local $i32) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i12) (i32.const 0) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i12) (i32.const 0) ) (set_local $i30 @@ -8853,25 +8472,16 @@ (get_local $i35) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i12) (get_local $i36) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i12) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i12) (get_local $i12) ) (br $do-once$10) @@ -8911,36 +8521,24 @@ ) ) (block - (i32.store align=4 - (i32.add - (get_local $i31) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i31) (get_local $i12) ) (i32.store align=4 (get_local $i2) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i12) (get_local $i31) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i12) (get_local $i33) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i12) (i32.const 0) ) (br $do-once$10) @@ -8963,25 +8561,16 @@ (get_local $i5) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 24) - ) + (i32.store offset=24 align=4 + (get_local $i12) (get_local $i5) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i12) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i12) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i12) (get_local $i12) ) ) @@ -9116,25 +8705,16 @@ (get_local $i9) ) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i7) (get_local $i11) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i7) (get_local $i2) ) - (i32.store align=4 - (i32.add - (get_local $i7) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i7) (get_local $i3) ) (set_local $i2 @@ -9176,18 +8756,12 @@ (get_local $i2) ) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i5) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i5) (get_local $i7) ) (set_local $i14 @@ -9210,18 +8784,12 @@ (get_local $i2) ) ) - (i32.store align=4 - (i32.add - (get_local $i6) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i6) (get_local $i12) ) - (i32.store align=4 - (i32.add - (get_local $i6) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i6) (get_local $i7) ) (set_local $i11 @@ -9377,11 +8945,8 @@ (get_local $i20) ) ) - (i32.store align=4 - (i32.add - (get_local $i21) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i21) (i32.sub (get_local $i19) (get_local $i20) @@ -9409,11 +8974,8 @@ (get_local $i9) ) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i1) (i32.add (get_local $i13) (i32.load offset=48 align=4 @@ -9442,11 +9004,8 @@ (i32.const 8) ) (block - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i1) (i32.const 0) ) (i32.store align=4 @@ -10403,11 +9962,8 @@ (i32.const 1) ) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i1) (i32.const 0) ) (i32.store align=4 @@ -10874,32 +10430,20 @@ (get_local $i1) ) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i5) (i32.const 0) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i5) (get_local $i2) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $i5) (get_local $i6) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i5) (get_local $i3) ) (if_else @@ -10972,18 +10516,12 @@ (i32.const 0) ) (block - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i1) (i32.const 0) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i1) (i32.const 0) ) (set_local $i2 @@ -10991,25 +10529,16 @@ (get_local $i1) ) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 28) - ) + (i32.store offset=28 align=4 + (get_local $i1) (get_local $i2) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 20) - ) + (i32.store offset=20 align=4 + (get_local $i1) (get_local $i2) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 16) - ) + (i32.store offset=16 align=4 + (get_local $i1) (i32.add (get_local $i2) (i32.load offset=48 align=4 @@ -11131,11 +10660,8 @@ (set_local $i5 (get_local $i4) ) - (i32.store align=4 - (i32.add - (get_local $i1) - (i32.const 36) - ) + (i32.store offset=36 align=4 + (get_local $i1) (i32.const 5) ) (if @@ -11156,18 +10682,12 @@ (get_local $i1) ) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $i5) (i32.const 21505) ) - (i32.store align=4 - (i32.add - (get_local $i5) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $i5) (i32.add (get_local $i4) (i32.const 12) @@ -11183,11 +10703,8 @@ ) (i32.const 0) ) - (i32.store8 align=1 - (i32.add - (get_local $i1) - (i32.const 75) - ) + (i32.store8 offset=75 align=1 + (get_local $i1) (i32.const -1) ) ) @@ -11213,78 +10730,57 @@ (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 1) + (i32.store8 offset=1 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=1 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 2) + (i32.store8 offset=2 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=2 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 3) + (i32.store8 offset=3 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=3 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 4) + (i32.store8 offset=4 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=4 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 5) + (i32.store8 offset=5 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=5 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 6) + (i32.store8 offset=6 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=6 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 7) + (i32.store8 offset=7 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=7 align=1 (get_local $i1) @@ -11340,34 +10836,25 @@ (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 1) + (i32.store8 offset=1 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=1 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 2) + (i32.store8 offset=2 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=2 align=1 (get_local $i1) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 3) + (i32.store8 offset=3 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=3 align=1 (get_local $i1) diff --git a/test/emcc_hello_world.fromasm b/test/emcc_hello_world.fromasm index bf8602fea..22fbfcb00 100644 --- a/test/emcc_hello_world.fromasm +++ b/test/emcc_hello_world.fromasm @@ -141,34 +141,25 @@ (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 1) + (i32.store8 offset=1 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=1 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 2) + (i32.store8 offset=2 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=2 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 3) + (i32.store8 offset=3 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=3 align=1 (get_local $ptr) @@ -184,78 +175,57 @@ (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 1) + (i32.store8 offset=1 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=1 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 2) + (i32.store8 offset=2 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=2 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 3) + (i32.store8 offset=3 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=3 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 4) + (i32.store8 offset=4 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=4 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 5) + (i32.store8 offset=5 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=5 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 6) + (i32.store8 offset=6 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=6 align=1 (get_local $ptr) ) ) - (i32.store8 align=1 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 7) + (i32.store8 offset=7 align=1 + (i32.load align=4 + (i32.const 24) ) (i32.load8_s offset=7 align=1 (get_local $ptr) @@ -486,12 +456,9 @@ ) (get_local $$0) ) - (i32.store align=4 - (i32.add - (i32.load align=4 - (i32.const 24) - ) - (i32.const 4) + (i32.store offset=4 align=4 + (i32.load align=4 + (i32.const 24) ) (get_local $$6) ) @@ -25932,29 +25899,20 @@ (i32.const 624) ) ) - (i32.store align=4 - (i32.add - (get_local $$add$ptr14$i$i) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$add$ptr14$i$i) (i32.load offset=4 align=4 (i32.const 624) ) ) - (i32.store align=4 - (i32.add - (get_local $$add$ptr14$i$i) - (i32.const 8) - ) + (i32.store offset=8 align=4 + (get_local $$add$ptr14$i$i) (i32.load offset=8 align=4 (i32.const 624) ) ) - (i32.store align=4 - (i32.add - (get_local $$add$ptr14$i$i) - (i32.const 12) - ) + (i32.store offset=12 align=4 + (get_local $$add$ptr14$i$i) (i32.load offset=12 align=4 (i32.const 624) ) @@ -31543,11 +31501,8 @@ (get_local $$d_sroa_0_0_extract_trunc) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.const 0) ) ) @@ -31598,11 +31553,8 @@ (i32.const -1) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.and (get_local $$a$1) (i32.const 0) @@ -31654,11 +31606,8 @@ (get_local $$d_sroa_0_0_extract_trunc) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.const 0) ) ) @@ -31699,11 +31648,8 @@ (get_local $$rem) (i32.const 0) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.rem_u (get_local $$n_sroa_1_4_extract_trunc) (get_local $$d_sroa_1_4_extract_trunc) @@ -31762,11 +31708,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.or (i32.and (get_local $$37) @@ -31899,11 +31842,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.or (get_local $$n_sroa_1_4_extract_shift$0) (i32.and @@ -32043,11 +31983,8 @@ ) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.or (get_local $$n_sroa_1_4_extract_shift$0) (i32.and @@ -32231,11 +32168,8 @@ (get_local $$n_sroa_0_0_extract_trunc) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (i32.const 0) ) ) @@ -32596,11 +32530,8 @@ (get_local $$r_sroa_0_1_lcssa) ) ) - (i32.store align=4 - (i32.add - (get_local $$rem) - (i32.const 4) - ) + (i32.store offset=4 align=4 + (get_local $$rem) (get_local $$r_sroa_1_1_lcssa) ) ) |