diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-04-28 10:48:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-28 10:48:27 -0700 |
commit | 5d4f9eb82226acc0fdb5e2dea1a04e17c340c371 (patch) | |
tree | b1b18217aec65f04da0080a1d6d2266489d56db7 /test/debugInfo.fromasm.imprecise.no-opts | |
parent | a0b162d13c7e8d5df1f1b6e33efd4d9e3f699aa9 (diff) | |
download | binaryen-5d4f9eb82226acc0fdb5e2dea1a04e17c340c371.tar.gz binaryen-5d4f9eb82226acc0fdb5e2dea1a04e17c340c371.tar.bz2 binaryen-5d4f9eb82226acc0fdb5e2dea1a04e17c340c371.zip |
Preserve debug info through the optimizer (#981)
* add debugInfo option to passes, and use it to keep debug info alive through optimizations when we need it
* add fib testcase for debug info
* when preserving debug info, do not move code around call-imports, so debug info intrinsics remain stationary
* improve wasm-module-building handling of the single-threaded case: don't create workers, which is more efficient and also nicer for debugging
* process debug info in a more precise way, reordering it from being after the node (as it was a comment in JS) to before the node
* remove unreachable hack for debug info, which is no longer needed since we reorder them, and make sure to finalize blocks in which we reorder
Diffstat (limited to 'test/debugInfo.fromasm.imprecise.no-opts')
-rw-r--r-- | test/debugInfo.fromasm.imprecise.no-opts | 200 |
1 files changed, 199 insertions, 1 deletions
diff --git a/test/debugInfo.fromasm.imprecise.no-opts b/test/debugInfo.fromasm.imprecise.no-opts index 06066ff29..4bea2c355 100644 --- a/test/debugInfo.fromasm.imprecise.no-opts +++ b/test/debugInfo.fromasm.imprecise.no-opts @@ -4,9 +4,12 @@ (import "env" "table" (table 0 0 anyfunc)) (import "env" "memoryBase" (global $memoryBase i32)) (import "env" "tableBase" (global $tableBase i32)) + (global $STACKTOP (mut i32) (i32.const 0)) (export "add" (func $add)) (export "ret" (func $ret)) (export "opts" (func $opts)) + (export "fib" (func $fib)) + (export "switch_reach" (func $switch_reach)) (func $add (param $x i32) (param $y i32) (result i32) ;; tests/hello_world.c:5 (set_local $x @@ -42,7 +45,6 @@ (i32.const 1) ) ) - (unreachable) ) (func $opts (param $x i32) (param $y i32) (result i32) ;; even-opted.cpp:1 @@ -73,4 +75,200 @@ ) ) ) + (func $fib (param $$0 i32) (result i32) + (local $$$0$lcssa i32) + (local $$$01518 i32) + (local $$$01518$phi i32) + (local $$$01617 i32) + (local $$$019 i32) + (local $$1 i32) + (local $$2 i32) + (local $$3 i32) + (local $$exitcond i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + ;; fib.c:3 + (set_local $$1 + (i32.gt_s + (get_local $$0) + (i32.const 0) + ) + ) + (if + (get_local $$1) + (block + (set_local $$$01518 + (i32.const 0) + ) + (set_local $$$01617 + (i32.const 0) + ) + (set_local $$$019 + (i32.const 1) + ) + ) + (block + (set_local $$$0$lcssa + (i32.const 1) + ) + ;; fib.c:8 + (return + (get_local $$$0$lcssa) + ) + ) + ) + (loop $while-in + (block $while-out + ;; fib.c:4 + (set_local $$2 + (i32.add + (get_local $$$019) + (get_local $$$01518) + ) + ) + ;; fib.c:3 + (set_local $$3 + (i32.add + (get_local $$$01617) + (i32.const 1) + ) + ) + ;; fib.c:3 + (set_local $$exitcond + (i32.eq + (get_local $$3) + (get_local $$0) + ) + ) + (if + (get_local $$exitcond) + (block + (set_local $$$0$lcssa + (get_local $$2) + ) + (br $while-out) + ) + (block + (set_local $$$01518$phi + (get_local $$$019) + ) + (set_local $$$01617 + (get_local $$3) + ) + (set_local $$$019 + (get_local $$2) + ) + (set_local $$$01518 + (get_local $$$01518$phi) + ) + ) + ) + (br $while-in) + ) + ) + ;; fib.c:8 + (return + (get_local $$$0$lcssa) + ) + ) + (func $switch_reach (param $$p i32) (result i32) + (local $$0 i32) + (local $$call i32) + (local $$magic i32) + (local $$rc$0 i32) + (local $$switch$split2D i32) + (local $label i32) + (local $sp i32) + (set_local $sp + (get_global $STACKTOP) + ) + (set_local $$magic + (i32.add + (get_local $$p) + (i32.const 52) + ) + ) + (set_local $$0 + (get_local $$magic) + ) + (set_local $$switch$split2D + (i32.lt_s + (get_local $$0) + (i32.const 1369188723) + ) + ) + (if + (get_local $$switch$split2D) + (block $switch + (block $switch-default + (block $switch-case + (br_table $switch-case $switch-default + (i32.sub + (get_local $$0) + (i32.const -1108210269) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + (block $switch0 + (block $switch-default2 + (block $switch-case1 + (br_table $switch-case1 $switch-default2 + (i32.sub + (get_local $$0) + (i32.const 1369188723) + ) + ) + ) + (block + (set_local $label + (i32.const 2) + ) + (br $switch0) + ) + ) + (set_local $$rc$0 + (i32.const 0) + ) + ) + ) + (if + (i32.eq + (get_local $label) + (i32.const 2) + ) + (block + (set_local $$call + (call $switch_reach + (get_local $$p) + ) + ) + (set_local $$rc$0 + (get_local $$call) + ) + ) + ) + (drop + (call $switch_reach + (get_local $$p) + ) + ) + ;; /tmp/emscripten_test_binaryen2_28hnAe/src.c:59950 + (return + (get_local $$rc$0) + ) + ) ) |