diff options
-rw-r--r-- | src/passes/RemoveUnusedNames.cpp | 24 | ||||
-rw-r--r-- | test/emcc_O2_hello_world.fromasm | 38 | ||||
-rw-r--r-- | test/emcc_hello_world.fromasm | 68 | ||||
-rw-r--r-- | test/unit.fromasm | 4 |
4 files changed, 66 insertions, 68 deletions
diff --git a/src/passes/RemoveUnusedNames.cpp b/src/passes/RemoveUnusedNames.cpp index 9c0b4a83f..62de48567 100644 --- a/src/passes/RemoveUnusedNames.cpp +++ b/src/passes/RemoveUnusedNames.cpp @@ -24,25 +24,23 @@ namespace wasm { struct RemoveUnusedNames : public Pass { - std::set<Name> used; - - void prepare(PassRunner* runner, Module *module) override { - struct Scanner : public WasmWalker { - std::set<Name>& used; - Scanner(std::set<Name>& used) : used(used) {} - void visitBreak(Break *curr) override { - used.insert(curr->name); - } - }; - Scanner scanner(used); - scanner.startWalk(module); + // We maintain a list of branches that we saw in children, then when we reach + // a parent block, we know if it was branched to + std::set<Name> branchesSeen; + + void visitBreak(Break *curr) override { + branchesSeen.insert(curr->name); } void visitBlock(Block *curr) override { - if (curr->name.is() && used.count(curr->name) == 0) { + if (curr->name.is() && branchesSeen.count(curr->name) == 0) { curr->name = Name(); } } + + void visitFunction(Function *curr) override { + branchesSeen.clear(); + } }; static RegisterPass<RemoveUnusedNames> registerPass("remove-unused-names", "removes names from locations that are never branched to"); diff --git a/test/emcc_O2_hello_world.fromasm b/test/emcc_O2_hello_world.fromasm index 5104fbb2b..736e6bd6d 100644 --- a/test/emcc_O2_hello_world.fromasm +++ b/test/emcc_O2_hello_world.fromasm @@ -9280,7 +9280,7 @@ (local $i22 i32) (local $i23 i32) (local $i24 i32) - (block $topmost + (block (set_local $i4 (i32.load align=4 (i32.const 8) @@ -9743,7 +9743,7 @@ (local $i13 i32) (local $i14 i32) (local $i15 i32) - (block $topmost + (block (set_local $i4 (i32.add (get_local $i3) @@ -10008,7 +10008,7 @@ (local $i6 i32) (local $i7 i32) (local $i8 i32) - (block $topmost + (block (block $do-once$0 (if_else (get_local $i1) @@ -10207,7 +10207,7 @@ (local $i9 i32) (local $i10 i32) (local $i11 i32) - (block $topmost + (block (set_local $i2 (get_local $i1) ) @@ -10411,7 +10411,7 @@ (local $i9 i32) (local $i10 i32) (local $i11 i32) - (block $topmost + (block (set_local $i3 (i32.load align=4 (i32.const 8) @@ -10594,7 +10594,7 @@ (local $i6 i32) (local $i7 i32) (local $i8 i32) - (block $topmost + (block (set_local $i2 (i32.add (get_local $i1) @@ -10897,7 +10897,7 @@ (local $i5 i32) (local $i6 i32) (local $i7 i32) - (block $topmost + (block (set_local $i4 (i32.add (get_local $i1) @@ -11055,7 +11055,7 @@ (local $i4 i32) (local $i5 i32) (local $i6 i32) - (block $topmost + (block (set_local $i2 (i32.load align=4 (i32.const 52) @@ -11180,7 +11180,7 @@ (local $i5 i32) (local $i6 i32) (local $i7 i32) - (block $topmost + (block (set_local $i4 (i32.load align=4 (i32.const 8) @@ -11277,7 +11277,7 @@ (local $i2 i32) (local $i3 i32) (local $i4 i32) - (block $topmost + (block (set_local $i2 (i32.add (get_local $i1) @@ -11390,7 +11390,7 @@ (local $i7 i32) (local $i8 i32) (local $i9 i32) - (block $topmost + (block (set_local $i5 (i32.mul (get_local $i3) @@ -11467,7 +11467,7 @@ (func $___stdout_write (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) (local $i4 i32) (local $i5 i32) - (block $topmost + (block (set_local $i4 (i32.load align=4 (i32.const 8) @@ -11679,7 +11679,7 @@ (func $___stdio_close (param $i1 i32) (result i32) (local $i2 i32) (local $i3 i32) - (block $topmost + (block (set_local $i2 (i32.load align=4 (i32.const 8) @@ -11777,7 +11777,7 @@ ) (func $___syscall_ret (param $i1 i32) (result i32) (local $i2 i32) - (block $topmost + (block (if_else (i32.gt_u (get_local $i1) @@ -11818,7 +11818,7 @@ ) (func $stackAlloc (param $i1 i32) (result i32) (local $i2 i32) - (block $topmost + (block (set_local $i2 (i32.load align=4 (i32.const 8) @@ -11850,7 +11850,7 @@ ) (func $___errno_location (result i32) (local $i1 i32) - (block $topmost + (block (if_else (i32.eq (i32.load align=4 @@ -11962,7 +11962,7 @@ ) ) (func $b1 (param $i1 i32) (param $i2 i32) (param $i3 i32) (result i32) - (block $topmost + (block (call_import $abort (i32.const 1) ) @@ -11982,7 +11982,7 @@ ) ) (func $b0 (param $i1 i32) (result i32) - (block $topmost + (block (call_import $abort (i32.const 0) ) @@ -12003,7 +12003,7 @@ ) ) (func $_main (result i32) - (block $topmost + (block (call $_puts (i32.const 672) ) diff --git a/test/emcc_hello_world.fromasm b/test/emcc_hello_world.fromasm index b578f9caf..5e1a98ac3 100644 --- a/test/emcc_hello_world.fromasm +++ b/test/emcc_hello_world.fromasm @@ -47,7 +47,7 @@ (table $b0 $___stdio_close $b1 $b1 $___stdout_write $___stdio_seek $___stdio_write $b1 $b1 $b1 $b2 $b2 $b2 $b2 $b2 $_cleanup $b2 $b2) (func $stackAlloc (param $size i32) (result i32) (local $ret i32) - (block $topmost + (block (set_local $ret (i32.load align=4 (i32.const 8) @@ -311,7 +311,7 @@ (local $$vararg_buffer i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -374,7 +374,7 @@ (local $$x$addr$0 f64) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -554,7 +554,7 @@ (local $$call f64) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -591,7 +591,7 @@ (local $$tobool8 i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -802,7 +802,7 @@ (local $$tobool i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -855,7 +855,7 @@ (local $$vararg_buffer i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -934,7 +934,7 @@ (local $$write i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -1096,7 +1096,7 @@ (local $$vararg_ptr4 i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -1271,7 +1271,7 @@ (local $$wpos i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -1568,7 +1568,7 @@ (local $$call i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -1623,7 +1623,7 @@ (func $___lockfile (param $$f i32) (result i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -1716,7 +1716,7 @@ (local $$wpos i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -2358,7 +2358,7 @@ (local $label i32) (local $sp i32) (local $stop i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -2830,7 +2830,7 @@ (local $$write15 i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -3212,7 +3212,7 @@ (local $$wpos i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -3435,7 +3435,7 @@ (local $$tobool i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -3825,7 +3825,7 @@ (local $$tobool i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -3917,7 +3917,7 @@ (local $$xor i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -4456,7 +4456,7 @@ (local $$sub i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -4519,7 +4519,7 @@ (local $$write i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -5815,7 +5815,7 @@ (local $$z$7$ph$i i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -15939,7 +15939,7 @@ (local $$y$010 i32) (local $label i32) (local $sp i32) - (block $topmost + (block (set_local $sp (i32.load align=4 (i32.const 8) @@ -30468,7 +30468,7 @@ (func $_i64Subtract (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) (local $l i32) (local $h i32) - (block $topmost + (block (set_local $l (i32.sub (get_local $a) @@ -30505,7 +30505,7 @@ (func $_i64Add (param $a i32) (param $b i32) (param $c i32) (param $d i32) (result i32) (local $l i32) (local $h i32) - (block $topmost + (block (set_local $l (i32.add (get_local $a) @@ -30538,7 +30538,7 @@ (local $value4 i32) (local $stop4 i32) (local $unaligned i32) - (block $topmost + (block (set_local $stop (i32.add (get_local $ptr) @@ -31144,7 +31144,7 @@ (local $$8 i32) (local $$11 i32) (local $$12 i32) - (block $topmost + (block (set_local $$1 (i32.and (get_local $$a) @@ -31250,7 +31250,7 @@ (local $$7$1 i32) (local $$8$0 i32) (local $$10$0 i32) - (block $topmost + (block (set_local $$1$0 (i32.or (i32.shr_s @@ -31428,7 +31428,7 @@ (local $$10$0 i32) (local $$10$1 i32) (local $__stackBase__ i32) - (block $topmost + (block (set_local $__stackBase__ (i32.load align=4 (i32.const 8) @@ -31623,7 +31623,7 @@ (local $$1$0 i32) (local $$1$1 i32) (local $$2 i32) - (block $topmost + (block (set_local $$x_sroa_0_0_extract_trunc (get_local $$a$0) ) @@ -31679,7 +31679,7 @@ ) (func $___udivdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) (local $$1$0 i32) - (block $topmost + (block (set_local $$1$0 (call $___udivmoddi4 (get_local $$a$0) @@ -31695,7 +31695,7 @@ (func $___uremdi3 (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32) (local $$rem i32) (local $__stackBase__ i32) - (block $topmost + (block (set_local $__stackBase__ (i32.load align=4 (i32.const 8) @@ -33032,7 +33032,7 @@ ) ) (func $b0 (param $p0 i32) (result i32) - (block $topmost + (block (call_import $nullFunc_ii (i32.const 0) ) @@ -33040,7 +33040,7 @@ ) ) (func $b1 (param $p0 i32) (param $p1 i32) (param $p2 i32) (result i32) - (block $topmost + (block (call_import $nullFunc_iiii (i32.const 1) ) diff --git a/test/unit.fromasm b/test/unit.fromasm index 4b95dfea1..df54513fa 100644 --- a/test/unit.fromasm +++ b/test/unit.fromasm @@ -261,7 +261,7 @@ ) (func $big_uint_div_u (result i32) (local $x i32) - (block $topmost + (block (set_local $x (i32.and (i32.div_u @@ -369,7 +369,7 @@ (func $smallCompare (result i32) (local $i i32) (local $j i32) - (block $topmost + (block (if (i32.lt_s (get_local $i) |