Reorganize the global value kinds. (#490)
* Reorganize the global value kinds. This: - renames "deref" global values to "load" and gives it a offset that works like the "load" instructions' does - adds an explicit "iadd_imm" global value kind, which replaces the builtin iadd in "vmctx" and "deref" global values. - also renames "globalsym" to "symbol"
This commit is contained in:
@@ -4,26 +4,24 @@ target x86_64
|
||||
; Test legalization for various forms of table addresses.
|
||||
|
||||
function %table_addrs(i32, i64, i64 vmctx) {
|
||||
gv0 = vmctx+72
|
||||
gv1 = vmctx+80
|
||||
gv2 = vmctx+88
|
||||
gv3 = deref(gv2): i32
|
||||
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 gv3, element_size 1, index_type i32
|
||||
table1 = dynamic gv0, bound gv3, element_size 16, index_type i32
|
||||
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 gv3, element_size 1, index_type i32
|
||||
; check: table1 = dynamic gv0, min 0, bound gv3, element_size 16, index_type i32
|
||||
; 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: v12 = iadd_imm v3, 88
|
||||
; check: v13 = load.i32 notrap aligned v12
|
||||
; check: v8 = iadd_imm v13, 0
|
||||
; check: v8 = load.i32 notrap aligned v3+88
|
||||
; check: v9 = icmp uge v0, v8
|
||||
; check: brz v9, ebb1
|
||||
; check: trap table_oob
|
||||
@@ -33,36 +31,34 @@ ebb0(v0: i32, v1: i64, v3: i64):
|
||||
; check: v4 = iadd v11, v10
|
||||
|
||||
v5 = table_addr.i64 table1, v0, +0
|
||||
; check: v19 = iadd_imm.i64 v3, 88
|
||||
; check: v20 = load.i32 notrap aligned v19
|
||||
; check: v14 = iadd_imm v20, 0
|
||||
; check: v15 = icmp.i32 uge v0, v14
|
||||
; check: brz v15, ebb2
|
||||
; 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: v16 = uextend.i64 v0
|
||||
; check: v17 = iadd_imm.i64 v3, 72
|
||||
; check: v18 = ishl_imm v16, 4
|
||||
; check: v5 = iadd v17, v18
|
||||
; 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: v21 = iadd_imm.i64 v3, 80
|
||||
; check: v22 = icmp.i64 uge v1, v21
|
||||
; check: brz v22, ebb3
|
||||
; 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: v23 = iadd_imm.i64 v3, 72
|
||||
; check: v6 = iadd v23, v1
|
||||
; check: v19 = iadd_imm.i64 v3, 72
|
||||
; check: v6 = iadd v19, v1
|
||||
|
||||
v7 = table_addr.i64 table3, v1, +0
|
||||
; check: v24 = iadd_imm.i64 v3, 80
|
||||
; check: v25 = icmp.i64 uge v1, v24
|
||||
; check: brz v25, ebb4
|
||||
; 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: v26 = iadd_imm.i64 v3, 72
|
||||
; check: v27 = ishl_imm.i64 v1, 4
|
||||
; check: v7 = iadd v26, v27
|
||||
; check: v22 = iadd_imm.i64 v3, 72
|
||||
; check: v23 = ishl_imm.i64 v1, 4
|
||||
; check: v7 = iadd v22, v23
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user