summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2019-01-29 12:39:02 -0800
committerGitHub <noreply@github.com>2019-01-29 12:39:02 -0800
commit5f1afa58d22dce1088c63eff690283d8c615feee (patch)
tree6c59a39af79f789f1c65d00c72a960f222b9f845 /test
parent5bfb98b97c18342d851d2e0841a3091ae671f88c (diff)
downloadbinaryen-5f1afa58d22dce1088c63eff690283d8c615feee.tar.gz
binaryen-5f1afa58d22dce1088c63eff690283d8c615feee.tar.bz2
binaryen-5f1afa58d22dce1088c63eff690283d8c615feee.zip
wasm-emscripten-finalize: Emit illegal dynCalls, and legalize them (#1890)
Before this, we just did not emit illegal dynCalls. This was wrong as we do need them (e.g. if a function with a setjmp call calls a function with an i64 param - we'll have an invoke with that signature there). We just need to legalize them. This fixes that by first emitting them, and second by running legalization late, after dynCalls have been generated, so it legalizes them too.
Diffstat (limited to 'test')
-rw-r--r--test/lld/duplicate_imports.wast.out62
-rw-r--r--test/lld/reserved_func_ptr.wast.jscall.out23
-rw-r--r--test/passes/fpcast-emu.txt134
3 files changed, 176 insertions, 43 deletions
diff --git a/test/lld/duplicate_imports.wast.out b/test/lld/duplicate_imports.wast.out
index 58f5846e6..3a9fa2474 100644
--- a/test/lld/duplicate_imports.wast.out
+++ b/test/lld/duplicate_imports.wast.out
@@ -39,7 +39,35 @@
(func $__wasm_call_ctors (; 5 ;) (type $2)
(nop)
)
- (func $legalfunc$puts2 (; 6 ;) (param $0 i64) (result i32)
+ (func $stackSave (; 6 ;) (result i32)
+ (global.get $global$0)
+ )
+ (func $stackAlloc (; 7 ;) (param $0 i32) (result i32)
+ (local $1 i32)
+ (global.set $global$0
+ (local.tee $1
+ (i32.and
+ (i32.sub
+ (global.get $global$0)
+ (local.get $0)
+ )
+ (i32.const -16)
+ )
+ )
+ )
+ (local.get $1)
+ )
+ (func $stackRestore (; 8 ;) (param $0 i32)
+ (global.set $global$0
+ (local.get $0)
+ )
+ )
+ (func $__growWasmMemory (; 9 ;) (param $newSize i32) (result i32)
+ (grow_memory
+ (local.get $newSize)
+ )
+ )
+ (func $legalfunc$puts2 (; 10 ;) (param $0 i64) (result i32)
(call $legalimport$puts2
(i32.wrap_i64
(local.get $0)
@@ -52,7 +80,7 @@
)
)
)
- (func $legalfunc$invoke_ffd (; 7 ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32)
+ (func $legalfunc$invoke_ffd (; 11 ;) (param $0 i32) (param $1 f32) (param $2 f64) (result f32)
(f32.demote_f64
(call $legalimport$invoke_ffd
(local.get $0)
@@ -63,7 +91,7 @@
)
)
)
- (func $legalfunc$invoke_ffd2 (; 8 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f32)
+ (func $legalfunc$invoke_ffd2 (; 12 ;) (param $0 i32) (param $1 f64) (param $2 f64) (result f32)
(f32.demote_f64
(call $legalimport$invoke_ffd2
(local.get $0)
@@ -72,34 +100,6 @@
)
)
)
- (func $stackSave (; 9 ;) (result i32)
- (global.get $global$0)
- )
- (func $stackAlloc (; 10 ;) (param $0 i32) (result i32)
- (local $1 i32)
- (global.set $global$0
- (local.tee $1
- (i32.and
- (i32.sub
- (global.get $global$0)
- (local.get $0)
- )
- (i32.const -16)
- )
- )
- )
- (local.get $1)
- )
- (func $stackRestore (; 11 ;) (param $0 i32)
- (global.set $global$0
- (local.get $0)
- )
- )
- (func $__growWasmMemory (; 12 ;) (param $newSize i32) (result i32)
- (grow_memory
- (local.get $newSize)
- )
- )
)
(;
--BEGIN METADATA --
diff --git a/test/lld/reserved_func_ptr.wast.jscall.out b/test/lld/reserved_func_ptr.wast.jscall.out
index bc9b677d6..e176ba231 100644
--- a/test/lld/reserved_func_ptr.wast.jscall.out
+++ b/test/lld/reserved_func_ptr.wast.jscall.out
@@ -18,13 +18,14 @@
(type $FUNCSIG$v (func))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $legaltype$jsCall_fffi (func (param i32 f64 f64 i32) (result f64)))
(import "env" "_Z4atoiPKc" (func $_Z4atoiPKc (param i32) (result i32)))
(import "env" "jsCall_ddi" (func $jsCall_ddi (param i32 f64 i32) (result f64)))
- (import "env" "jsCall_fffi" (func $jsCall_fffi (param i32 f32 f32 i32) (result f32)))
(import "env" "jsCall_iii" (func $jsCall_iii (param i32 i32 i32) (result i32)))
(import "env" "jsCall_v" (func $jsCall_v (param i32)))
(import "env" "jsCall_vi" (func $jsCall_vi (param i32 i32)))
(import "env" "jsCall_viii" (func $jsCall_viii (param i32 i32 i32 i32)))
+ (import "env" "jsCall_fffi" (func $legalimport$jsCall_fffi (param i32 f64 f64 i32) (result f64)))
(memory $0 2)
(table $0 21 21 funcref)
(elem (i32.const 1) $_Z18address_taken_funciii $_Z19address_taken_func2iii $jsCall_ddi_0 $jsCall_ddi_1 $jsCall_ddi_2 $jsCall_fffi_0 $jsCall_fffi_1 $jsCall_fffi_2 $jsCall_iii_0 $jsCall_iii_1 $jsCall_iii_2 $jsCall_v_0 $jsCall_v_1 $jsCall_v_2 $jsCall_vi_0 $jsCall_vi_1 $jsCall_vi_2 $jsCall_viii_0 $jsCall_viii_1 $jsCall_viii_2)
@@ -192,7 +193,7 @@
)
)
(func $jsCall_fffi_0 (; 19 ;) (param $0 f32) (param $1 f32) (param $2 i32) (result f32)
- (call $jsCall_fffi
+ (call $legalfunc$jsCall_fffi
(i32.const 0)
(local.get $0)
(local.get $1)
@@ -200,7 +201,7 @@
)
)
(func $jsCall_fffi_1 (; 20 ;) (param $0 f32) (param $1 f32) (param $2 i32) (result f32)
- (call $jsCall_fffi
+ (call $legalfunc$jsCall_fffi
(i32.const 1)
(local.get $0)
(local.get $1)
@@ -208,7 +209,7 @@
)
)
(func $jsCall_fffi_2 (; 21 ;) (param $0 f32) (param $1 f32) (param $2 i32) (result f32)
- (call $jsCall_fffi
+ (call $legalfunc$jsCall_fffi
(i32.const 2)
(local.get $0)
(local.get $1)
@@ -293,6 +294,20 @@
(local.get $2)
)
)
+ (func $legalfunc$jsCall_fffi (; 34 ;) (param $0 i32) (param $1 f32) (param $2 f32) (param $3 i32) (result f32)
+ (f32.demote_f64
+ (call $legalimport$jsCall_fffi
+ (local.get $0)
+ (f64.promote_f32
+ (local.get $1)
+ )
+ (f64.promote_f32
+ (local.get $2)
+ )
+ (local.get $3)
+ )
+ )
+ )
)
(;
--BEGIN METADATA --
diff --git a/test/passes/fpcast-emu.txt b/test/passes/fpcast-emu.txt
index a4e79a85a..c1a76b1d3 100644
--- a/test/passes/fpcast-emu.txt
+++ b/test/passes/fpcast-emu.txt
@@ -14,8 +14,12 @@
(import "env" "imported_func" (func $imported-func (param i32 i64 f32 f64) (result f32)))
(table $0 10 10 funcref)
(elem (i32.const 0) $byn$fpcast-emu$a $byn$fpcast-emu$b $byn$fpcast-emu$c $byn$fpcast-emu$d $byn$fpcast-emu$e $byn$fpcast-emu$e $byn$fpcast-emu$imported-func)
+ (export "dynCall_vijfd" (func $dynCall_vijfd))
+ (export "dynCall_jii" (func $dynCall_jii))
+ (export "dynCall_fjj" (func $dynCall_fjj))
(export "dynCall_dff" (func $dynCall_dff))
(export "dynCall_idd" (func $dynCall_idd))
+ (export "dynCall_fijfd" (func $dynCall_fijfd))
(func $a (; 1 ;) (type $vijfd) (param $x i32) (param $y i64) (param $z f32) (param $w f64)
(drop
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
@@ -155,7 +159,88 @@
)
)
)
- (func $dynCall_dff (; 6 ;) (param $fptr i32) (param $0 f32) (param $1 f32) (result f64)
+ (func $dynCall_vijfd (; 6 ;) (param $fptr i32) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64)
+ (drop
+ (call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
+ (i64.extend_i32_u
+ (local.get $0)
+ )
+ (local.get $1)
+ (i64.extend_i32_u
+ (i32.reinterpret_f32
+ (local.get $2)
+ )
+ )
+ (i64.reinterpret_f64
+ (local.get $3)
+ )
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (local.get $fptr)
+ )
+ )
+ )
+ (func $dynCall_jii (; 7 ;) (param $fptr i32) (param $0 i32) (param $1 i32) (result i64)
+ (call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
+ (i64.extend_i32_u
+ (local.get $0)
+ )
+ (i64.extend_i32_u
+ (local.get $1)
+ )
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (local.get $fptr)
+ )
+ )
+ (func $dynCall_fjj (; 8 ;) (param $fptr i32) (param $0 i64) (param $1 i64) (result f32)
+ (f32.reinterpret_i32
+ (i32.wrap_i64
+ (call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
+ (local.get $0)
+ (local.get $1)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (local.get $fptr)
+ )
+ )
+ )
+ )
+ (func $dynCall_dff (; 9 ;) (param $fptr i32) (param $0 f32) (param $1 f32) (result f64)
(f64.reinterpret_i64
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
(i64.extend_i32_u
@@ -186,7 +271,7 @@
)
)
)
- (func $dynCall_idd (; 7 ;) (param $fptr i32) (param $0 f64) (param $1 f64) (result i32)
+ (func $dynCall_idd (; 10 ;) (param $fptr i32) (param $0 f64) (param $1 f64) (result i32)
(i32.wrap_i64
(call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
(i64.reinterpret_f64
@@ -213,7 +298,40 @@
)
)
)
- (func $byn$fpcast-emu$a (; 8 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
+ (func $dynCall_fijfd (; 11 ;) (param $fptr i32) (param $0 i32) (param $1 i64) (param $2 f32) (param $3 f64) (result f32)
+ (f32.reinterpret_i32
+ (i32.wrap_i64
+ (call_indirect (type $FUNCSIG$jjjjjjjjjjjjjjjjj)
+ (i64.extend_i32_u
+ (local.get $0)
+ )
+ (local.get $1)
+ (i64.extend_i32_u
+ (i32.reinterpret_f32
+ (local.get $2)
+ )
+ )
+ (i64.reinterpret_f64
+ (local.get $3)
+ )
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ (local.get $fptr)
+ )
+ )
+ )
+ )
+ (func $byn$fpcast-emu$a (; 12 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
(call $a
(i32.wrap_i64
(local.get $0)
@@ -230,7 +348,7 @@
)
(i64.const 0)
)
- (func $byn$fpcast-emu$b (; 9 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
+ (func $byn$fpcast-emu$b (; 13 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
(call $b
(i32.wrap_i64
(local.get $0)
@@ -240,7 +358,7 @@
)
)
)
- (func $byn$fpcast-emu$c (; 10 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
+ (func $byn$fpcast-emu$c (; 14 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
(i64.extend_i32_u
(i32.reinterpret_f32
(call $c
@@ -250,7 +368,7 @@
)
)
)
- (func $byn$fpcast-emu$d (; 11 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
+ (func $byn$fpcast-emu$d (; 15 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
(i64.reinterpret_f64
(call $d
(f32.reinterpret_i32
@@ -266,7 +384,7 @@
)
)
)
- (func $byn$fpcast-emu$e (; 12 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
+ (func $byn$fpcast-emu$e (; 16 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
(i64.extend_i32_u
(call $e
(f64.reinterpret_i64
@@ -278,7 +396,7 @@
)
)
)
- (func $byn$fpcast-emu$imported-func (; 13 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
+ (func $byn$fpcast-emu$imported-func (; 17 ;) (type $FUNCSIG$jjjjjjjjjjjjjjjjj) (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64) (param $6 i64) (param $7 i64) (param $8 i64) (param $9 i64) (param $10 i64) (param $11 i64) (param $12 i64) (param $13 i64) (param $14 i64) (param $15 i64) (result i64)
(i64.extend_i32_u
(i32.reinterpret_f32
(call $imported-func