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:
@@ -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]"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user