cranelift: Restrict br_table to i32 indices (#4510)

* cranelift: Restrict `br_table` to `i32` indices

In #4498 it was proposed that we should only accept `i32` indices
to `br_table`. The rationale for this is that larger types lead the
users to a false sense of flexibility (since we don't support jump
tables larger than u32's), and narrower types are not well tested
paths that would be safer if we removed them.

* cranelift: Reduce directly from i128 to i32 in Switch
This commit is contained in:
Afonso Bordado
2022-07-23 00:32:40 +01:00
committed by GitHub
parent f1a0c40a53
commit af62037f62
10 changed files with 76 additions and 175 deletions

View File

@@ -4,79 +4,6 @@ target aarch64
target x86_64
target s390x
function %br_table_i8(i8) -> i8 {
jt0 = jump_table [block1, block2, block2, block3]
block0(v0: i8):
br_table v0, block4, jt0
block1:
v1 = iconst.i8 1
jump block5(v1)
block2:
v2 = iconst.i8 2
jump block5(v2)
block3:
v3 = iconst.i8 3
jump block5(v3)
block4:
v4 = iconst.i8 4
jump block5(v4)
block5(v5: i8):
v6 = iadd.i8 v0, v5
return v6
}
; run: %br_table_i8(0) == 1
; run: %br_table_i8(1) == 3
; run: %br_table_i8(2) == 4
; run: %br_table_i8(3) == 6
; run: %br_table_i8(4) == 8
; run: %br_table_i8(5) == 9
; run: %br_table_i8(6) == 10
; run: %br_table_i8(-1) == 3
function %br_table_i16(i16) -> i16 {
jt0 = jump_table [block1, block2, block2, block3]
block0(v0: i16):
br_table v0, block4, jt0
block1:
v1 = iconst.i16 1
jump block5(v1)
block2:
v2 = iconst.i16 2
jump block5(v2)
block3:
v3 = iconst.i16 3
jump block5(v3)
block4:
v4 = iconst.i16 4
jump block5(v4)
block5(v5: i16):
v6 = iadd.i16 v0, v5
return v6
}
; run: %br_table_i16(0) == 1
; run: %br_table_i16(1) == 3
; run: %br_table_i16(2) == 4
; run: %br_table_i16(3) == 6
; run: %br_table_i16(4) == 8
; run: %br_table_i16(5) == 9
; run: %br_table_i16(6) == 10
; run: %br_table_i16(-1) == 3
function %br_table_i32(i32) -> i32 {
jt0 = jump_table [block1, block2, block2, block3]
@@ -111,39 +38,3 @@ block5(v5: i32):
; run: %br_table_i32(5) == 9
; run: %br_table_i32(6) == 10
; run: %br_table_i32(-1) == 3
function %br_table_i64(i64) -> i64 {
jt0 = jump_table [block1, block2, block2, block3]
block0(v0: i64):
br_table v0, block4, jt0
block1:
v1 = iconst.i64 1
jump block5(v1)
block2:
v2 = iconst.i64 2
jump block5(v2)
block3:
v3 = iconst.i64 3
jump block5(v3)
block4:
v4 = iconst.i64 4
jump block5(v4)
block5(v5: i64):
v6 = iadd.i64 v0, v5
return v6
}
; run: %br_table_i64(0) == 1
; run: %br_table_i64(1) == 3
; run: %br_table_i64(2) == 4
; run: %br_table_i64(3) == 6
; run: %br_table_i64(4) == 8
; run: %br_table_i64(5) == 9
; run: %br_table_i64(6) == 10
; run: %br_table_i64(-1) == 3