Inline jump tables in parsed br_table instructions (#5755)

As jump tables are used by at most one br_table instruction, inline their definition in those instructions instead of requiring them to be declared as function-level metadata.
This commit is contained in:
Trevor Elliott
2023-02-09 14:24:04 -08:00
committed by GitHub
parent 202d3af16a
commit 15fe9c7c93
23 changed files with 54 additions and 200 deletions

View File

@@ -3,10 +3,8 @@ set unwind_info=false
target aarch64 use_bti
function %f1(i32) -> i32 {
jt0 = jump_table [block1, block2, block3]
block0(v0: i32):
br_table v0, block4, jt0
br_table v0, block4, [block1, block2, block3]
block1:
v1 = iconst.i32 1
@@ -62,12 +60,10 @@ block5(v5: i32):
; ret
function %f2(i64) -> i64 {
jt0 = jump_table [block2]
block0(v0: i64):
v1 = ireduce.i32 v0
v2 = load.i64 notrap aligned table v0
br_table v1, block1, jt0
br_table v1, block1, [block2]
block1:
return v2

View File

@@ -3,10 +3,8 @@ set unwind_info=false
target aarch64
function %f(i32) -> i32 {
jt0 = jump_table [block1, block2, block3]
block0(v0: i32):
br_table v0, block4, jt0
br_table v0, block4, [block1, block2, block3]
block1:
v1 = iconst.i32 1

View File

@@ -2,10 +2,8 @@ test compile precise-output
target s390x
function %f(i32) -> i32 {
jt0 = jump_table [block1, block2, block3]
block0(v0: i32):
br_table v0, block4, jt0
br_table v0, block4, [block1, block2, block3]
block1:
v1 = iconst.i32 1

View File

@@ -34,7 +34,6 @@ function u0:31(i64, i32, i32, i8, i8) -> i32, i32 system_v {
fn3 = colocated u0:11 sig3
fn4 = u0:110 sig4
fn5 = u0:110 sig5
jt0 = jump_table [block2, block4, block5, block6, block7]
block0(v0: i64, v1: i32, v2: i32, v3: i8, v4: i8):
v34 -> v0
@@ -82,7 +81,7 @@ function u0:31(i64, i32, i32, i8, i8) -> i32, i32 system_v {
@0005 jump block37
block37:
@0005 br_table v10, block36, jt0
@0005 br_table v10, block36, [block2, block4, block5, block6, block7]
block2:
@0001 v11 = stack_load.i8 ss3+1

View File

@@ -181,10 +181,8 @@ block2:
; ret
function %f5(i32) -> i8 {
jt0 = jump_table [block1, block2]
block0(v0: i32):
br_table v0, block1, jt0
br_table v0, block1, [block1, block2]
block1:
v1 = iconst.i8 1

View File

@@ -1,22 +0,0 @@
test compile precise-output
target x86_64
;; From: https://github.com/bytecodealliance/wasmtime/issues/2670
function %f() system_v {
jt0 = jump_table [block1]
block0:
return
block1:
trap unreachable
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movq %rbp, %rsp
; popq %rbp
; ret