Remove the concept of non-dense jump tables.

WebAssembly doesn't have non-dense jump tables, and higher-level users
are better served by the facilities in lib/frontend/src/switch.rs for
working with non-dense switches.

This eliminates the concept of "absent" jump table entries, which
were represented as "0" in the text format.

Also, jump table contents are now enclosed in `[` and `]`, so that
we can unambiguously display empty jump tables. Previously, empty jump
tables were displayed as if they had a single absent entry.
This commit is contained in:
Dan Gohman
2018-10-04 10:35:31 -07:00
parent dc9221a70c
commit 1098eafb45
22 changed files with 113 additions and 208 deletions

View File

@@ -672,8 +672,8 @@ impl SSABuilder {
}
for old_dest in func.jump_tables[jt].as_mut_slice() {
if *old_dest == PackedOption::from(dest_ebb) {
*old_dest = PackedOption::from(middle_ebb);
if *old_dest == dest_ebb {
*old_dest = middle_ebb;
}
}
let mut cur = FuncCursor::new(func).at_bottom(middle_ebb);
@@ -1005,7 +1005,7 @@ mod tests {
// Here is the pseudo-program we want to translate:
//
// function %f {
// jt = jump_table ebb2, 0, ebb1
// jt = jump_table [ebb2, ebb1]
// ebb0:
// x = 1;
// br_table x, ebb2, jt
@@ -1039,9 +1039,9 @@ mod tests {
};
ssa.def_var(x_var, x1, block0);
// jt = jump_table ebb2, 0, ebb1
// jt = jump_table [ebb2, ebb1]
jump_table.push_entry(ebb2);
jump_table.set_entry(2, ebb1);
jump_table.push_entry(ebb1);
let jt = func.create_jump_table(jump_table);
// ebb0: