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

@@ -416,12 +416,10 @@ mod tests {
let func = setup!(0, [0, 1,]);
assert_eq_output!(
func,
" jt0 = jump_table [block1, block2]
block0:
"block0:
v0 = iconst.i8 0
v1 = uextend.i32 v0 ; v0 = 0
br_table v1, block0, jt0"
br_table v1, block0, [block1, block2]"
);
}
@@ -445,10 +443,7 @@ block3:
let func = setup!(0, [0, 1, 5, 7, 10, 11, 12,]);
assert_eq_output!(
func,
" jt0 = jump_table [block5, block6, block7]
jt1 = jump_table [block1, block2]
block0:
"block0:
v0 = iconst.i8 0
v1 = icmp_imm uge v0, 7 ; v0 = 0
brif v1, block9, block8
@@ -460,7 +455,7 @@ block9:
block11:
v3 = iadd_imm.i8 v0, -10 ; v0 = 0
v4 = uextend.i32 v3
br_table v4, block0, jt0
br_table v4, block0, [block5, block6, block7]
block10:
v5 = icmp_imm.i8 eq v0, 7 ; v0 = 0
@@ -472,7 +467,7 @@ block8:
block12:
v7 = uextend.i32 v0 ; v0 = 0
br_table v7, block0, jt1"
br_table v7, block0, [block1, block2]"
);
}
@@ -513,16 +508,14 @@ block3:
let func = setup!(0, [-1i8 as u8 as u128, 0, 1,]);
assert_eq_output!(
func,
" jt0 = jump_table [block2, block3]
block0:
"block0:
v0 = iconst.i8 0
v1 = icmp_imm eq v0, 255 ; v0 = 0
brif v1, block1, block4
block4:
v2 = uextend.i32 v0 ; v0 = 0
br_table v2, block0, jt0"
br_table v2, block0, [block2, block3]"
);
}
@@ -607,16 +600,14 @@ block4:
.to_string();
assert_eq_output!(
func,
" jt0 = jump_table [block2, block1]
block0:
"block0:
v0 = iconst.i64 0
v1 = icmp_imm ugt v0, 0xffff_ffff ; v0 = 0
brif v1, block3, block4
block4:
v2 = ireduce.i32 v0 ; v0 = 0
br_table v2, block3, jt0"
br_table v2, block3, [block2, block1]"
);
}
@@ -645,9 +636,7 @@ block4:
.to_string();
assert_eq_output!(
func,
" jt0 = jump_table [block2, block1]
block0:
"block0:
v0 = iconst.i64 0
v1 = uextend.i128 v0 ; v0 = 0
v2 = icmp_imm ugt v1, 0xffff_ffff
@@ -655,7 +644,7 @@ block0:
block4:
v3 = ireduce.i32 v1
br_table v3, block3, jt0"
br_table v3, block3, [block2, block1]"
);
}
}