test legalizer target x86_64 ; Test legalization for various forms of table addresses. function %table_addrs(i32, i64, i64 vmctx) { gv4 = vmctx gv0 = iadd_imm.i64 gv4, 72 gv1 = iadd_imm.i64 gv4, 80 gv2 = load.i32 notrap aligned gv4+88 table0 = dynamic gv0, min 0x1_0000, bound gv2, element_size 1, index_type i32 table1 = dynamic gv0, bound gv2, element_size 16, index_type i32 table2 = dynamic gv0, min 0x1_0000, bound gv1, element_size 1, index_type i64 table3 = dynamic gv0, bound gv1, element_size 16, index_type i64 ; check: table0 = dynamic gv0, min 0x0001_0000, bound gv2, element_size 1, index_type i32 ; check: table1 = dynamic gv0, min 0, bound gv2, element_size 16, index_type i32 ; check: table2 = dynamic gv0, min 0x0001_0000, bound gv1, element_size 1, index_type i64 ; check: table3 = dynamic gv0, min 0, bound gv1, element_size 16, index_type i64 ebb0(v0: i32, v1: i64, v3: i64): v4 = table_addr.i64 table0, v0, +0 ; check: v8 = load.i32 notrap aligned v3+88 ; check: v9 = icmp uge v0, v8 ; check: brz v9, ebb1 ; check: trap table_oob ; check: ebb1: ; check: v10 = uextend.i64 v0 ; check: v11 = iadd_imm.i64 v3, 72 ; check: v4 = iadd v11, v10 v5 = table_addr.i64 table1, v0, +0 ; check: v12 = load.i32 notrap aligned v3+88 ; check: v13 = icmp.i32 uge v0, v12 ; check: brz v13, ebb2 ; check: trap table_oob ; check: ebb2: ; check: v14 = uextend.i64 v0 ; check: v15 = iadd_imm.i64 v3, 72 ; check: v16 = ishl_imm v14, 4 ; check: v5 = iadd v15, v16 v6 = table_addr.i64 table2, v1, +0 ; check: v17 = iadd_imm.i64 v3, 80 ; check: v18 = icmp.i64 uge v1, v17 ; check: brz v18, ebb3 ; check: trap table_oob ; check: ebb3: ; check: v19 = iadd_imm.i64 v3, 72 ; check: v6 = iadd v19, v1 v7 = table_addr.i64 table3, v1, +0 ; check: v20 = iadd_imm.i64 v3, 80 ; check: v21 = icmp.i64 uge v1, v20 ; check: brz v21, ebb4 ; check: trap table_oob ; check: ebb4: ; check: v22 = iadd_imm.i64 v3, 72 ; check: v23 = ishl_imm.i64 v1, 4 ; check: v7 = iadd v22, v23 return }