cranelift: Remove brz and brnz (#5630)
Remove the brz and brnz instructions, as their behavior is now redundant with brif.
This commit is contained in:
@@ -20,10 +20,9 @@ block2:
|
||||
; run: %jump() == 1
|
||||
|
||||
|
||||
function %brz_i64(i64) -> i8 {
|
||||
function %brif_false__i64(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
brz v0, block1
|
||||
jump block2
|
||||
brif v0, block2, block1
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -33,17 +32,16 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brz_i64(0) == 1
|
||||
; run: %brz_i64(1) == 0
|
||||
; run: %brz_i64(-1) == 0
|
||||
; run: %brz_i64(97) == 0
|
||||
; run: %brif_false__i64(0) == 1
|
||||
; run: %brif_false__i64(1) == 0
|
||||
; run: %brif_false__i64(-1) == 0
|
||||
; run: %brif_false__i64(97) == 0
|
||||
|
||||
function %brz_i8_overflow(i8) -> i8 {
|
||||
function %brif_false__i8_overflow(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
v1 = iconst.i8 255
|
||||
v2 = iadd.i8 v0, v1
|
||||
brz v2, block2
|
||||
jump block1
|
||||
brif v2, block1, block2
|
||||
|
||||
block1:
|
||||
v3 = iconst.i8 1
|
||||
@@ -54,18 +52,17 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; run: %brz_i8_overflow(0) == 1
|
||||
; run: %brz_i8_overflow(1) == 0
|
||||
; run: %brz_i8_overflow(2) == 1
|
||||
; run: %brz_i8_overflow(98) == 1
|
||||
; run: %brz_i8_overflow(97) == 1
|
||||
; run: %brif_false__i8_overflow(0) == 1
|
||||
; run: %brif_false__i8_overflow(1) == 0
|
||||
; run: %brif_false__i8_overflow(2) == 1
|
||||
; run: %brif_false__i8_overflow(98) == 1
|
||||
; run: %brif_false__i8_overflow(97) == 1
|
||||
|
||||
function %brz_i16_overflow(i16) -> i8 {
|
||||
function %brif_false__i16_overflow(i16) -> i8 {
|
||||
block0(v0: i16):
|
||||
v1 = iconst.i16 65535
|
||||
v2 = iadd v0, v1
|
||||
brz v2, block2
|
||||
jump block1
|
||||
brif v2, block1, block2
|
||||
|
||||
block1:
|
||||
v3 = iconst.i8 1
|
||||
@@ -76,18 +73,17 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; run: %brz_i16_overflow(0) == 1
|
||||
; run: %brz_i16_overflow(1) == 0
|
||||
; run: %brz_i16_overflow(2) == 1
|
||||
; run: %brz_i16_overflow(98) == 1
|
||||
; run: %brz_i16_overflow(97) == 1
|
||||
; run: %brif_false__i16_overflow(0) == 1
|
||||
; run: %brif_false__i16_overflow(1) == 0
|
||||
; run: %brif_false__i16_overflow(2) == 1
|
||||
; run: %brif_false__i16_overflow(98) == 1
|
||||
; run: %brif_false__i16_overflow(97) == 1
|
||||
|
||||
function %brz_i32_overflow(i32) -> i8 {
|
||||
function %brif_false__i32_overflow(i32) -> i8 {
|
||||
block0(v0: i32):
|
||||
v1 = iconst.i32 4294967295
|
||||
v2 = iadd v0, v1
|
||||
brz v2, block2
|
||||
jump block1
|
||||
brif v2, block1, block2
|
||||
|
||||
block1:
|
||||
v3 = iconst.i8 1
|
||||
@@ -98,16 +94,15 @@ block2:
|
||||
return v4
|
||||
}
|
||||
|
||||
; run: %brz_i32_overflow(0) == 1
|
||||
; run: %brz_i32_overflow(1) == 0
|
||||
; run: %brz_i32_overflow(2) == 1
|
||||
; run: %brz_i32_overflow(98) == 1
|
||||
; run: %brz_i32_overflow(97) == 1
|
||||
; run: %brif_false__i32_overflow(0) == 1
|
||||
; run: %brif_false__i32_overflow(1) == 0
|
||||
; run: %brif_false__i32_overflow(2) == 1
|
||||
; run: %brif_false__i32_overflow(98) == 1
|
||||
; run: %brif_false__i32_overflow(97) == 1
|
||||
|
||||
function %brz_i32(i32) -> i8 {
|
||||
function %brif_false__i32(i32) -> i8 {
|
||||
block0(v0: i32):
|
||||
brz v0, block1
|
||||
jump block2
|
||||
brif v0, block2, block1
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -117,14 +112,13 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brz_i32(0) == 1
|
||||
; run: %brz_i32(1) == 0
|
||||
; run: %brz_i32(-1) == 0
|
||||
; run: %brif_false__i32(0) == 1
|
||||
; run: %brif_false__i32(1) == 0
|
||||
; run: %brif_false__i32(-1) == 0
|
||||
|
||||
function %brz_i16(i16) -> i8 {
|
||||
function %brif_false__i16(i16) -> i8 {
|
||||
block0(v0: i16):
|
||||
brz v0, block1
|
||||
jump block2
|
||||
brif v0, block2, block1
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -134,14 +128,13 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brz_i16(0) == 1
|
||||
; run: %brz_i16(1) == 0
|
||||
; run: %brz_i16(-1) == 0
|
||||
; run: %brif_false__i16(0) == 1
|
||||
; run: %brif_false__i16(1) == 0
|
||||
; run: %brif_false__i16(-1) == 0
|
||||
|
||||
function %brz_i8(i8) -> i8 {
|
||||
function %brif_false__i8(i8) -> i8 {
|
||||
block0(v1: i8):
|
||||
brz v1, block1
|
||||
jump block2
|
||||
brif v1, block2, block1
|
||||
|
||||
block1:
|
||||
v2 = iconst.i8 1
|
||||
@@ -151,14 +144,13 @@ block2:
|
||||
v3 = iconst.i8 0
|
||||
return v3
|
||||
}
|
||||
; run: %brz_i8(1) == 0
|
||||
; run: %brz_i8(0) == 1
|
||||
; run: %brif_false__i8(1) == 0
|
||||
; run: %brif_false__i8(0) == 1
|
||||
|
||||
|
||||
function %brnz_i64(i64) -> i8 {
|
||||
function %brif_true__i64(i64) -> i8 {
|
||||
block0(v0: i64):
|
||||
brnz v0, block1
|
||||
jump block2
|
||||
brif v0, block1, block2
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -168,14 +160,13 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brnz_i64(0) == 0
|
||||
; run: %brnz_i64(1) == 1
|
||||
; run: %brnz_i64(-1) == 1
|
||||
; run: %brif_true__i64(0) == 0
|
||||
; run: %brif_true__i64(1) == 1
|
||||
; run: %brif_true__i64(-1) == 1
|
||||
|
||||
function %brnz_i32(i32) -> i8 {
|
||||
function %brif_true__i32(i32) -> i8 {
|
||||
block0(v0: i32):
|
||||
brnz v0, block1
|
||||
jump block2
|
||||
brif v0, block1, block2
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -185,14 +176,13 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brnz_i32(0) == 0
|
||||
; run: %brnz_i32(1) == 1
|
||||
; run: %brnz_i32(-1) == 1
|
||||
; run: %brif_true__i32(0) == 0
|
||||
; run: %brif_true__i32(1) == 1
|
||||
; run: %brif_true__i32(-1) == 1
|
||||
|
||||
function %brnz_i16(i16) -> i8 {
|
||||
function %brif_true__i16(i16) -> i8 {
|
||||
block0(v0: i16):
|
||||
brnz v0, block1
|
||||
jump block2
|
||||
brif v0, block1, block2
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -202,14 +192,13 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brnz_i16(0) == 0
|
||||
; run: %brnz_i16(1) == 1
|
||||
; run: %brnz_i16(-1) == 1
|
||||
; run: %brif_true__i16(0) == 0
|
||||
; run: %brif_true__i16(1) == 1
|
||||
; run: %brif_true__i16(-1) == 1
|
||||
|
||||
function %brnz_i8(i8) -> i8 {
|
||||
function %brif_true__i8(i8) -> i8 {
|
||||
block0(v0: i8):
|
||||
brnz v0, block1
|
||||
jump block2
|
||||
brif v0, block1, block2
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 1
|
||||
@@ -219,7 +208,7 @@ block2:
|
||||
v2 = iconst.i8 0
|
||||
return v2
|
||||
}
|
||||
; run: %brnz_i8(0) == 0
|
||||
; run: %brnz_i8(1) == 1
|
||||
; run: %brnz_i8(-1) == 1
|
||||
; run: %brnz_i8(97) == 1
|
||||
; run: %brif_true__i8(0) == 0
|
||||
; run: %brif_true__i8(1) == 1
|
||||
; run: %brif_true__i8(-1) == 1
|
||||
; run: %brif_true__i8(97) == 1
|
||||
|
||||
@@ -170,8 +170,7 @@ block1(v0: i8):
|
||||
|
||||
function %fuzzgen_2(i16) -> i16, i16 system_v {
|
||||
block0(v0: i16):
|
||||
brnz v0, block1(v0, v0)
|
||||
jump block2(v0, v0)
|
||||
brif v0, block1(v0, v0), block2(v0, v0)
|
||||
|
||||
block1(v1: i16, v2: i16):
|
||||
brif v1, block2(v2, v2), block2(v2, v2)
|
||||
|
||||
@@ -11,8 +11,8 @@ function %fibonacci(i32) -> i32 {
|
||||
block0(v0: i32):
|
||||
v1 = icmp_imm ule v0, 2
|
||||
v2 = iconst.i32 1
|
||||
brnz v1, block3(v2) ; handle base case, n <= 2
|
||||
jump block1(v0, v2)
|
||||
; handle base case, n <= 2
|
||||
brif v1, block3(v2), block1(v0, v2)
|
||||
|
||||
block1(v4: i32, v5:i32):
|
||||
v6 = iconst.i32 1
|
||||
@@ -23,8 +23,7 @@ block2(v10: i32, v11: i32, v12: i32): ; params: n, fib(n-1), fib(n-2)
|
||||
v13 = iadd v11, v12
|
||||
v14 = iadd_imm v10, -1
|
||||
v15 = icmp_imm eq v14, 0
|
||||
brnz v15, block3(v13)
|
||||
jump block2(v14, v13, v11)
|
||||
brif v15, block3(v13), block2(v14, v13, v11)
|
||||
|
||||
block3(v20: i32): ; early return and end of loop
|
||||
return v20
|
||||
@@ -45,8 +44,7 @@ function %fibonacci_recursive(i32) -> i32 {
|
||||
|
||||
block0(v0: i32):
|
||||
v1 = icmp_imm ule v0, 2
|
||||
brnz v1, block2
|
||||
jump block1(v0)
|
||||
brif v1, block2, block1(v0)
|
||||
|
||||
block1(v10: i32):
|
||||
v11 = iadd_imm v10, -1
|
||||
|
||||
@@ -5,10 +5,9 @@ target s390x
|
||||
target x86_64
|
||||
target riscv64
|
||||
|
||||
function %i128_brz(i128) -> i8 {
|
||||
function %i128_brif_false(i128) -> i8 {
|
||||
block0(v0: i128):
|
||||
brz v0, block2
|
||||
jump block1
|
||||
brif v0, block1, block2
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 0
|
||||
@@ -18,16 +17,15 @@ block2:
|
||||
v2 = iconst.i8 1
|
||||
return v2
|
||||
}
|
||||
; run: %i128_brz(0) == 1
|
||||
; run: %i128_brz(-1) == 0
|
||||
; run: %i128_brz(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 0
|
||||
; run: %i128_brz(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 0
|
||||
; run: %i128_brif_false(0) == 1
|
||||
; run: %i128_brif_false(-1) == 0
|
||||
; run: %i128_brif_false(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 0
|
||||
; run: %i128_brif_false(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 0
|
||||
|
||||
|
||||
function %i128_brnz(i128) -> i8 {
|
||||
function %i128_brif_true(i128) -> i8 {
|
||||
block0(v0: i128):
|
||||
brnz v0, block2
|
||||
jump block1
|
||||
brif v0, block2, block1
|
||||
|
||||
block1:
|
||||
v1 = iconst.i8 0
|
||||
@@ -37,7 +35,7 @@ block2:
|
||||
v2 = iconst.i8 1
|
||||
return v2
|
||||
}
|
||||
; run: %i128_brnz(0) == 0
|
||||
; run: %i128_brnz(-1) == 1
|
||||
; run: %i128_brnz(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
|
||||
; run: %i128_brnz(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
|
||||
; run: %i128_brif_true(0) == 0
|
||||
; run: %i128_brif_true(-1) == 1
|
||||
; run: %i128_brif_true(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
|
||||
; run: %i128_brif_true(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
|
||||
|
||||
@@ -7,8 +7,7 @@ target riscv64
|
||||
function %issue4996() -> i128, i64 system_v {
|
||||
block0:
|
||||
v5 = iconst.i8 0
|
||||
brz v5, block3 ; v5 = 0
|
||||
jump block1
|
||||
brif v5, block1, block3 ; v5 = 0
|
||||
block1:
|
||||
v12 = iconst.i64 0
|
||||
v13 = uextend.i128 v12 ; v12 = 0
|
||||
|
||||
Reference in New Issue
Block a user