blob: fe69b3bfb702ef329910cddda7f1739df00a8c3a [file]
vm.module @buffer_ops version 0
vm.type f32
vm.type i32
vm.type i64
vm.type !vm.buffer
vm.rodata[0] = 010000000200000003000000
vm.rodata[1] = 64000000C80000002C010000
vm.rodata[2] = 64000000C90000002C010000
vm.rodata[3] = 02000000
vm.rodata[4] = 00000000000028420000284200000000
vm.rodata[5] = 00666600
vm.rodata[6] = 0000FECAFECA0000
vm.rodata[7] = 000000000000FFFF0000FFFF00000000
vm.rodata[8] = 0000000000000000000000000100000000000000010000000000000000000000
vm.rodata[9] = 00017F80FF
vm.rodata[10] = 00000100FF7F0080FFFF
vm.rodata[11] = 0000000001000000FFFFFF7F00000080FFFFFFFF
vm.rodata[12] = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
vm.export @test_compare
vm.func @test_compare() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%r0 = vm.const.ref.rodata 1 // 12b
%r1 = vm.const.ref.rodata 2 // 12b
%i4:5 = vm.buffer.length %r0
%i6 = vm.buffer.compare %r0, %i2:3, %r0, %i2:3, %i4:5
%i6 = vm.cmp.nz.i32 %i6
%i1 = vm.xor.i32 %i6, %i1
vm.cond_br %i1, ^bb4(), ^bb1()
^bb1:
%i1 = vm.buffer.compare %r0, %i2:3, %r1, %i2:3, %i4:5
vm.discard.refs %r0, %r1
%i1 = vm.cmp.nz.i32 %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer a != b"
^bb4:
vm.discard.refs %r0, %r1
vm.fail %i0, "buffer a == a"
}
vm.export @test_compare_empty
vm.func @test_compare_empty() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64 2 // 0x0000000000000002
%i4:5 = vm.const.i64.zero
%r0 = vm.const.ref.rodata 1 // 12b
%r1 = vm.const.ref.rodata 2 // 12b
vm.discard.refs %r1
%i6 = vm.buffer.compare %r0, %i2:3, %r0, %i2:3, %i4:5
vm.discard.refs %r0
%i6 = vm.cmp.nz.i32 %i6
%i1 = vm.xor.i32 %i6, %i1
vm.cond_br %i1, ^bb2(), ^bb1()
^bb1:
vm.return
^bb2:
vm.fail %i0, "empty buffer ranges are always equal"
}
vm.export @test_alloc
vm.func @test_alloc() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64 128 // 0x0000000000000080
%i4 = vm.const.i32 16 // 0x00000010
%r0 = vm.buffer.alloc %i2:3, %i4
%i4 = vm.cmp.nz.ref %r0
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb4(), ^bb1()
^bb1:
%i4:5 = vm.buffer.length %r0
vm.discard.refs %r0
%i1 = vm.cmp.ne.i64 %i4:5, %i2:3
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer length == 128"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_alloc_empty
vm.func @test_alloc_empty() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%r0 = vm.buffer.alloc %i2:3, %i4
%i2 = vm.cmp.nz.ref %r0
%i1 = vm.xor.i32 %i2, %i1
vm.cond_br %i1, ^bb4(), ^bb1()
^bb1:
%i2:3 = vm.buffer.length %r0
vm.discard.refs %r0
%i1 = vm.cmp.nz.i64 %i2:3
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer length == 0"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_clone
vm.func @test_clone() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%i6:7 = vm.const.i64 8 // 0x0000000000000008
%i8:9 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.const.ref.rodata 0 // 12b
%r1 = vm.buffer.clone %r0, %i8:9, %i6:7, %i4
%i4 = vm.cmp.nz.ref %r1
%i4 = vm.xor.i32 %i4, %i1
vm.cond_br %i4, ^bb4(), ^bb1()
^bb1:
%i4 = vm.buffer.compare %r0, %i8:9, %r1, %i2:3, %i6:7
vm.discard.refs %r0, %r1
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer subspans are equal"
^bb4:
vm.discard.refs %r0, %r1
vm.fail %i0, "!null"
}
vm.export @test_clone_empty
vm.func @test_clone_empty() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%r0 = vm.buffer.alloc %i2:3, %i4
%i5 = vm.cmp.nz.ref %r0
%i5 = vm.xor.i32 %i5, %i1
vm.cond_br %i5, ^bb7(), ^bb1()
^bb1:
%i6:7 = vm.buffer.length %r0
%i5 = vm.cmp.nz.i64 %i6:7
vm.cond_br %i5, ^bb5(), ^bb2()
^bb2:
%r1 = vm.buffer.clone %r0, %i2:3, %i2:3, %i4
vm.discard.refs %r0
%i2 = vm.cmp.nz.ref %r1
%i1 = vm.xor.i32 %i2, %i1
vm.cond_br %i1, ^bb8(), ^bb3()
^bb3:
%i2:3 = vm.buffer.length %r1
vm.discard.refs %r1
%i1 = vm.cmp.nz.i64 %i2:3
vm.cond_br %i1, ^bb6(), ^bb4()
^bb4:
vm.return
^bb5:
vm.discard.refs %r0
vm.br ^bb6()
^bb6:
vm.fail %i0, "buffer length == 0"
^bb7:
vm.discard.refs %r0
vm.br ^bb9()
^bb8:
vm.discard.refs %r1
vm.br ^bb9()
^bb9:
vm.fail %i0, "!null"
}
vm.export @fail_clone_out_of_range
vm.func @fail_clone_out_of_range() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2 = vm.const.i32 16 // 0x00000010
%i4:5 = vm.const.i64 8 // 0x0000000000000008
%r0 = vm.const.ref.rodata 0 // 12b
%i3 = vm.cmp.nz.ref %r0
%i1 = vm.xor.i32 %i3, %i1
vm.cond_br %i1, ^bb2(), ^bb1()
^bb1:
%r1 = vm.buffer.clone %r0, %i4:5, %i4:5, %i2
vm.discard.refs %r1
vm.discard.refs %r0
vm.return
^bb2:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_copy_full
vm.func @test_copy_full() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%r0 = vm.const.ref.rodata 0 // 12b
%i6:7 = vm.buffer.length %r0
%i5 = vm.cmp.nz.ref %r0
%i5 = vm.xor.i32 %i5, %i1
vm.cond_br %i5, ^bb5(), ^bb1()
^bb1:
%r1 = vm.buffer.alloc %i6:7, %i4
%i4 = vm.cmp.nz.ref %r1
%i4 = vm.xor.i32 %i4, %i1
vm.cond_br %i4, ^bb6(), ^bb2()
^bb2:
vm.buffer.copy %r0, %i2:3, %r1, %i2:3, %i6:7
%i4 = vm.buffer.compare %r0, %i2:3, %r1, %i2:3, %i6:7
vm.discard.refs %r0, %r1
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb4(), ^bb3()
^bb3:
vm.return
^bb4:
vm.fail %i0, "source and target match"
^bb5:
vm.discard.refs %r0
vm.br ^bb7()
^bb6:
vm.discard.refs %r0, %r1
vm.br ^bb7()
^bb7:
vm.fail %i0, "!null"
}
vm.export @test_copy_partial
vm.func @test_copy_partial() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4:5 = vm.const.i64 4 // 0x0000000000000004
%i6 = vm.const.i32 16 // 0x00000010
%r0 = vm.buffer.alloc %i4:5, %i6
%i6 = vm.cmp.nz.ref %r0
%i6 = vm.xor.i32 %i6, %i1
vm.cond_br %i6, ^bb4(), ^bb1()
^bb1:
%r1 = vm.const.ref.rodata 0 // 12b
vm.buffer.copy %r1, %i4:5, %r0, %i2:3, %i4:5
vm.discard.refs %r1
%r1 = vm.const.ref.rodata 3 // 4b
%i6 = vm.buffer.compare %r1, %i2:3, %r0, %i2:3, %i4:5
vm.discard.refs %r1, %r0
%i6 = vm.cmp.nz.i32 %i6
%i1 = vm.xor.i32 %i6, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "source and target match"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @fail_copy_out_of_range_source_offset
vm.func @fail_copy_out_of_range_source_offset() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%i6:7 = vm.const.i64 128 // 0x0000000000000080
%r0 = vm.const.ref.rodata 0 // 12b
%r1 = vm.buffer.alloc %i6:7, %i4
%i4 = vm.cmp.nz.ref %r1
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb2(), ^bb1()
^bb1:
vm.buffer.copy %r0, %i2:3, %r1, %i2:3, %i6:7
vm.discard.refs %r0, %r1
vm.return
^bb2:
vm.discard.refs %r0, %r1
vm.fail %i0, "!null"
}
vm.export @fail_copy_out_of_range_source_length
vm.func @fail_copy_out_of_range_source_length() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64 8 // 0x0000000000000008
%i4:5 = vm.const.i64.zero
%i6 = vm.const.i32 16 // 0x00000010
%i8:9 = vm.const.i64 128 // 0x0000000000000080
%r0 = vm.const.ref.rodata 0 // 12b
%r1 = vm.buffer.alloc %i8:9, %i6
%i6 = vm.cmp.nz.ref %r1
%i1 = vm.xor.i32 %i6, %i1
vm.cond_br %i1, ^bb2(), ^bb1()
^bb1:
vm.buffer.copy %r0, %i2:3, %r1, %i4:5, %i2:3
vm.discard.refs %r0, %r1
vm.return
^bb2:
vm.discard.refs %r0, %r1
vm.fail %i0, "!null"
}
vm.export @fail_copy_out_of_range_target_offset
vm.func @fail_copy_out_of_range_target_offset() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%i6:7 = vm.const.i64 8 // 0x0000000000000008
%r0 = vm.const.ref.rodata 0 // 12b
%i8:9 = vm.buffer.length %r0
%r1 = vm.buffer.alloc %i6:7, %i4
%i4 = vm.cmp.nz.ref %r1
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb2(), ^bb1()
^bb1:
vm.buffer.copy %r0, %i2:3, %r1, %i2:3, %i8:9
vm.discard.refs %r0, %r1
vm.return
^bb2:
vm.discard.refs %r0, %r1
vm.fail %i0, "!null"
}
vm.export @fail_copy_out_of_range_target_length
vm.func @fail_copy_out_of_range_target_length() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 16 // 0x00000010
%i6:7 = vm.const.i64 8 // 0x0000000000000008
%r0 = vm.const.ref.rodata 0 // 12b
%r1 = vm.buffer.alloc %i6:7, %i4
%i4 = vm.cmp.nz.ref %r1
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb2(), ^bb1()
^bb1:
vm.buffer.copy %r0, %i2:3, %r1, %i6:7, %i6:7
vm.discard.refs %r0, %r1
vm.return
^bb2:
vm.discard.refs %r0, %r1
vm.fail %i0, "!null"
}
vm.export @test_fill_f32
vm.func @test_fill_f32() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.f32 42
%i6:7 = vm.const.i64 2 // 0x0000000000000002
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i5 = vm.const.i32 16 // 0x00000010
%i10:11 = vm.const.i64 16 // 0x0000000000000010
%r0 = vm.buffer.alloc %i10:11, %i5
%i5 = vm.cmp.nz.ref %r0
%i5 = vm.xor.i32 %i5, %i1
vm.cond_br %i5, ^bb4(), ^bb1()
^bb1:
vm.buffer.fill.f32 %r0, %i8:9, %i6:7, %i4
%r1 = vm.const.ref.rodata 4 // 16b
%i4 = vm.buffer.compare %r1, %i2:3, %r0, %i2:3, %i10:11
vm.discard.refs %r1, %r0
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer should match reference"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_fill_i8
vm.func @test_fill_i8() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 102 // 0x00000066
%i6:7 = vm.const.i64 2 // 0x0000000000000002
%i5 = vm.const.i32 16 // 0x00000010
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10:11 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.buffer.alloc %i10:11, %i5
%i5 = vm.cmp.nz.ref %r0
%i5 = vm.xor.i32 %i5, %i1
vm.cond_br %i5, ^bb4(), ^bb1()
^bb1:
vm.buffer.fill.i8 %r0, %i8:9, %i6:7, %i4
%r1 = vm.const.ref.rodata 5 // 4b
%i4 = vm.buffer.compare %r1, %i2:3, %r0, %i2:3, %i10:11
vm.discard.refs %r1, %r0
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer should match reference"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_fill_i16
vm.func @test_fill_i16() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 51966 // 0x0000CAFE
%i6:7 = vm.const.i64 1 // 0x0000000000000001
%i5 = vm.const.i32 16 // 0x00000010
%i8:9 = vm.const.i64 2 // 0x0000000000000002
%i10:11 = vm.const.i64 8 // 0x0000000000000008
%r0 = vm.buffer.alloc %i10:11, %i5
%i5 = vm.cmp.nz.ref %r0
%i5 = vm.xor.i32 %i5, %i1
vm.cond_br %i5, ^bb4(), ^bb1()
^bb1:
vm.buffer.fill.i16 %r0, %i6:7, %i8:9, %i4
%r1 = vm.const.ref.rodata 6 // 8b
%i4 = vm.buffer.compare %r1, %i2:3, %r0, %i2:3, %i10:11
vm.discard.refs %r1, %r0
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer should match reference"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_fill_i32
vm.func @test_fill_i32() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4 = vm.const.i32 -65536 // 0xFFFF0000
%i6:7 = vm.const.i64 2 // 0x0000000000000002
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i5 = vm.const.i32 16 // 0x00000010
%i10:11 = vm.const.i64 16 // 0x0000000000000010
%r0 = vm.buffer.alloc %i10:11, %i5
%i5 = vm.cmp.nz.ref %r0
%i5 = vm.xor.i32 %i5, %i1
vm.cond_br %i5, ^bb4(), ^bb1()
^bb1:
vm.buffer.fill.i32 %r0, %i8:9, %i6:7, %i4
%r1 = vm.const.ref.rodata 7 // 16b
%i4 = vm.buffer.compare %r1, %i2:3, %r0, %i2:3, %i10:11
vm.discard.refs %r1, %r0
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer should match reference"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @test_fill_i64
vm.func @test_fill_i64() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 1 // 0x00000001
%i2:3 = vm.const.i64.zero
%i4:5 = vm.const.i64 4294967296 // 0x0000000100000000
%i6:7 = vm.const.i64 2 // 0x0000000000000002
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10 = vm.const.i32 16 // 0x00000010
%i12:13 = vm.const.i64 32 // 0x0000000000000020
%r0 = vm.buffer.alloc %i12:13, %i10
%i10 = vm.cmp.nz.ref %r0
%i10 = vm.xor.i32 %i10, %i1
vm.cond_br %i10, ^bb4(), ^bb1()
^bb1:
vm.buffer.fill.i64 %r0, %i8:9, %i6:7, %i4:5
%r1 = vm.const.ref.rodata 8 // 32b
%i4 = vm.buffer.compare %r1, %i2:3, %r0, %i2:3, %i12:13
vm.discard.refs %r1, %r0
%i4 = vm.cmp.nz.i32 %i4
%i1 = vm.xor.i32 %i4, %i1
vm.cond_br %i1, ^bb3(), ^bb2()
^bb2:
vm.return
^bb3:
vm.fail %i0, "buffer should match reference"
^bb4:
vm.discard.refs %r0
vm.fail %i0, "!null"
}
vm.export @fail_fill_i16_rodata
vm.func @fail_fill_i16_rodata() -> () {
^bb0:
%i0 = vm.const.i32 51966 // 0x0000CAFE
%i2:3 = vm.const.i64 2 // 0x0000000000000002
%i4:5 = vm.const.i64.zero
%r0 = vm.const.ref.rodata 0 // 12b
vm.buffer.fill.i16 %r0, %i4:5, %i2:3, %i0
vm.discard.refs %r0
vm.return
}
vm.export @test_load_i8u
vm.func @test_load_i8u() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 255 // 0x000000FF
%i2 = vm.const.i32 128 // 0x00000080
%i3 = vm.const.i32 127 // 0x0000007F
%i4 = vm.const.i32 1 // 0x00000001
%i6:7 = vm.const.i64.zero
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10:11 = vm.const.i64 2 // 0x0000000000000002
%i12:13 = vm.const.i64 3 // 0x0000000000000003
%i14:15 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.const.ref.rodata 9 // 5b
%i5 = vm.buffer.load.i8.u %r0, %i6:7
%i5 = vm.cmp.nz.i32 %i5
vm.cond_br %i5, ^bb10(), ^bb1()
^bb1:
%i5 = vm.buffer.load.i8.u %r0, %i8:9
%i4 = vm.cmp.ne.i32 %i5, %i4
vm.cond_br %i4, ^bb9(), ^bb2()
^bb2:
%i4 = vm.buffer.load.i8.u %r0, %i10:11
%i3 = vm.cmp.ne.i32 %i4, %i3
vm.cond_br %i3, ^bb8(), ^bb3()
^bb3:
%i3 = vm.buffer.load.i8.u %r0, %i12:13
%i2 = vm.cmp.ne.i32 %i3, %i2
vm.cond_br %i2, ^bb7(), ^bb4()
^bb4:
%i2 = vm.buffer.load.i8.u %r0, %i14:15
vm.discard.refs %r0
%i1 = vm.cmp.ne.i32 %i2, %i1
vm.cond_br %i1, ^bb6(), ^bb5()
^bb5:
vm.return
^bb6:
vm.fail %i0, "0xFF"
^bb7:
vm.discard.refs %r0
vm.fail %i0, "0x80"
^bb8:
vm.discard.refs %r0
vm.fail %i0, "0x7F"
^bb9:
vm.discard.refs %r0
vm.fail %i0, "1"
^bb10:
vm.discard.refs %r0
vm.fail %i0, "0"
}
vm.export @test_load_i8s
vm.func @test_load_i8s() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 -1 // 0xFFFFFFFF
%i2 = vm.const.i32 -128 // 0xFFFFFF80
%i3 = vm.const.i32 127 // 0x0000007F
%i4 = vm.const.i32 1 // 0x00000001
%i6:7 = vm.const.i64.zero
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10:11 = vm.const.i64 2 // 0x0000000000000002
%i12:13 = vm.const.i64 3 // 0x0000000000000003
%i14:15 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.const.ref.rodata 9 // 5b
%i5 = vm.buffer.load.i8.s %r0, %i6:7
%i5 = vm.cmp.nz.i32 %i5
vm.cond_br %i5, ^bb10(), ^bb1()
^bb1:
%i5 = vm.buffer.load.i8.s %r0, %i8:9
%i4 = vm.cmp.ne.i32 %i5, %i4
vm.cond_br %i4, ^bb9(), ^bb2()
^bb2:
%i4 = vm.buffer.load.i8.s %r0, %i10:11
%i3 = vm.cmp.ne.i32 %i4, %i3
vm.cond_br %i3, ^bb8(), ^bb3()
^bb3:
%i3 = vm.buffer.load.i8.s %r0, %i12:13
%i2 = vm.cmp.ne.i32 %i3, %i2
vm.cond_br %i2, ^bb7(), ^bb4()
^bb4:
%i2 = vm.buffer.load.i8.s %r0, %i14:15
vm.discard.refs %r0
%i1 = vm.cmp.ne.i32 %i2, %i1
vm.cond_br %i1, ^bb6(), ^bb5()
^bb5:
vm.return
^bb6:
vm.fail %i0, "-1"
^bb7:
vm.discard.refs %r0
vm.fail %i0, "-128"
^bb8:
vm.discard.refs %r0
vm.fail %i0, "0x7F"
^bb9:
vm.discard.refs %r0
vm.fail %i0, "1"
^bb10:
vm.discard.refs %r0
vm.fail %i0, "0"
}
vm.export @test_load_i16u
vm.func @test_load_i16u() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 65535 // 0x0000FFFF
%i2 = vm.const.i32 32768 // 0x00008000
%i3 = vm.const.i32 32767 // 0x00007FFF
%i4 = vm.const.i32 1 // 0x00000001
%i6:7 = vm.const.i64.zero
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10:11 = vm.const.i64 2 // 0x0000000000000002
%i12:13 = vm.const.i64 3 // 0x0000000000000003
%i14:15 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.const.ref.rodata 10 // 10b
%i5 = vm.buffer.load.i16.u %r0, %i6:7
%i5 = vm.cmp.nz.i32 %i5
vm.cond_br %i5, ^bb10(), ^bb1()
^bb1:
%i5 = vm.buffer.load.i16.u %r0, %i8:9
%i4 = vm.cmp.ne.i32 %i5, %i4
vm.cond_br %i4, ^bb9(), ^bb2()
^bb2:
%i4 = vm.buffer.load.i16.u %r0, %i10:11
%i3 = vm.cmp.ne.i32 %i4, %i3
vm.cond_br %i3, ^bb8(), ^bb3()
^bb3:
%i3 = vm.buffer.load.i16.u %r0, %i12:13
%i2 = vm.cmp.ne.i32 %i3, %i2
vm.cond_br %i2, ^bb7(), ^bb4()
^bb4:
%i2 = vm.buffer.load.i16.u %r0, %i14:15
vm.discard.refs %r0
%i1 = vm.cmp.ne.i32 %i2, %i1
vm.cond_br %i1, ^bb6(), ^bb5()
^bb5:
vm.return
^bb6:
vm.fail %i0, "0xFFFF"
^bb7:
vm.discard.refs %r0
vm.fail %i0, "0x8000"
^bb8:
vm.discard.refs %r0
vm.fail %i0, "0x7FFF"
^bb9:
vm.discard.refs %r0
vm.fail %i0, "1"
^bb10:
vm.discard.refs %r0
vm.fail %i0, "0"
}
vm.export @test_load_i16s
vm.func @test_load_i16s() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 -1 // 0xFFFFFFFF
%i2 = vm.const.i32 -32768 // 0xFFFF8000
%i3 = vm.const.i32 32767 // 0x00007FFF
%i4 = vm.const.i32 1 // 0x00000001
%i6:7 = vm.const.i64.zero
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10:11 = vm.const.i64 2 // 0x0000000000000002
%i12:13 = vm.const.i64 3 // 0x0000000000000003
%i14:15 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.const.ref.rodata 10 // 10b
%i5 = vm.buffer.load.i16.s %r0, %i6:7
%i5 = vm.cmp.nz.i32 %i5
vm.cond_br %i5, ^bb10(), ^bb1()
^bb1:
%i5 = vm.buffer.load.i16.s %r0, %i8:9
%i4 = vm.cmp.ne.i32 %i5, %i4
vm.cond_br %i4, ^bb9(), ^bb2()
^bb2:
%i4 = vm.buffer.load.i16.s %r0, %i10:11
%i3 = vm.cmp.ne.i32 %i4, %i3
vm.cond_br %i3, ^bb8(), ^bb3()
^bb3:
%i3 = vm.buffer.load.i16.s %r0, %i12:13
%i2 = vm.cmp.ne.i32 %i3, %i2
vm.cond_br %i2, ^bb7(), ^bb4()
^bb4:
%i2 = vm.buffer.load.i16.s %r0, %i14:15
vm.discard.refs %r0
%i1 = vm.cmp.ne.i32 %i2, %i1
vm.cond_br %i1, ^bb6(), ^bb5()
^bb5:
vm.return
^bb6:
vm.fail %i0, "-1"
^bb7:
vm.discard.refs %r0
vm.fail %i0, "-32768"
^bb8:
vm.discard.refs %r0
vm.fail %i0, "0x7FFF"
^bb9:
vm.discard.refs %r0
vm.fail %i0, "1"
^bb10:
vm.discard.refs %r0
vm.fail %i0, "0"
}
vm.export @test_load_i32
vm.func @test_load_i32() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 -1 // 0xFFFFFFFF
%i2 = vm.const.i32 -2147483648 // 0x80000000
%i3 = vm.const.i32 2147483647 // 0x7FFFFFFF
%i4 = vm.const.i32 1 // 0x00000001
%i6:7 = vm.const.i64.zero
%i8:9 = vm.const.i64 1 // 0x0000000000000001
%i10:11 = vm.const.i64 2 // 0x0000000000000002
%i12:13 = vm.const.i64 3 // 0x0000000000000003
%i14:15 = vm.const.i64 4 // 0x0000000000000004
%r0 = vm.const.ref.rodata 11 // 20b
%i5 = vm.buffer.load.i32 %r0, %i6:7
%i5 = vm.cmp.nz.i32 %i5
vm.cond_br %i5, ^bb10(), ^bb1()
^bb1:
%i5 = vm.buffer.load.i32 %r0, %i8:9
%i4 = vm.cmp.ne.i32 %i5, %i4
vm.cond_br %i4, ^bb9(), ^bb2()
^bb2:
%i4 = vm.buffer.load.i32 %r0, %i10:11
%i3 = vm.cmp.ne.i32 %i4, %i3
vm.cond_br %i3, ^bb8(), ^bb3()
^bb3:
%i3 = vm.buffer.load.i32 %r0, %i12:13
%i2 = vm.cmp.ne.i32 %i3, %i2
vm.cond_br %i2, ^bb7(), ^bb4()
^bb4:
%i2 = vm.buffer.load.i32 %r0, %i14:15
vm.discard.refs %r0
%i1 = vm.cmp.ne.i32 %i2, %i1
vm.cond_br %i1, ^bb6(), ^bb5()
^bb5:
vm.return
^bb6:
vm.fail %i0, "0xFFFFFFFF"
^bb7:
vm.discard.refs %r0
vm.fail %i0, "0x80000000"
^bb8:
vm.discard.refs %r0
vm.fail %i0, "0x7FFFFFFF"
^bb9:
vm.discard.refs %r0
vm.fail %i0, "1"
^bb10:
vm.discard.refs %r0
vm.fail %i0, "0"
}
vm.export @test_store_i8
vm.func @test_store_i8() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 255 // 0x000000FF
%i2:3 = vm.const.i64 4 // 0x0000000000000004
%i4 = vm.const.i32 128 // 0x00000080
%i6:7 = vm.const.i64 3 // 0x0000000000000003
%i5 = vm.const.i32 127 // 0x0000007F
%i8:9 = vm.const.i64 2 // 0x0000000000000002
%i10 = vm.const.i32 1 // 0x00000001
%i12:13 = vm.const.i64 1 // 0x0000000000000001
%i11 = vm.const.i32.zero
%i14:15 = vm.const.i64.zero
%i16 = vm.const.i32 16 // 0x00000010
%r0 = vm.const.ref.rodata 9 // 5b
%i18:19 = vm.buffer.length %r0
%r1 = vm.buffer.alloc %i18:19, %i16
vm.buffer.store.i8 %i11, %r1, %i14:15
vm.buffer.store.i8 %i10, %r1, %i12:13
vm.buffer.store.i8 %i5, %r1, %i8:9
vm.buffer.store.i8 %i4, %r1, %i6:7
vm.buffer.store.i8 %i1, %r1, %i2:3
%i1 = vm.buffer.compare %r0, %i14:15, %r1, %i14:15, %i18:19
vm.discard.refs %r0, %r1
%i1 = vm.cmp.nz.i32 %i1
%i10 = vm.xor.i32 %i1, %i10
vm.cond_br %i10, ^bb2(), ^bb1()
^bb1:
vm.return
^bb2:
vm.fail %i0, "source and target match"
}
vm.export @test_store_i16
vm.func @test_store_i16() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 65535 // 0x0000FFFF
%i2:3 = vm.const.i64 4 // 0x0000000000000004
%i4 = vm.const.i32 32768 // 0x00008000
%i6:7 = vm.const.i64 3 // 0x0000000000000003
%i5 = vm.const.i32 32767 // 0x00007FFF
%i8:9 = vm.const.i64 2 // 0x0000000000000002
%i10 = vm.const.i32 1 // 0x00000001
%i12:13 = vm.const.i64 1 // 0x0000000000000001
%i11 = vm.const.i32.zero
%i14:15 = vm.const.i64.zero
%i16 = vm.const.i32 16 // 0x00000010
%r0 = vm.const.ref.rodata 10 // 10b
%i18:19 = vm.buffer.length %r0
%r1 = vm.buffer.alloc %i18:19, %i16
vm.buffer.store.i16 %i11, %r1, %i14:15
vm.buffer.store.i16 %i10, %r1, %i12:13
vm.buffer.store.i16 %i5, %r1, %i8:9
vm.buffer.store.i16 %i4, %r1, %i6:7
vm.buffer.store.i16 %i1, %r1, %i2:3
%i1 = vm.buffer.compare %r0, %i14:15, %r1, %i14:15, %i18:19
vm.discard.refs %r0, %r1
%i1 = vm.cmp.nz.i32 %i1
%i10 = vm.xor.i32 %i1, %i10
vm.cond_br %i10, ^bb2(), ^bb1()
^bb1:
vm.return
^bb2:
vm.fail %i0, "source and target match"
}
vm.export @test_store_i32
vm.func @test_store_i32() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i1 = vm.const.i32 -1 // 0xFFFFFFFF
%i2:3 = vm.const.i64 4 // 0x0000000000000004
%i4 = vm.const.i32 -2147483648 // 0x80000000
%i6:7 = vm.const.i64 3 // 0x0000000000000003
%i5 = vm.const.i32 2147483647 // 0x7FFFFFFF
%i8:9 = vm.const.i64 2 // 0x0000000000000002
%i10 = vm.const.i32 1 // 0x00000001
%i12:13 = vm.const.i64 1 // 0x0000000000000001
%i11 = vm.const.i32.zero
%i14:15 = vm.const.i64.zero
%i16 = vm.const.i32 16 // 0x00000010
%r0 = vm.const.ref.rodata 11 // 20b
%i18:19 = vm.buffer.length %r0
%r1 = vm.buffer.alloc %i18:19, %i16
vm.buffer.store.i32 %i11, %r1, %i14:15
vm.buffer.store.i32 %i10, %r1, %i12:13
vm.buffer.store.i32 %i5, %r1, %i8:9
vm.buffer.store.i32 %i4, %r1, %i6:7
vm.buffer.store.i32 %i1, %r1, %i2:3
%i1 = vm.buffer.compare %r0, %i14:15, %r1, %i14:15, %i18:19
vm.discard.refs %r0, %r1
%i1 = vm.cmp.nz.i32 %i1
%i10 = vm.xor.i32 %i1, %i10
vm.cond_br %i10, ^bb2(), ^bb1()
^bb1:
vm.return
^bb2:
vm.fail %i0, "source and target match"
}
vm.export @test_hash
vm.func @test_hash() -> () {
^bb0:
%i0 = vm.const.i32 9 // 0x00000009
%i2:3 = vm.const.i64 8153574914611379406 // 0x7127512F72F27CCE
%i4:5 = vm.const.i64 -4836423040314787606 // 0xBCE192DE8A85B8EA
%i6:7 = vm.const.i64 4551675220716592091 // 0x3F2ACC7F57C29BDB
%i8:9 = vm.const.i64 1762690195596617357 // 0x18765564CD99A68D
%i10:11 = vm.const.i64.zero
%i12:13 = vm.const.i64 5 // 0x0000000000000005
%i14:15 = vm.const.i64 16 // 0x0000000000000010
%i16:17 = vm.const.i64 25 // 0x0000000000000019
%i18:19 = vm.const.i64 32 // 0x0000000000000020
%r0 = vm.const.ref.rodata 12 // 32b
%i12:13 = vm.buffer.hash %r0, %i10:11, %i12:13
%i1 = vm.cmp.ne.i64 %i12:13, %i8:9
vm.cond_br %i1, ^bb8(), ^bb1()
^bb1:
%i14:15 = vm.buffer.hash %r0, %i10:11, %i14:15
%i1 = vm.cmp.ne.i64 %i14:15, %i6:7
vm.cond_br %i1, ^bb7(), ^bb2()
^bb2:
%i16:17 = vm.buffer.hash %r0, %i10:11, %i16:17
%i1 = vm.cmp.ne.i64 %i16:17, %i4:5
vm.cond_br %i1, ^bb6(), ^bb3()
^bb3:
%i18:19 = vm.buffer.hash %r0, %i10:11, %i18:19
vm.discard.refs %r0
%i1 = vm.cmp.ne.i64 %i18:19, %i2:3
vm.cond_br %i1, ^bb5(), ^bb4()
^bb4:
vm.return
^bb5:
vm.fail %i0, "0-31: 0x7127512f72f27cce"
^bb6:
vm.discard.refs %r0
vm.fail %i0, "0-24: 0xbce192de8a85b8ea"
^bb7:
vm.discard.refs %r0
vm.fail %i0, "0-15: 0x3f2acc7f57c29bdb"
^bb8:
vm.discard.refs %r0
vm.fail %i0, "0-4: 0x18765564cd99a68d"
}