* Manually rename BasicBlock to BlockPredecessor BasicBlock is a pair of (Ebb, Inst) that is used to represent the basic block subcomponent of an Ebb that is a predecessor to an Ebb. Eventually we will be able to remove this struct, but for now it makes sense to give it a non-conflicting name so that we can start to transition Ebb to represent a basic block. I have not updated any comments that refer to BasicBlock, as eventually we will remove BlockPredecessor and replace with Block, which is a basic block, so the comments will become correct. * Manually rename SSABuilder block types to avoid conflict SSABuilder has its own Block and BlockData types. These along with associated identifier will cause conflicts in a later commit, so they are renamed to be more verbose here. * Automatically rename 'Ebb' to 'Block' in *.rs * Automatically rename 'EBB' to 'block' in *.rs * Automatically rename 'ebb' to 'block' in *.rs * Automatically rename 'extended basic block' to 'basic block' in *.rs * Automatically rename 'an basic block' to 'a basic block' in *.rs * Manually update comment for `Block` `Block`'s wikipedia article required an update. * Automatically rename 'an `Block`' to 'a `Block`' in *.rs * Automatically rename 'extended_basic_block' to 'basic_block' in *.rs * Automatically rename 'ebb' to 'block' in *.clif * Manually rename clif constant that contains 'ebb' as substring to avoid conflict * Automatically rename filecheck uses of 'EBB' to 'BB' 'regex: EBB' -> 'regex: BB' '$EBB' -> '$BB' * Automatically rename 'EBB' 'Ebb' to 'block' in *.clif * Automatically rename 'an block' to 'a block' in *.clif * Fix broken testcase when function name length increases Test function names are limited to 16 characters. This causes the new longer name to be truncated and fail a filecheck test. An outdated comment was also fixed.
83 lines
2.3 KiB
Plaintext
83 lines
2.3 KiB
Plaintext
test cat
|
|
test verifier
|
|
|
|
function %vmglobal(i64 vmctx) -> i32 {
|
|
gv3 = vmctx
|
|
; check: gv3 = vmctx
|
|
block0(v0: i64):
|
|
v1 = global_value.i32 gv3
|
|
; check: v1 = global_value.i32 gv3
|
|
return v1
|
|
}
|
|
|
|
function %load_and_add_imm(i64 vmctx) -> i32 {
|
|
gv2 = vmctx
|
|
gv3 = load.i32 notrap aligned gv2-72
|
|
gv4 = iadd_imm.i32 gv3, -32
|
|
; check: gv2 = vmctx
|
|
; check: gv3 = load.i32 notrap aligned gv2-72
|
|
; check: gv4 = iadd_imm.i32 gv3, -32
|
|
block0(v0: i64):
|
|
v1 = global_value.i32 gv4
|
|
; check: v1 = global_value.i32 gv4
|
|
return v1
|
|
}
|
|
|
|
; Refer to a global value before it's been declared.
|
|
function %backref(i64 vmctx) -> i32 {
|
|
gv0 = iadd_imm.i32 gv1, -32
|
|
; check: gv0 = iadd_imm.i32 gv1, -32
|
|
gv1 = load.i32 notrap aligned gv2
|
|
; check: gv1 = load.i32 notrap aligned gv2
|
|
gv2 = vmctx
|
|
; check: gv2 = vmctx
|
|
block0(v0: i64):
|
|
v1 = global_value.i32 gv1
|
|
return v1
|
|
}
|
|
|
|
function %symbol() -> i32 {
|
|
gv0 = symbol %something
|
|
; check: gv0 = symbol %something
|
|
gv1 = symbol u8:9
|
|
; check: gv1 = symbol u8:9
|
|
block0:
|
|
v0 = global_value.i32 gv0
|
|
; check: v0 = global_value.i32 gv0
|
|
v1 = global_value.i32 gv1
|
|
; check: v1 = global_value.i32 gv1
|
|
v2 = bxor v0, v1
|
|
return v2
|
|
}
|
|
|
|
; Declare static heaps.
|
|
function %sheap(i32, i64 vmctx) -> i64 {
|
|
heap1 = static gv5, min 0x1_0000, bound 0x1_0000_0000, offset_guard 0x8000_0000
|
|
heap2 = static gv5, offset_guard 0x1000, bound 0x1_0000
|
|
gv4 = vmctx
|
|
gv5 = iadd_imm.i64 gv4, 64
|
|
|
|
; check: heap1 = static gv5, min 0x0001_0000, bound 0x0001_0000_0000, offset_guard 0x8000_0000
|
|
; check: heap2 = static gv5, min 0, bound 0x0001_0000, offset_guard 4096
|
|
block0(v1: i32, v2: i64):
|
|
v3 = heap_addr.i64 heap1, v1, 0
|
|
; check: v3 = heap_addr.i64 heap1, v1, 0
|
|
return v3
|
|
}
|
|
|
|
; Declare dynamic heaps.
|
|
function %dheap(i32, i64 vmctx) -> i64 {
|
|
heap1 = dynamic gv5, min 0x1_0000, bound gv6, offset_guard 0x8000_0000
|
|
heap2 = dynamic gv5, bound gv6, offset_guard 0x1000
|
|
gv4 = vmctx
|
|
gv5 = iadd_imm.i64 gv4, 64
|
|
gv6 = iadd_imm.i64 gv4, 72
|
|
|
|
; check: heap1 = dynamic gv5, min 0x0001_0000, bound gv6, offset_guard 0x8000_0000
|
|
; check: heap2 = dynamic gv5, min 0, bound gv6, offset_guard 4096
|
|
block0(v1: i32, v2: i64):
|
|
v3 = heap_addr.i64 heap2, v1, 0
|
|
; check: v3 = heap_addr.i64 heap2, v1, 0
|
|
return v3
|
|
}
|