fix codegen riscv64 normalize_cmp_value. (#5873)
* fix issue5839 * add target. * fix normalize_cmp_value. * fix test failutre. * fix test failure. * fix parameter type. * Update cranelift/codegen/src/isa/riscv64/inst.isle Co-authored-by: Jamey Sharp <jamey@minilop.net> * Update cranelift/codegen/src/isa/riscv64/lower.isle Co-authored-by: Jamey Sharp <jamey@minilop.net> * remove convert rule from IntCC to ExtendOp --------- Co-authored-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
@@ -16,8 +16,9 @@ block2:
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; sext.w a2,a0
|
||||
; bne a2,zero,taken(label1),not_taken(label2)
|
||||
; slli a2,a0,32
|
||||
; srli a4,a2,32
|
||||
; bne a4,zero,taken(label1),not_taken(label2)
|
||||
; block1:
|
||||
; j label3
|
||||
; block2:
|
||||
@@ -28,11 +29,12 @@ block2:
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; sext.w a2, a0
|
||||
; bnez a2, 8
|
||||
; block1: ; offset 0x8
|
||||
; slli a2, a0, 0x20
|
||||
; srli a4, a2, 0x20
|
||||
; bnez a4, 8
|
||||
; block1: ; offset 0xc
|
||||
; addi a0, zero, 0x61
|
||||
; block2: ; offset 0xc
|
||||
; block2: ; offset 0x10
|
||||
; ret
|
||||
|
||||
function %cold_annotation(i32) -> i32 {
|
||||
@@ -49,8 +51,9 @@ block2 cold:
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; sext.w a2,a0
|
||||
; bne a2,zero,taken(label1),not_taken(label2)
|
||||
; slli a2,a0,32
|
||||
; srli a4,a2,32
|
||||
; bne a4,zero,taken(label1),not_taken(label2)
|
||||
; block1:
|
||||
; j label3
|
||||
; block3:
|
||||
@@ -61,11 +64,12 @@ block2 cold:
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; sext.w a2, a0
|
||||
; beqz a2, 8
|
||||
; block1: ; offset 0x8
|
||||
; slli a2, a0, 0x20
|
||||
; srli a4, a2, 0x20
|
||||
; beqz a4, 8
|
||||
; block1: ; offset 0xc
|
||||
; ret
|
||||
; block2: ; offset 0xc
|
||||
; block2: ; offset 0x10
|
||||
; addi a0, zero, 0x61
|
||||
; j -8
|
||||
|
||||
|
||||
@@ -675,10 +675,9 @@ block1:
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; lui a1,16
|
||||
; addi a1,a1,4095
|
||||
; and a3,a0,a1
|
||||
; bne a3,zero,taken(label1),not_taken(label2)
|
||||
; slli t2,a0,48
|
||||
; srli a1,t2,48
|
||||
; bne a1,zero,taken(label1),not_taken(label2)
|
||||
; block1:
|
||||
; j label3
|
||||
; block2:
|
||||
@@ -688,10 +687,9 @@ block1:
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; lui a1, 0x10
|
||||
; addi a1, a1, -1
|
||||
; and a3, a0, a1
|
||||
; block1: ; offset 0xc
|
||||
; slli t2, a0, 0x30
|
||||
; srli a1, t2, 0x30
|
||||
; block1: ; offset 0x8
|
||||
; ret
|
||||
|
||||
function %i32_brif(i32){
|
||||
@@ -705,8 +703,9 @@ block1:
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; sext.w t2,a0
|
||||
; bne t2,zero,taken(label1),not_taken(label2)
|
||||
; slli t2,a0,32
|
||||
; srli a1,t2,32
|
||||
; bne a1,zero,taken(label1),not_taken(label2)
|
||||
; block1:
|
||||
; j label3
|
||||
; block2:
|
||||
@@ -716,8 +715,9 @@ block1:
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; sext.w t2, a0
|
||||
; block1: ; offset 0x4
|
||||
; slli t2, a0, 0x20
|
||||
; srli a1, t2, 0x20
|
||||
; block1: ; offset 0x8
|
||||
; ret
|
||||
|
||||
function %i64_brif(i64){
|
||||
|
||||
@@ -108,18 +108,22 @@ block0(v0: i32, v1: i8, v2: i8):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; sext.w a3,a0
|
||||
; li a4,42
|
||||
; sext.w a5,a4
|
||||
; select_reg a0,a1,a2##condition=(a3 eq a5)
|
||||
; slli a3,a0,32
|
||||
; srli a3,a3,32
|
||||
; li a5,42
|
||||
; slli a7,a5,32
|
||||
; srli t4,a7,32
|
||||
; select_reg a0,a1,a2##condition=(a3 eq t4)
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; sext.w a3, a0
|
||||
; addi a4, zero, 0x2a
|
||||
; sext.w a5, a4
|
||||
; beq a3, a5, 0xc
|
||||
; slli a3, a0, 0x20
|
||||
; srli a3, a3, 0x20
|
||||
; addi a5, zero, 0x2a
|
||||
; slli a7, a5, 0x20
|
||||
; srli t4, a7, 0x20
|
||||
; beq a3, t4, 0xc
|
||||
; ori a0, a2, 0
|
||||
; j 8
|
||||
; ori a0, a1, 0
|
||||
|
||||
@@ -150,17 +150,20 @@ block0(v0: i32):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; sext.w t2,a0
|
||||
; li a1,-1
|
||||
; select_reg a1,zero,a1##condition=(zero eq t2)
|
||||
; slli t2,a0,32
|
||||
; srli a1,t2,32
|
||||
; li a3,-1
|
||||
; select_reg a1,zero,a3##condition=(zero eq a1)
|
||||
; mv a0,a1
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; sext.w t2, a0
|
||||
; addi a1, zero, -1
|
||||
; beq zero, t2, 8
|
||||
; slli t2, a0, 0x20
|
||||
; srli a1, t2, 0x20
|
||||
; addi a3, zero, -1
|
||||
; beq zero, a1, 0xc
|
||||
; ori a1, a3, 0
|
||||
; j 8
|
||||
; ori a1, zero, 0
|
||||
; ori a0, a1, 0
|
||||
@@ -174,22 +177,20 @@ block0(v0: i16):
|
||||
|
||||
; VCode:
|
||||
; block0:
|
||||
; lui a1,16
|
||||
; addi a1,a1,4095
|
||||
; and a3,a0,a1
|
||||
; li a5,-1
|
||||
; select_reg a1,zero,a5##condition=(zero eq a3)
|
||||
; slli t2,a0,48
|
||||
; srli a1,t2,48
|
||||
; li a3,-1
|
||||
; select_reg a1,zero,a3##condition=(zero eq a1)
|
||||
; mv a0,a1
|
||||
; ret
|
||||
;
|
||||
; Disassembled:
|
||||
; block0: ; offset 0x0
|
||||
; lui a1, 0x10
|
||||
; addi a1, a1, -1
|
||||
; and a3, a0, a1
|
||||
; addi a5, zero, -1
|
||||
; beq zero, a3, 0xc
|
||||
; ori a1, a5, 0
|
||||
; slli t2, a0, 0x30
|
||||
; srli a1, t2, 0x30
|
||||
; addi a3, zero, -1
|
||||
; beq zero, a1, 0xc
|
||||
; ori a1, a3, 0
|
||||
; j 8
|
||||
; ori a1, zero, 0
|
||||
; ori a0, a1, 0
|
||||
|
||||
20
cranelift/filetests/filetests/runtests/issue5839.clif
Normal file
20
cranelift/filetests/filetests/runtests/issue5839.clif
Normal file
@@ -0,0 +1,20 @@
|
||||
test interpret
|
||||
test run
|
||||
set opt_level=speed
|
||||
target aarch64
|
||||
target s390x
|
||||
target x86_64
|
||||
target riscv64
|
||||
|
||||
function %a(i8, i8) -> i32 {
|
||||
block0(v0: i8, v1: i8):
|
||||
v2 = icmp sle v0, v1
|
||||
v3 = uextend.i32 v2
|
||||
v4 = iconst.i32 0
|
||||
v5 = iconst.i32 1
|
||||
v6 = icmp.i32 eq v3, v4 ; v4 = 0
|
||||
v7 = select v6, v5, v3 ; v5 = 1
|
||||
return v7
|
||||
}
|
||||
|
||||
; run: %a(20, -11) == 1
|
||||
Reference in New Issue
Block a user