From dac71f9e85a6d7725cc0c1953f28639610344bb9 Mon Sep 17 00:00:00 2001 From: Afonso Bordado Date: Mon, 27 May 2024 19:58:31 +0100 Subject: [PATCH] riscv64: Improve lowering for base select --- .../codegen/src/isa/riscv64/inst/emit.rs | 22 +- cranelift/codegen/src/isa/riscv64/inst/mod.rs | 22 +- .../filetests/isa/riscv64/bitops.clif | 97 +++---- .../filetests/filetests/isa/riscv64/brif.clif | 7 +- .../filetests/filetests/isa/riscv64/ceil.clif | 10 +- .../filetests/isa/riscv64/cls-zbb.clif | 31 +-- .../filetests/isa/riscv64/clz-zbb.clif | 13 +- .../filetests/isa/riscv64/condbr.clif | 152 ++++++----- .../filetests/isa/riscv64/condops.clif | 12 +- .../filetests/isa/riscv64/ctz-zbb.clif | 3 +- .../filetests/isa/riscv64/floor.clif | 10 +- .../filetests/filetests/isa/riscv64/fmax.clif | 6 +- .../filetests/filetests/isa/riscv64/fmin.clif | 6 +- .../filetests/filetests/isa/riscv64/iabs.clif | 28 +- .../filetests/isa/riscv64/ishl-const.clif | 34 +-- .../filetests/filetests/isa/riscv64/ishl.clif | 34 +-- .../filetests/isa/riscv64/issue-6954.clif | 248 ++++++++++++++---- .../isa/riscv64/nan-canonicalization.clif | 10 +- .../filetests/isa/riscv64/nearest.clif | 10 +- .../filetests/filetests/isa/riscv64/rotl.clif | 43 ++- .../filetests/filetests/isa/riscv64/rotr.clif | 34 +-- .../filetests/isa/riscv64/select-float.clif | 50 +++- .../filetests/isa/riscv64/select.clif | 91 +++---- .../filetests/isa/riscv64/simd-select.clif | 18 +- .../filetests/isa/riscv64/smax-zbb.clif | 40 +-- .../filetests/filetests/isa/riscv64/smax.clif | 56 ++-- .../filetests/isa/riscv64/smin-zbb.clif | 40 +-- .../filetests/filetests/isa/riscv64/smin.clif | 56 ++-- .../filetests/isa/riscv64/sshr-const.clif | 59 ++--- .../filetests/filetests/isa/riscv64/sshr.clif | 59 ++--- .../filetests/isa/riscv64/trunc.clif | 10 +- .../filetests/isa/riscv64/umax-zbb.clif | 40 +-- .../filetests/filetests/isa/riscv64/umax.clif | 56 ++-- .../filetests/isa/riscv64/umin-zbb.clif | 40 +-- .../filetests/filetests/isa/riscv64/umin.clif | 56 ++-- .../filetests/isa/riscv64/ushr-const.clif | 34 +-- .../filetests/filetests/isa/riscv64/ushr.clif | 34 +-- .../filetests/filetests/isa/riscv64/zca.clif | 3 +- 38 files changed, 805 insertions(+), 769 deletions(-) diff --git a/cranelift/codegen/src/isa/riscv64/inst/emit.rs b/cranelift/codegen/src/isa/riscv64/inst/emit.rs index a3fd4e5db568..18383f3b4f2a 100644 --- a/cranelift/codegen/src/isa/riscv64/inst/emit.rs +++ b/cranelift/codegen/src/isa/riscv64/inst/emit.rs @@ -1520,24 +1520,22 @@ impl Inst { ref x, ref y, } => { - let label_true = sink.get_label(); - let label_false = sink.get_label(); let label_end = sink.get_label(); + + // Unconditonally move the x value to the destination register. + for i in gen_moves(dst.regs(), x.regs()) { + i.emit(sink, emit_info, state); + } + + // If the condition passes we skip over the y move Inst::CondBr { - taken: CondBrTarget::Label(label_true), - not_taken: CondBrTarget::Label(label_false), + taken: CondBrTarget::Label(label_end), + not_taken: CondBrTarget::Fallthrough, kind: condition, } .emit(sink, emit_info, state); - sink.bind_label(label_true, &mut state.ctrl_plane); - // here is the true - // select the first value - for i in gen_moves(dst.regs(), x.regs()) { - i.emit(sink, emit_info, state); - } - Inst::gen_jump(label_end).emit(sink, emit_info, state); - sink.bind_label(label_false, &mut state.ctrl_plane); + // Move the y value to the destination register. for i in gen_moves(dst.regs(), y.regs()) { i.emit(sink, emit_info, state); } diff --git a/cranelift/codegen/src/isa/riscv64/inst/mod.rs b/cranelift/codegen/src/isa/riscv64/inst/mod.rs index 9a950529b387..ccfe20dabe24 100644 --- a/cranelift/codegen/src/isa/riscv64/inst/mod.rs +++ b/cranelift/codegen/src/isa/riscv64/inst/mod.rs @@ -467,22 +467,12 @@ fn riscv64_get_operands(inst: &mut Inst, collector: &mut impl OperandVisitor) { for reg in y.regs_mut() { collector.reg_use(reg); } - // If there's more than one destination register then use - // `reg_early_def` to prevent destination registers from overlapping - // with any operands. This ensures that the lowering doesn't have to - // deal with a situation such as when the input registers need to be - // swapped when moved to the destination. - // - // When there's only one destination register though don't use an - // early def because once the register is written no other inputs - // are read so it's ok for the destination to overlap the sources. - match dst.regs_mut() { - [reg] => collector.reg_def(reg), - regs => { - for d in regs { - collector.reg_early_def(d); - } - } + + // We unconditionally move one of the inputs to the destination register + // before evaluating the condition. Mark this as early def so that + // there are no conflicts with one of the input registers. + for d in dst.regs_mut() { + collector.reg_early_def(d); } } Inst::AtomicCas { diff --git a/cranelift/filetests/filetests/isa/riscv64/bitops.clif b/cranelift/filetests/filetests/isa/riscv64/bitops.clif index b05b32084e3e..cb450486ab8c 100644 --- a/cranelift/filetests/filetests/isa/riscv64/bitops.clif +++ b/cranelift/filetests/filetests/isa/riscv64/bitops.clif @@ -154,9 +154,8 @@ block0(v0: i128): ; addi a2, a2, -1 ; srli a4, a4, 1 ; j -0x18 -; bnez a1, 0xc ; mv a0, a3 -; j 8 +; beqz a1, 8 ; mv a0, zero ; add a0, a5, a0 ; mv a1, zero @@ -183,9 +182,8 @@ block0(v0: i8): ; slli a2, a0, 0x38 ; srai a4, a2, 0x38 ; not a0, a4 -; bgez a4, 0xc ; mv a2, a0 -; j 8 +; bltz a4, 8 ; mv a2, a4 ; mv a0, zero ; addi a5, zero, 0x40 @@ -222,9 +220,8 @@ block0(v0: i16): ; slli a2, a0, 0x30 ; srai a4, a2, 0x30 ; not a0, a4 -; bgez a4, 0xc ; mv a2, a0 -; j 8 +; bltz a4, 8 ; mv a2, a4 ; mv a0, zero ; addi a5, zero, 0x40 @@ -259,9 +256,8 @@ block0(v0: i32): ; block0: ; offset 0x0 ; sext.w a2, a0 ; not a4, a2 -; bgez a2, 0xc ; mv a0, a4 -; j 8 +; bltz a2, 8 ; mv a0, a2 ; mv a4, zero ; addi a3, zero, 0x40 @@ -294,9 +290,8 @@ block0(v0: i64): ; Disassembled: ; block0: ; offset 0x0 ; not a2, a0 -; bgez a0, 0xc ; mv a4, a2 -; j 8 +; bltz a0, 8 ; mv a4, a0 ; mv a2, zero ; addi a1, zero, 0x40 @@ -335,14 +330,12 @@ block0(v0: i128): ; Disassembled: ; block0: ; offset 0x0 ; not a3, a0 -; bgez a1, 0xc ; mv a5, a3 -; j 8 +; bltz a1, 8 ; mv a5, a0 ; not a2, a1 -; bgez a1, 0xc ; mv a3, a2 -; j 8 +; bltz a1, 8 ; mv a3, a1 ; mv a1, zero ; addi a0, zero, 0x40 @@ -366,9 +359,8 @@ block0(v0: i128): ; addi a4, a4, -1 ; srli a2, a2, 1 ; j -0x18 -; bnez a3, 0xc ; mv a2, a0 -; j 8 +; beqz a3, 8 ; mv a2, zero ; add a3, a1, a2 ; addi a0, a3, -1 @@ -493,8 +485,8 @@ block0(v0: i128): ; block0: ; ctz a5,a1##ty=i64 tmp=a3 step=a4 ; ctz a3,a0##ty=i64 tmp=a1 step=a2 -; select a5,a5,zero##condition=(a0 eq zero) -; add a0,a3,a5 +; select a1,a5,zero##condition=(a0 eq zero) +; add a0,a3,a1 ; li a1,0 ; ret ; @@ -520,9 +512,10 @@ block0(v0: i128): ; addi a2, a2, -1 ; slli a1, a1, 1 ; j -0x18 +; mv a1, a5 ; beqz a0, 8 -; mv a5, zero -; add a0, a3, a5 +; mv a1, zero +; add a0, a3, a1 ; mv a1, zero ; ret @@ -1457,18 +1450,16 @@ block0(v0: i128, v1: i8): ; sub a3, a3, a5 ; sll a4, a0, a5 ; srl a0, a0, a3 -; beqz a5, 0xc ; mv a3, a0 -; j 8 +; bnez a5, 8 ; mv a3, zero ; sll a5, a1, a5 ; or a5, a3, a5 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -1487,8 +1478,8 @@ block0(v0: i128, v1: i128): ; sub a3,a3,a0 ; mv a4,a5 ; sll a5,a4,a0 -; srl a3,a4,a3 -; select a3,a3,zero##condition=(a0 ne zero) +; srl a4,a4,a3 +; select a3,a4,zero##condition=(a0 ne zero) ; sll a0,a1,a0 ; or a4,a3,a0 ; li a3,64 @@ -1504,17 +1495,17 @@ block0(v0: i128, v1: i128): ; sub a3, a3, a0 ; mv a4, a5 ; sll a5, a4, a0 -; srl a3, a4, a3 +; srl a4, a4, a3 +; mv a3, a4 ; bnez a0, 8 ; mv a3, zero ; sll a0, a1, a0 ; or a4, a3, a0 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a5 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a5 ; mv a1, a4 ; ret @@ -1546,19 +1537,17 @@ block0(v0: i128, v1: i8): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi t0, zero, 0x40 ; srl a3, a1, a4 ; andi a4, a2, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a3 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -1580,8 +1569,8 @@ block0(v0: i128, v1: i128): ; andi a5,a2,63 ; li a3,64 ; sub a3,a3,a5 -; sll a3,a1,a3 -; select a3,a3,zero##condition=(a5 ne zero) +; sll a4,a1,a3 +; select a3,a4,zero##condition=(a5 ne zero) ; srl a4,a0,a5 ; or s11,a3,a4 ; li a3,64 @@ -1607,7 +1596,8 @@ block0(v0: i128, v1: i128): ; andi a5, a2, 0x3f ; addi a3, zero, 0x40 ; sub a3, a3, a5 -; sll a3, a1, a3 +; sll a4, a1, a3 +; mv a3, a4 ; bnez a5, 8 ; mv a3, zero ; srl a4, a0, a5 @@ -1615,10 +1605,9 @@ block0(v0: i128, v1: i128): ; addi a3, zero, 0x40 ; srl a4, a1, a5 ; andi a5, a2, 0x7f -; bltu a5, a3, 0x10 ; mv a0, a4 ; mv a1, zero -; j 0xc +; bgeu a5, a3, 0xc ; mv a0, s11 ; mv a1, a4 ; ld s11, 8(sp) @@ -1658,25 +1647,22 @@ block0(v0: i128, v1: i8): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -1698,17 +1684,17 @@ block0(v0: i128, v1: i128): ; andi a5,a2,63 ; li a3,64 ; sub a3,a3,a5 -; sll a3,a1,a3 -; select a3,a3,zero##condition=(a5 ne zero) +; sll a4,a1,a3 +; select a3,a4,zero##condition=(a5 ne zero) ; srl a4,a0,a5 ; or s11,a3,a4 ; li a3,64 ; sra a3,a1,a5 ; li a5,-1 -; select a5,a5,zero##condition=(a1 slt zero) -; li a4,64 +; select a4,a5,zero##condition=(a1 slt zero) +; li a5,64 ; andi a2,a2,127 -; select [a0,a1],[a3,a5],[s11,a3]##condition=(a2 uge a4) +; select [a0,a1],[a3,a4],[s11,a3]##condition=(a2 uge a5) ; ld s11,8(sp) ; addi sp,sp,16 ; ld ra,8(sp) @@ -1728,7 +1714,8 @@ block0(v0: i128, v1: i128): ; andi a5, a2, 0x3f ; addi a3, zero, 0x40 ; sub a3, a3, a5 -; sll a3, a1, a3 +; sll a4, a1, a3 +; mv a3, a4 ; bnez a5, 8 ; mv a3, zero ; srl a4, a0, a5 @@ -1736,14 +1723,14 @@ block0(v0: i128, v1: i128): ; addi a3, zero, 0x40 ; sra a3, a1, a5 ; addi a5, zero, -1 +; mv a4, a5 ; bltz a1, 8 -; mv a5, zero -; addi a4, zero, 0x40 +; mv a4, zero +; addi a5, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 -; mv a1, a5 -; j 0xc +; mv a1, a4 +; bgeu a2, a5, 0xc ; mv a0, s11 ; mv a1, a3 ; ld s11, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/brif.clif b/cranelift/filetests/filetests/isa/riscv64/brif.clif index aee4456047d7..30b0f5fa747a 100644 --- a/cranelift/filetests/filetests/isa/riscv64/brif.clif +++ b/cranelift/filetests/filetests/isa/riscv64/brif.clif @@ -367,15 +367,14 @@ block2: ; slt a5, a3, a1 ; sltu a4, a2, a0 ; xor a0, a3, a1 -; bnez a0, 0xc ; mv a1, a4 -; j 8 +; beqz a0, 8 ; mv a1, a5 ; bnez a1, 0xc -; block1: ; offset 0x20 +; block1: ; offset 0x1c ; mv a0, zero ; ret -; block2: ; offset 0x28 +; block2: ; offset 0x24 ; addi a0, zero, 1 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/ceil.clif b/cranelift/filetests/filetests/isa/riscv64/ceil.clif index f7f0a32e91e4..e82c388b8e00 100644 --- a/cranelift/filetests/filetests/isa/riscv64/ceil.clif +++ b/cranelift/filetests/filetests/isa/riscv64/ceil.clif @@ -19,8 +19,8 @@ block0(v0: f32): ; fcvt.s.w fa1,a4,rup ; fsgnj.s fa2,fa1,fa0 ; fmv.w.x fa4,zero -; fadd.s fa0,fa0,fa4,rne -; select fa0,fa0,fa2##condition=(a2 eq zero) +; fadd.s fa1,fa0,fa4,rne +; select fa0,fa1,fa2##condition=(a2 eq zero) ; ret ; ; Disassembled: @@ -33,7 +33,8 @@ block0(v0: f32): ; fcvt.s.w fa1, a4, rup ; fsgnj.s fa2, fa1, fa0 ; fmv.w.x fa4, zero -; fadd.s fa0, fa0, fa4, rne +; fadd.s fa1, fa0, fa4, rne +; fmv.d fa0, fa1 ; beqz a2, 8 ; fmv.d fa0, fa2 ; ret @@ -71,9 +72,8 @@ block0(v0: f64): ; fsgnj.d fa4, fa2, fa0 ; fmv.d.x fa1, zero ; fadd.d fa2, fa0, fa1, rne -; bnez a4, 0xc ; fmv.d fa0, fa2 -; j 8 +; beqz a4, 8 ; fmv.d fa0, fa4 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/cls-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/cls-zbb.clif index 1477bb8ba5d4..229b157beedf 100644 --- a/cranelift/filetests/filetests/isa/riscv64/cls-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/cls-zbb.clif @@ -22,9 +22,8 @@ block0(v0: i8): ; block0: ; offset 0x0 ; .byte 0x13, 0x16, 0x45, 0x60 ; not a4, a2 -; bgez a2, 0xc ; mv a0, a4 -; j 8 +; bltz a2, 8 ; mv a0, a2 ; .byte 0x13, 0x16, 0x05, 0x60 ; addi a0, a2, -0x39 @@ -49,9 +48,8 @@ block0(v0: i16): ; block0: ; offset 0x0 ; .byte 0x13, 0x16, 0x55, 0x60 ; not a4, a2 -; bgez a2, 0xc ; mv a0, a4 -; j 8 +; bltz a2, 8 ; mv a0, a2 ; .byte 0x13, 0x16, 0x05, 0x60 ; addi a0, a2, -0x31 @@ -76,9 +74,8 @@ block0(v0: i32): ; block0: ; offset 0x0 ; sext.w a2, a0 ; not a4, a2 -; bgez a2, 0xc ; mv a0, a4 -; j 8 +; bltz a2, 8 ; mv a0, a2 ; .byte 0x13, 0x16, 0x05, 0x60 ; addi a0, a2, -0x21 @@ -101,9 +98,8 @@ block0(v0: i64): ; Disassembled: ; block0: ; offset 0x0 ; not a2, a0 -; bgez a0, 0xc ; mv a4, a2 -; j 8 +; bltz a0, 8 ; mv a4, a0 ; .byte 0x13, 0x15, 0x07, 0x60 ; addi a0, a0, -1 @@ -123,8 +119,8 @@ block0(v0: i128): ; select a3,a2,a1##condition=(a1 slt zero) ; clz a0,a3 ; clz a1,a5 -; select a3,a1,zero##condition=(a3 eq zero) -; add a5,a0,a3 +; select a4,a1,zero##condition=(a3 eq zero) +; add a5,a0,a4 ; addi a0,a5,-1 ; li a1,0 ; ret @@ -132,22 +128,19 @@ block0(v0: i128): ; Disassembled: ; block0: ; offset 0x0 ; not a3, a0 -; bgez a1, 0xc ; mv a5, a3 -; j 8 +; bltz a1, 8 ; mv a5, a0 ; not a2, a1 -; bgez a1, 0xc ; mv a3, a2 -; j 8 +; bltz a1, 8 ; mv a3, a1 ; .byte 0x13, 0x95, 0x06, 0x60 ; .byte 0x93, 0x95, 0x07, 0x60 -; bnez a3, 0xc -; mv a3, a1 -; j 8 -; mv a3, zero -; add a5, a0, a3 +; mv a4, a1 +; beqz a3, 8 +; mv a4, zero +; add a5, a0, a4 ; addi a0, a5, -1 ; mv a1, zero ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/clz-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/clz-zbb.clif index fda9f412930d..41789817995e 100644 --- a/cranelift/filetests/filetests/isa/riscv64/clz-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/clz-zbb.clif @@ -84,8 +84,8 @@ block0(v0: i128): ; block0: ; clz a3,a1 ; clz a5,a0 -; select a1,a5,zero##condition=(a1 eq zero) -; add a0,a3,a1 +; select a2,a5,zero##condition=(a1 eq zero) +; add a0,a3,a2 ; li a1,0 ; ret ; @@ -93,11 +93,10 @@ block0(v0: i128): ; block0: ; offset 0x0 ; .byte 0x93, 0x96, 0x05, 0x60 ; .byte 0x93, 0x17, 0x05, 0x60 -; bnez a1, 0xc -; mv a1, a5 -; j 8 -; mv a1, zero -; add a0, a3, a1 +; mv a2, a5 +; beqz a1, 8 +; mv a2, zero +; add a0, a3, a2 ; mv a1, zero ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/condbr.clif b/cranelift/filetests/filetests/isa/riscv64/condbr.clif index 9ac16eec16ad..39ace5a90584 100644 --- a/cranelift/filetests/filetests/isa/riscv64/condbr.clif +++ b/cranelift/filetests/filetests/isa/riscv64/condbr.clif @@ -83,9 +83,8 @@ block0(v0: i128, v1: i128): ; slt a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 0xc ; mv a0, a2 -; j 8 +; beqz a3, 8 ; mv a0, a5 ; ret @@ -108,9 +107,8 @@ block0(v0: i128, v1: i128): ; sltu a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 0xc ; mv a0, a2 -; j 8 +; beqz a3, 8 ; mv a0, a5 ; ret @@ -125,8 +123,8 @@ block0(v0: i128, v1: i128): ; slt a5,a3,a1 ; sltu a2,a2,a0 ; xor a3,a3,a1 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a0,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a0,a0,1 ; ret ; ; Disassembled: @@ -134,9 +132,10 @@ block0(v0: i128, v1: i128): ; slt a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 8 -; mv a5, a2 -; xori a0, a5, 1 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a0, a0, 1 ; ret function %icmp_ule_i128(i128, i128) -> i8 { @@ -150,8 +149,8 @@ block0(v0: i128, v1: i128): ; sltu a5,a3,a1 ; sltu a2,a2,a0 ; xor a3,a3,a1 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a0,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a0,a0,1 ; ret ; ; Disassembled: @@ -159,9 +158,10 @@ block0(v0: i128, v1: i128): ; sltu a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 8 -; mv a5, a2 -; xori a0, a5, 1 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a0, a0, 1 ; ret function %icmp_sgt_i128(i128, i128) -> i8 { @@ -183,9 +183,8 @@ block0(v0: i128, v1: i128): ; slt a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 0xc ; mv a0, a2 -; j 8 +; beqz a3, 8 ; mv a0, a5 ; ret @@ -208,9 +207,8 @@ block0(v0: i128, v1: i128): ; sltu a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 0xc ; mv a0, a2 -; j 8 +; beqz a3, 8 ; mv a0, a5 ; ret @@ -225,8 +223,8 @@ block0(v0: i128, v1: i128): ; slt a5,a1,a3 ; sltu a2,a0,a2 ; xor a3,a1,a3 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a0,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a0,a0,1 ; ret ; ; Disassembled: @@ -234,9 +232,10 @@ block0(v0: i128, v1: i128): ; slt a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 8 -; mv a5, a2 -; xori a0, a5, 1 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a0, a0, 1 ; ret function %icmp_uge_i128(i128, i128) -> i8 { @@ -250,8 +249,8 @@ block0(v0: i128, v1: i128): ; sltu a5,a1,a3 ; sltu a2,a0,a2 ; xor a3,a1,a3 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a0,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a0,a0,1 ; ret ; ; Disassembled: @@ -259,9 +258,10 @@ block0(v0: i128, v1: i128): ; sltu a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 8 -; mv a5, a2 -; xori a0, a5, 1 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a0, a0, 1 ; ret function %f(i64, i64) -> i64 { @@ -428,8 +428,8 @@ block1: ; slt a5,a1,a3 ; sltu a2,a0,a2 ; xor a3,a1,a3 -; select a5,a2,a5##condition=(a3 eq zero) -; bne a5,zero,taken(label1),not_taken(label2) +; select a0,a2,a5##condition=(a3 eq zero) +; bne a0,zero,taken(label1),not_taken(label2) ; block1: ; j label3 ; block2: @@ -442,9 +442,10 @@ block1: ; slt a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 8 -; mv a5, a2 -; block1: ; offset 0x14 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; block1: ; offset 0x18 ; ret function %i128_bricmp_ult(i128, i128) { @@ -461,8 +462,8 @@ block1: ; sltu a5,a1,a3 ; sltu a2,a0,a2 ; xor a3,a1,a3 -; select a5,a2,a5##condition=(a3 eq zero) -; bne a5,zero,taken(label1),not_taken(label2) +; select a0,a2,a5##condition=(a3 eq zero) +; bne a0,zero,taken(label1),not_taken(label2) ; block1: ; j label3 ; block2: @@ -475,9 +476,10 @@ block1: ; sltu a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 8 -; mv a5, a2 -; block1: ; offset 0x14 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; block1: ; offset 0x18 ; ret function %i128_bricmp_sle(i128, i128) { @@ -494,8 +496,8 @@ block1: ; slt a5,a3,a1 ; sltu a2,a2,a0 ; xor a3,a3,a1 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a1,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a1,a0,1 ; bne a1,zero,taken(label1),not_taken(label2) ; block1: ; j label3 @@ -509,10 +511,11 @@ block1: ; slt a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 8 -; mv a5, a2 -; xori a1, a5, 1 -; block1: ; offset 0x18 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a1, a0, 1 +; block1: ; offset 0x1c ; ret function %i128_bricmp_ule(i128, i128) { @@ -529,8 +532,8 @@ block1: ; sltu a5,a3,a1 ; sltu a2,a2,a0 ; xor a3,a3,a1 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a1,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a1,a0,1 ; bne a1,zero,taken(label1),not_taken(label2) ; block1: ; j label3 @@ -544,10 +547,11 @@ block1: ; sltu a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 8 -; mv a5, a2 -; xori a1, a5, 1 -; block1: ; offset 0x18 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a1, a0, 1 +; block1: ; offset 0x1c ; ret function %i128_bricmp_sgt(i128, i128) { @@ -564,8 +568,8 @@ block1: ; slt a5,a3,a1 ; sltu a2,a2,a0 ; xor a3,a3,a1 -; select a5,a2,a5##condition=(a3 eq zero) -; bne a5,zero,taken(label1),not_taken(label2) +; select a0,a2,a5##condition=(a3 eq zero) +; bne a0,zero,taken(label1),not_taken(label2) ; block1: ; j label3 ; block2: @@ -578,9 +582,10 @@ block1: ; slt a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 8 -; mv a5, a2 -; block1: ; offset 0x14 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; block1: ; offset 0x18 ; ret function %i128_bricmp_ugt(i128, i128) { @@ -597,8 +602,8 @@ block1: ; sltu a5,a3,a1 ; sltu a2,a2,a0 ; xor a3,a3,a1 -; select a5,a2,a5##condition=(a3 eq zero) -; bne a5,zero,taken(label1),not_taken(label2) +; select a0,a2,a5##condition=(a3 eq zero) +; bne a0,zero,taken(label1),not_taken(label2) ; block1: ; j label3 ; block2: @@ -611,9 +616,10 @@ block1: ; sltu a5, a3, a1 ; sltu a2, a2, a0 ; xor a3, a3, a1 -; bnez a3, 8 -; mv a5, a2 -; block1: ; offset 0x14 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; block1: ; offset 0x18 ; ret function %i128_bricmp_sge(i128, i128) { @@ -630,8 +636,8 @@ block1: ; slt a5,a1,a3 ; sltu a2,a0,a2 ; xor a3,a1,a3 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a1,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a1,a0,1 ; bne a1,zero,taken(label1),not_taken(label2) ; block1: ; j label3 @@ -645,10 +651,11 @@ block1: ; slt a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 8 -; mv a5, a2 -; xori a1, a5, 1 -; block1: ; offset 0x18 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a1, a0, 1 +; block1: ; offset 0x1c ; ret function %i128_bricmp_uge(i128, i128) { @@ -665,8 +672,8 @@ block1: ; sltu a5,a1,a3 ; sltu a2,a0,a2 ; xor a3,a1,a3 -; select a5,a2,a5##condition=(a3 eq zero) -; xori a1,a5,1 +; select a0,a2,a5##condition=(a3 eq zero) +; xori a1,a0,1 ; bne a1,zero,taken(label1),not_taken(label2) ; block1: ; j label3 @@ -680,10 +687,11 @@ block1: ; sltu a5, a1, a3 ; sltu a2, a0, a2 ; xor a3, a1, a3 -; bnez a3, 8 -; mv a5, a2 -; xori a1, a5, 1 -; block1: ; offset 0x18 +; mv a0, a2 +; beqz a3, 8 +; mv a0, a5 +; xori a1, a0, 1 +; block1: ; offset 0x1c ; ret function %i8_brif(i8){ diff --git a/cranelift/filetests/filetests/isa/riscv64/condops.clif b/cranelift/filetests/filetests/isa/riscv64/condops.clif index 1f2f5dfa8daa..f134e0dde614 100644 --- a/cranelift/filetests/filetests/isa/riscv64/condops.clif +++ b/cranelift/filetests/filetests/isa/riscv64/condops.clif @@ -23,9 +23,8 @@ block0(v0: i8, v1: i64, v2: i64): ; addi a3, zero, 0x2a ; andi a5, a0, 0xff ; andi a3, a3, 0xff -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -89,9 +88,8 @@ block0(v0: i8, v1: i8, v2: i8): ; Disassembled: ; block0: ; offset 0x0 ; andi a4, a0, 0xff -; beqz a4, 0xc ; mv a0, a1 -; j 8 +; bnez a4, 8 ; mv a0, a2 ; ret @@ -116,9 +114,8 @@ block0(v0: i32, v1: i8, v2: i8): ; addi a3, zero, 0x2a ; sext.w a5, a0 ; sext.w a3, a3 -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -157,10 +154,9 @@ block0(v0: i8, v1: i128, v2: i128): ; block1: ; offset 0x18 ; mv s4, a1 ; andi a5, a0, 0xff -; beqz a5, 0x10 ; mv a0, s4 ; mv a1, a2 -; j 0xc +; bnez a5, 0xc ; mv a0, a3 ; mv a1, a4 ; ld s4, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/ctz-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/ctz-zbb.clif index d5959eb63d3c..97c6ba309dfa 100644 --- a/cranelift/filetests/filetests/isa/riscv64/ctz-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/ctz-zbb.clif @@ -92,9 +92,8 @@ block0(v0: i128): ; block0: ; offset 0x0 ; .byte 0x93, 0x96, 0x15, 0x60 ; .byte 0x93, 0x17, 0x15, 0x60 -; bnez a0, 0xc ; mv a1, a3 -; j 8 +; beqz a0, 8 ; mv a1, zero ; add a0, a5, a1 ; mv a1, zero diff --git a/cranelift/filetests/filetests/isa/riscv64/floor.clif b/cranelift/filetests/filetests/isa/riscv64/floor.clif index 0ccdc91839fd..62690380188d 100644 --- a/cranelift/filetests/filetests/isa/riscv64/floor.clif +++ b/cranelift/filetests/filetests/isa/riscv64/floor.clif @@ -19,8 +19,8 @@ block0(v0: f32): ; fcvt.s.w fa1,a4,rdn ; fsgnj.s fa2,fa1,fa0 ; fmv.w.x fa4,zero -; fadd.s fa0,fa0,fa4,rne -; select fa0,fa0,fa2##condition=(a2 eq zero) +; fadd.s fa1,fa0,fa4,rne +; select fa0,fa1,fa2##condition=(a2 eq zero) ; ret ; ; Disassembled: @@ -33,7 +33,8 @@ block0(v0: f32): ; fcvt.s.w fa1, a4, rdn ; fsgnj.s fa2, fa1, fa0 ; fmv.w.x fa4, zero -; fadd.s fa0, fa0, fa4, rne +; fadd.s fa1, fa0, fa4, rne +; fmv.d fa0, fa1 ; beqz a2, 8 ; fmv.d fa0, fa2 ; ret @@ -71,9 +72,8 @@ block0(v0: f64): ; fsgnj.d fa4, fa2, fa0 ; fmv.d.x fa1, zero ; fadd.d fa2, fa0, fa1, rne -; bnez a4, 0xc ; fmv.d fa0, fa2 -; j 8 +; beqz a4, 8 ; fmv.d fa0, fa4 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/fmax.clif b/cranelift/filetests/filetests/isa/riscv64/fmax.clif index c7939f36b57e..456ad8ca0823 100644 --- a/cranelift/filetests/filetests/isa/riscv64/fmax.clif +++ b/cranelift/filetests/filetests/isa/riscv64/fmax.clif @@ -25,9 +25,8 @@ block0(v0: f32, v1: f32): ; and a1, a3, a5 ; fadd.s fa3, fa0, fa1, rne ; fmax.s fa5, fa0, fa1 -; beqz a1, 0xc ; fmv.d fa0, fa5 -; j 8 +; bnez a1, 8 ; fmv.d fa0, fa3 ; ret @@ -54,9 +53,8 @@ block0(v0: f64, v1: f64): ; and a1, a3, a5 ; fadd.d fa3, fa0, fa1, rne ; fmax.d fa5, fa0, fa1 -; beqz a1, 0xc ; fmv.d fa0, fa5 -; j 8 +; bnez a1, 8 ; fmv.d fa0, fa3 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/fmin.clif b/cranelift/filetests/filetests/isa/riscv64/fmin.clif index cdc3b15bbdf2..dd208cb24a60 100644 --- a/cranelift/filetests/filetests/isa/riscv64/fmin.clif +++ b/cranelift/filetests/filetests/isa/riscv64/fmin.clif @@ -25,9 +25,8 @@ block0(v0: f32, v1: f32): ; and a1, a3, a5 ; fadd.s fa3, fa0, fa1, rne ; fmin.s fa5, fa0, fa1 -; beqz a1, 0xc ; fmv.d fa0, fa5 -; j 8 +; bnez a1, 8 ; fmv.d fa0, fa3 ; ret @@ -54,9 +53,8 @@ block0(v0: f64, v1: f64): ; and a1, a3, a5 ; fadd.d fa3, fa0, fa1, rne ; fmin.d fa5, fa0, fa1 -; beqz a1, 0xc ; fmv.d fa0, fa5 -; j 8 +; bnez a1, 8 ; fmv.d fa0, fa3 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/iabs.clif b/cranelift/filetests/filetests/isa/riscv64/iabs.clif index 6a91b7cb1dde..8c8290a8966e 100644 --- a/cranelift/filetests/filetests/isa/riscv64/iabs.clif +++ b/cranelift/filetests/filetests/isa/riscv64/iabs.clif @@ -11,17 +11,18 @@ block0(v0: i8): ; block0: ; slli a2,a0,56 ; srai a4,a2,56 -; sub a0,zero,a4 -; select a0,a4,a0##condition=(a4 sgt a0) +; sub a1,zero,a4 +; select a0,a4,a1##condition=(a4 sgt a1) ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; slli a2, a0, 0x38 ; srai a4, a2, 0x38 -; neg a0, a4 -; bge a0, a4, 8 +; neg a1, a4 ; mv a0, a4 +; blt a1, a4, 8 +; mv a0, a1 ; ret function %iabs_i16(i16) -> i16 { @@ -34,17 +35,18 @@ block0(v0: i16): ; block0: ; slli a2,a0,48 ; srai a4,a2,48 -; sub a0,zero,a4 -; select a0,a4,a0##condition=(a4 sgt a0) +; sub a1,zero,a4 +; select a0,a4,a1##condition=(a4 sgt a1) ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; slli a2, a0, 0x30 ; srai a4, a2, 0x30 -; neg a0, a4 -; bge a0, a4, 8 +; neg a1, a4 ; mv a0, a4 +; blt a1, a4, 8 +; mv a0, a1 ; ret function %iabs_i32(i32) -> i32 { @@ -64,9 +66,8 @@ block0(v0: i32): ; block0: ; offset 0x0 ; sext.w a2, a0 ; neg a4, a2 -; bge a4, a2, 0xc ; mv a0, a2 -; j 8 +; blt a4, a2, 8 ; mv a0, a4 ; ret @@ -79,13 +80,16 @@ block0(v0: i64): ; VCode: ; block0: ; sub a2,zero,a0 -; select a0,a0,a2##condition=(a0 sgt a2) +; mv a5,a0 +; select a0,a5,a2##condition=(a5 sgt a2) ; ret ; ; Disassembled: ; block0: ; offset 0x0 ; neg a2, a0 -; blt a2, a0, 8 +; mv a5, a0 +; mv a0, a5 +; blt a2, a5, 8 ; mv a0, a2 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/ishl-const.clif b/cranelift/filetests/filetests/isa/riscv64/ishl-const.clif index c8e24c06c6b4..93aa3054b8ca 100644 --- a/cranelift/filetests/filetests/isa/riscv64/ishl-const.clif +++ b/cranelift/filetests/filetests/isa/riscv64/ishl-const.clif @@ -378,18 +378,16 @@ block0(v0: i128): ; sub a2, a2, a5 ; sll a4, a0, a5 ; srl a0, a0, a2 -; beqz a5, 0xc ; mv a2, a0 -; j 8 +; bnez a5, 8 ; mv a2, zero ; sll a5, a1, a5 ; or a5, a2, a5 ; addi a2, zero, 0x40 ; andi a3, a3, 0x7f -; bltu a3, a2, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a3, a2, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -425,18 +423,16 @@ block0(v0: i128): ; sub a2, a2, a5 ; sll a4, a0, a5 ; srl a0, a0, a2 -; beqz a5, 0xc ; mv a2, a0 -; j 8 +; bnez a5, 8 ; mv a2, zero ; sll a5, a1, a5 ; or a5, a2, a5 ; addi a2, zero, 0x40 ; andi a3, a3, 0x7f -; bltu a3, a2, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a3, a2, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -472,18 +468,16 @@ block0(v0: i128): ; sub a2, a2, a5 ; sll a4, a0, a5 ; srl a0, a0, a2 -; beqz a5, 0xc ; mv a2, a0 -; j 8 +; bnez a5, 8 ; mv a2, zero ; sll a5, a1, a5 ; or a5, a2, a5 ; addi a2, zero, 0x40 ; andi a3, a3, 0x7f -; bltu a3, a2, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a3, a2, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -519,18 +513,16 @@ block0(v0: i128): ; sub a2, a2, a5 ; sll a4, a0, a5 ; srl a0, a0, a2 -; beqz a5, 0xc ; mv a2, a0 -; j 8 +; bnez a5, 8 ; mv a2, zero ; sll a5, a1, a5 ; or a5, a2, a5 ; addi a2, zero, 0x40 ; andi a3, a3, 0x7f -; bltu a3, a2, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a3, a2, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -551,8 +543,8 @@ block0(v0: i128): ; li a3,64 ; sub a3,a3,a2 ; sll a5,a0,a2 -; srl a3,a0,a3 -; select a3,a3,zero##condition=(a2 ne zero) +; srl a0,a0,a3 +; select a3,a0,zero##condition=(a2 ne zero) ; sll a0,a1,a2 ; or a2,a3,a0 ; li a3,64 @@ -568,17 +560,17 @@ block0(v0: i128): ; addi a3, zero, 0x40 ; sub a3, a3, a2 ; sll a5, a0, a2 -; srl a3, a0, a3 +; srl a0, a0, a3 +; mv a3, a0 ; bnez a2, 8 ; mv a3, zero ; sll a0, a1, a2 ; or a2, a3, a0 ; addi a3, zero, 0x40 ; andi a4, a4, 0x7f -; bltu a4, a3, 0x10 ; mv a0, zero ; mv a1, a5 -; j 0xc +; bgeu a4, a3, 0xc ; mv a0, a5 ; mv a1, a2 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/ishl.clif b/cranelift/filetests/filetests/isa/riscv64/ishl.clif index 1e185b894dff..ac7c9b296890 100644 --- a/cranelift/filetests/filetests/isa/riscv64/ishl.clif +++ b/cranelift/filetests/filetests/isa/riscv64/ishl.clif @@ -371,18 +371,16 @@ block0(v0: i128, v1: i8): ; sub a3, a3, a5 ; sll a4, a0, a5 ; srl a0, a0, a3 -; beqz a5, 0xc ; mv a3, a0 -; j 8 +; bnez a5, 8 ; mv a3, zero ; sll a5, a1, a5 ; or a5, a3, a5 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -415,18 +413,16 @@ block0(v0: i128, v1: i16): ; sub a3, a3, a5 ; sll a4, a0, a5 ; srl a0, a0, a3 -; beqz a5, 0xc ; mv a3, a0 -; j 8 +; bnez a5, 8 ; mv a3, zero ; sll a5, a1, a5 ; or a5, a3, a5 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -459,18 +455,16 @@ block0(v0: i128, v1: i32): ; sub a3, a3, a5 ; sll a4, a0, a5 ; srl a0, a0, a3 -; beqz a5, 0xc ; mv a3, a0 -; j 8 +; bnez a5, 8 ; mv a3, zero ; sll a5, a1, a5 ; or a5, a3, a5 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -503,18 +497,16 @@ block0(v0: i128, v1: i64): ; sub a3, a3, a5 ; sll a4, a0, a5 ; srl a0, a0, a3 -; beqz a5, 0xc ; mv a3, a0 -; j 8 +; bnez a5, 8 ; mv a3, zero ; sll a5, a1, a5 ; or a5, a3, a5 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a4 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a4 ; mv a1, a5 ; ret @@ -533,8 +525,8 @@ block0(v0: i128, v1: i128): ; sub a3,a3,a0 ; mv a4,a5 ; sll a5,a4,a0 -; srl a3,a4,a3 -; select a3,a3,zero##condition=(a0 ne zero) +; srl a4,a4,a3 +; select a3,a4,zero##condition=(a0 ne zero) ; sll a0,a1,a0 ; or a4,a3,a0 ; li a3,64 @@ -550,17 +542,17 @@ block0(v0: i128, v1: i128): ; sub a3, a3, a0 ; mv a4, a5 ; sll a5, a4, a0 -; srl a3, a4, a3 +; srl a4, a4, a3 +; mv a3, a4 ; bnez a0, 8 ; mv a3, zero ; sll a0, a1, a0 ; or a4, a3, a0 ; addi a3, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a3, 0x10 ; mv a0, zero ; mv a1, a5 -; j 0xc +; bgeu a2, a3, 0xc ; mv a0, a5 ; mv a1, a4 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/issue-6954.clif b/cranelift/filetests/filetests/isa/riscv64/issue-6954.clif index 8984e97079c8..b7a5d648ed3d 100644 --- a/cranelift/filetests/filetests/isa/riscv64/issue-6954.clif +++ b/cranelift/filetests/filetests/isa/riscv64/issue-6954.clif @@ -186,9 +186,9 @@ block0(v0: i16, v1: f32, v2: f64x2, v3: i32, v4: i8, v5: i64x2, v6: i8, v7: f32x ; sext.w a4,a1 ; select v14,v15,v15##condition=(a4 ne zero) ; sext.w a4,a1 -; select v14,v14,v14##condition=(a4 ne zero) +; select v8,v14,v14##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v14,v14##condition=(a4 ne zero) +; select v15,v8,v8##condition=(a4 ne zero) ; vfsqrt.v v14,v10 #avl=2, #vtype=(e64, m1, ta, ma) ; lui a3,4095 ; slli a0,a3,39 @@ -204,29 +204,29 @@ block0(v0: i16, v1: f32, v2: f64x2, v3: i32, v4: i8, v5: i64x2, v6: i8, v7: f32x ; vmfne.vv v0,v8,v8 #avl=2, #vtype=(e64, m1, ta, ma) ; vmerge.vvm v14,v8,v9,v0.t #avl=2, #vtype=(e64, m1, ta, ma) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v8,v15,v15##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v15,v8,v8##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v8,v15,v15##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v15,v8,v8##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v8,v15,v15##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v15,v8,v8##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v8,v15,v15##condition=(a4 ne zero) ; sext.w a4,a1 -; select v15,v15,v15##condition=(a4 ne zero) +; select v15,v8,v8##condition=(a4 ne zero) ; addw a0,a1,a1 -; select v15,v15,v15##condition=(a0 ne zero) -; select v15,v15,v15##condition=(a0 ne zero) -; select v15,v15,v15##condition=(a0 ne zero) -; select v15,v15,v15##condition=(a0 ne zero) -; select v15,v15,v15##condition=(a0 ne zero) +; select v8,v15,v15##condition=(a0 ne zero) +; select v15,v8,v8##condition=(a0 ne zero) +; select v8,v15,v15##condition=(a0 ne zero) +; select v15,v8,v8##condition=(a0 ne zero) +; select v8,v15,v15##condition=(a0 ne zero) ; vmax.vv v13,v13,v13 #avl=2, #vtype=(e64, m1, ta, ma) -; select v15,v15,v15##condition=(a0 ne zero) +; select v15,v8,v8##condition=(a0 ne zero) ; load_addr a1,3(slot) ; addi a1,a1,0 ; andi a3,a1,3 @@ -235,39 +235,39 @@ block0(v0: i16, v1: f32, v2: f64x2, v3: i32, v4: i8, v5: i64x2, v6: i8, v7: f32x ; atomic_rmw.i8 and a4,a5,(a1)##t0=a3 offset=a2 ; mv a1,a4 ; select v12,v15,v15##condition=(a0 ne zero) -; select v12,v12,v12##condition=(a0 ne zero) -; select v12,v12,v12##condition=(a0 ne zero) -; select v12,v12,v12##condition=(a0 ne zero) -; select v12,v12,v12##condition=(a0 ne zero) -; select v12,v12,v12##condition=(a0 ne zero) -; select v12,v12,v12##condition=(a0 ne zero) +; select v15,v12,v12##condition=(a0 ne zero) +; select v12,v15,v15##condition=(a0 ne zero) +; select v15,v12,v12##condition=(a0 ne zero) +; select v12,v15,v15##condition=(a0 ne zero) +; select v15,v12,v12##condition=(a0 ne zero) +; select v12,v15,v15##condition=(a0 ne zero) ; vse64.v v13,33(slot) #avl=2, #vtype=(e64, m1, ta, ma) ; select v13,v12,v12##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) -; select v13,v13,v13##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v13,v15,v15##condition=(a0 ne zero) +; select v15,v13,v13##condition=(a0 ne zero) +; select v8,v15,v15##condition=(a0 ne zero) +; select v13,v8,v8##condition=(a0 ne zero) ; vse8.v v14,0(a6) #avl=16, #vtype=(e8, m1, ta, ma) ; vse8.v v13,16(a6) #avl=16, #vtype=(e8, m1, ta, ma) ; vse8.v v14,32(a6) #avl=16, #vtype=(e8, m1, ta, ma) @@ -353,16 +353,17 @@ block0(v0: i16, v1: f32, v2: f64x2, v3: i32, v4: i8, v5: i64x2, v6: i8, v7: f32x ; sw a3, 0x178(sp) ; sh a2, 0x17c(sp) ; sext.w a4, a1 -; beqz a4, 0xc ; .byte 0x57, 0x37, 0xf0, 0x9e -; j 8 +; bnez a4, 8 ; .byte 0x57, 0x37, 0xf0, 0x9e ; sext.w a4, a1 +; .byte 0x57, 0x34, 0xe0, 0x9e +; bnez a4, 8 +; .byte 0x57, 0x34, 0xe0, 0x9e ; sext.w a4, a1 -; beqz a4, 0xc -; .byte 0xd7, 0x37, 0xe0, 0x9e -; j 8 -; .byte 0xd7, 0x37, 0xe0, 0x9e +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a4, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e ; .byte 0x57, 0x70, 0x81, 0xcd ; .byte 0x57, 0x17, 0xa0, 0x4e ; lui a3, 0xfff @@ -379,15 +380,57 @@ block0(v0: i16, v1: f32, v2: f64x2, v3: i32, v4: i8, v5: i64x2, v6: i8, v7: f32x ; .byte 0x57, 0x10, 0x84, 0x72 ; .byte 0x57, 0x87, 0x84, 0x5c ; sext.w a4, a1 +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a4, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e ; sext.w a4, a1 +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a4, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e ; sext.w a4, a1 +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a4, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e ; sext.w a4, a1 +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a4, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e ; sext.w a4, a1 +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a4, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e ; sext.w a4, a1 +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a4, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e ; sext.w a4, a1 +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a4, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e ; sext.w a4, a1 +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a4, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e ; addw a0, a1, a1 +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e ; .byte 0xd7, 0x86, 0xd6, 0x1e +; .byte 0xd7, 0x37, 0x80, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0x80, 0x9e ; addi a1, sp, 3 ; mv a1, a1 ; andi a3, a1, 3 @@ -408,16 +451,107 @@ block0(v0: i16, v1: f32, v2: f64x2, v3: i32, v4: i8, v5: i64x2, v6: i8, v7: f32x ; sc.w.aqrl a3, t5, (a1) ; trap: heap_oob ; bnez a3, -0x34 ; mv a1, a4 -; beqz a0, 0xc ; .byte 0x57, 0x36, 0xf0, 0x9e -; j 8 +; bnez a0, 8 +; .byte 0x57, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xc0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xc0, 0x9e +; .byte 0x57, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0x57, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xc0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xc0, 0x9e +; .byte 0x57, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0x57, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xc0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xc0, 0x9e +; .byte 0x57, 0x36, 0xf0, 0x9e +; bnez a0, 8 ; .byte 0x57, 0x36, 0xf0, 0x9e ; addi t6, sp, 0x21 ; .byte 0xa7, 0xf6, 0x0f, 0x02 -; beqz a0, 0xc ; .byte 0xd7, 0x36, 0xc0, 0x9e -; j 8 +; bnez a0, 8 ; .byte 0xd7, 0x36, 0xc0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0xd7, 0x36, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0xf0, 0x9e +; .byte 0xd7, 0x37, 0xd0, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x37, 0xd0, 0x9e +; .byte 0x57, 0x34, 0xf0, 0x9e +; bnez a0, 8 +; .byte 0x57, 0x34, 0xf0, 0x9e +; .byte 0xd7, 0x36, 0x80, 0x9e +; bnez a0, 8 +; .byte 0xd7, 0x36, 0x80, 0x9e ; .byte 0x57, 0x70, 0x08, 0xcc ; .byte 0x27, 0x07, 0x08, 0x02 ; addi t6, a6, 0x10 diff --git a/cranelift/filetests/filetests/isa/riscv64/nan-canonicalization.clif b/cranelift/filetests/filetests/isa/riscv64/nan-canonicalization.clif index 8f74386aff39..2aaf0b117fcd 100644 --- a/cranelift/filetests/filetests/isa/riscv64/nan-canonicalization.clif +++ b/cranelift/filetests/filetests/isa/riscv64/nan-canonicalization.clif @@ -13,11 +13,11 @@ block0(v0: f64, v1: f64): ; fadd.d fa4,fa0,fa1,rne ; lui a2,4095 ; slli a4,a2,39 -; fmv.d.x fa0,a4 +; fmv.d.x fa1,a4 ; feq.d a1,fa4,fa4 ; feq.d a3,fa4,fa4 ; and a5,a1,a3 -; select fa0,fa0,fa4##condition=(a5 eq zero) +; select fa0,fa1,fa4##condition=(a5 eq zero) ; ret ; ; Disassembled: @@ -25,10 +25,11 @@ block0(v0: f64, v1: f64): ; fadd.d fa4, fa0, fa1, rne ; lui a2, 0xfff ; slli a4, a2, 0x27 -; fmv.d.x fa0, a4 +; fmv.d.x fa1, a4 ; feq.d a1, fa4, fa4 ; feq.d a3, fa4, fa4 ; and a5, a1, a3 +; fmv.d fa0, fa1 ; beqz a5, 8 ; fmv.d fa0, fa4 ; ret @@ -58,9 +59,8 @@ block0(v0: f32, v1: f32): ; feq.s a0, fa3, fa3 ; feq.s a2, fa3, fa3 ; and a4, a0, a2 -; bnez a4, 0xc ; fmv.d fa0, fa4 -; j 8 +; beqz a4, 8 ; fmv.d fa0, fa3 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/nearest.clif b/cranelift/filetests/filetests/isa/riscv64/nearest.clif index 166248c1c93a..a78f09989af1 100644 --- a/cranelift/filetests/filetests/isa/riscv64/nearest.clif +++ b/cranelift/filetests/filetests/isa/riscv64/nearest.clif @@ -18,8 +18,8 @@ block0(v0: f32): ; fcvt.s.w fa1,a4,rne ; fsgnj.s fa2,fa1,fa0 ; fmv.w.x fa4,zero -; fadd.s fa0,fa0,fa4,rne -; select fa0,fa0,fa2##condition=(a2 eq zero) +; fadd.s fa1,fa0,fa4,rne +; select fa0,fa1,fa2##condition=(a2 eq zero) ; ret ; ; Disassembled: @@ -32,7 +32,8 @@ block0(v0: f32): ; fcvt.s.w fa1, a4, rne ; fsgnj.s fa2, fa1, fa0 ; fmv.w.x fa4, zero -; fadd.s fa0, fa0, fa4, rne +; fadd.s fa1, fa0, fa4, rne +; fmv.d fa0, fa1 ; beqz a2, 8 ; fmv.d fa0, fa2 ; ret @@ -70,9 +71,8 @@ block0(v0: f64): ; fsgnj.d fa4, fa2, fa0 ; fmv.d.x fa1, zero ; fadd.d fa2, fa0, fa1, rne -; bnez a4, 0xc ; fmv.d fa0, fa2 -; j 8 +; beqz a4, 8 ; fmv.d fa0, fa4 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/rotl.clif b/cranelift/filetests/filetests/isa/riscv64/rotl.clif index 69bd54300d5b..a74034f5e42e 100644 --- a/cranelift/filetests/filetests/isa/riscv64/rotl.clif +++ b/cranelift/filetests/filetests/isa/riscv64/rotl.clif @@ -26,8 +26,8 @@ block0(v0: i128, v1: i128): ; or a3,a3,s9 ; sll a1,a1,a5 ; srl a4,a0,a4 -; select a5,a4,zero##condition=(a5 ne zero) -; or a5,a1,a5 +; select a0,a4,zero##condition=(a5 ne zero) +; or a5,a1,a0 ; li a4,64 ; andi a2,a2,127 ; select [a0,a1],[a5,a3],[a3,a5]##condition=(a2 uge a4) @@ -54,24 +54,21 @@ block0(v0: i128, v1: i128): ; sub a4, a3, a5 ; sll a3, a0, a5 ; srl s7, a1, a4 -; beqz a5, 0xc ; mv s9, s7 -; j 8 +; bnez a5, 8 ; mv s9, zero ; or a3, a3, s9 ; sll a1, a1, a5 ; srl a4, a0, a4 -; beqz a5, 0xc -; mv a5, a4 -; j 8 -; mv a5, zero -; or a5, a1, a5 +; mv a0, a4 +; bnez a5, 8 +; mv a0, zero +; or a5, a1, a0 ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a5 ; mv a1, a3 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a3 ; mv a1, a5 ; ld s7, 8(sp) @@ -106,9 +103,8 @@ block0(v0: i64, v1: i64): ; sub a1, a5, a3 ; sll a4, a0, a3 ; srl a5, a0, a1 -; beqz a3, 0xc ; mv a1, a5 -; j 8 +; bnez a3, 8 ; mv a1, zero ; or a0, a4, a1 ; ret @@ -141,9 +137,8 @@ block0(v0: i32, v1: i32): ; sub a0, a3, a1 ; sll a2, a5, a1 ; srl a3, a5, a0 -; beqz a1, 0xc ; mv a5, a3 -; j 8 +; bnez a1, 8 ; mv a5, zero ; or a0, a2, a5 ; ret @@ -176,9 +171,8 @@ block0(v0: i16, v1: i16): ; sub a0, a3, a1 ; sll a2, a5, a1 ; srl a3, a5, a0 -; beqz a1, 0xc ; mv a5, a3 -; j 8 +; bnez a1, 8 ; mv a5, zero ; or a0, a2, a5 ; ret @@ -209,9 +203,8 @@ block0(v0: i8, v1: i8): ; sub a4, a1, a5 ; sll a0, a3, a5 ; srl a1, a3, a4 -; beqz a5, 0xc ; mv a3, a1 -; j 8 +; bnez a5, 8 ; mv a3, zero ; or a0, a0, a3 ; ret @@ -243,9 +236,8 @@ block0(v0: i64): ; sub a1, a5, a3 ; sll a4, a0, a3 ; srl a5, a0, a1 -; beqz a3, 0xc ; mv a1, a5 -; j 8 +; bnez a3, 8 ; mv a1, zero ; or a0, a4, a1 ; ret @@ -281,9 +273,8 @@ block0(v0: i32): ; sub a0, a3, a1 ; sll a2, a5, a1 ; srl a3, a5, a0 -; beqz a1, 0xc ; mv a5, a3 -; j 8 +; bnez a1, 8 ; mv a5, zero ; or a0, a2, a5 ; ret @@ -319,9 +310,8 @@ block0(v0: i16): ; sub a0, a3, a1 ; sll a2, a5, a1 ; srl a3, a5, a0 -; beqz a1, 0xc ; mv a5, a3 -; j 8 +; bnez a1, 8 ; mv a5, zero ; or a0, a2, a5 ; ret @@ -355,9 +345,8 @@ block0(v0: i8): ; sub a4, a1, a5 ; sll a0, a3, a5 ; srl a1, a3, a4 -; beqz a5, 0xc ; mv a3, a1 -; j 8 +; bnez a5, 8 ; mv a3, zero ; or a0, a0, a3 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/rotr.clif b/cranelift/filetests/filetests/isa/riscv64/rotr.clif index f824ee4ac05d..14e968b9bb8a 100644 --- a/cranelift/filetests/filetests/isa/riscv64/rotr.clif +++ b/cranelift/filetests/filetests/isa/riscv64/rotr.clif @@ -26,8 +26,8 @@ block0(v0: i128, v1: i128): ; or a3,a3,s9 ; srl a1,a1,a5 ; sll a4,a0,a4 -; select a5,a4,zero##condition=(a5 ne zero) -; or a5,a1,a5 +; select a0,a4,zero##condition=(a5 ne zero) +; or a5,a1,a0 ; li a4,64 ; andi a2,a2,127 ; select [a0,a1],[a5,a3],[a3,a5]##condition=(a2 uge a4) @@ -54,24 +54,21 @@ block0(v0: i128, v1: i128): ; sub a4, a3, a5 ; srl a3, a0, a5 ; sll s7, a1, a4 -; beqz a5, 0xc ; mv s9, s7 -; j 8 +; bnez a5, 8 ; mv s9, zero ; or a3, a3, s9 ; srl a1, a1, a5 ; sll a4, a0, a4 -; beqz a5, 0xc -; mv a5, a4 -; j 8 -; mv a5, zero -; or a5, a1, a5 +; mv a0, a4 +; bnez a5, 8 +; mv a0, zero +; or a5, a1, a0 ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a5 ; mv a1, a3 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a3 ; mv a1, a5 ; ld s7, 8(sp) @@ -106,9 +103,8 @@ block0(v0: i64, v1: i64): ; sub a1, a5, a3 ; srl a4, a0, a3 ; sll a5, a0, a1 -; beqz a3, 0xc ; mv a1, a5 -; j 8 +; bnez a3, 8 ; mv a1, zero ; or a0, a4, a1 ; ret @@ -141,9 +137,8 @@ block0(v0: i32, v1: i32): ; sub a0, a3, a1 ; srl a2, a5, a1 ; sll a3, a5, a0 -; beqz a1, 0xc ; mv a5, a3 -; j 8 +; bnez a1, 8 ; mv a5, zero ; or a0, a2, a5 ; ret @@ -176,9 +171,8 @@ block0(v0: i16, v1: i16): ; sub a0, a3, a1 ; srl a2, a5, a1 ; sll a3, a5, a0 -; beqz a1, 0xc ; mv a5, a3 -; j 8 +; bnez a1, 8 ; mv a5, zero ; or a0, a2, a5 ; ret @@ -209,9 +203,8 @@ block0(v0: i8, v1: i8): ; sub a4, a1, a5 ; srl a0, a3, a5 ; sll a1, a3, a4 -; beqz a5, 0xc ; mv a3, a1 -; j 8 +; bnez a5, 8 ; mv a3, zero ; or a0, a0, a3 ; ret @@ -243,9 +236,8 @@ block0(v0: i64): ; sub a1, a5, a3 ; srl a4, a0, a3 ; sll a5, a0, a1 -; beqz a3, 0xc ; mv a1, a5 -; j 8 +; bnez a3, 8 ; mv a1, zero ; or a0, a4, a1 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/select-float.clif b/cranelift/filetests/filetests/isa/riscv64/select-float.clif index 684fd934fc46..ad9ad7666656 100644 --- a/cranelift/filetests/filetests/isa/riscv64/select-float.clif +++ b/cranelift/filetests/filetests/isa/riscv64/select-float.clif @@ -13,17 +13,20 @@ block0(v0: i8, v1: f32, v2: f32): ; VCode: ; block0: +; fmv.d fa5,fa0 ; li a1,42 ; andi a5,a0,255 ; andi a1,a1,255 -; select fa0,fa0,fa1##condition=(a5 eq a1) +; select fa0,fa5,fa1##condition=(a5 eq a1) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa5, fa0 ; addi a1, zero, 0x2a ; andi a5, a0, 0xff ; andi a1, a1, 0xff +; fmv.d fa0, fa5 ; beq a5, a1, 8 ; fmv.d fa0, fa1 ; ret @@ -38,17 +41,20 @@ block0(v0: i8, v1: f64, v2: f64): ; VCode: ; block0: +; fmv.d fa5,fa0 ; li a1,42 ; andi a5,a0,255 ; andi a1,a1,255 -; select fa0,fa0,fa1##condition=(a5 eq a1) +; select fa0,fa5,fa1##condition=(a5 eq a1) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa5, fa0 ; addi a1, zero, 0x2a ; andi a5, a0, 0xff ; andi a1, a1, 0xff +; fmv.d fa0, fa5 ; beq a5, a1, 8 ; fmv.d fa0, fa1 ; ret @@ -63,21 +69,24 @@ block0(v0: i16, v1: f32, v2: f32): ; VCode: ; block0: +; fmv.d fa3,fa0 ; li a3,42 ; slli a5,a0,48 ; srai a1,a5,48 ; slli a3,a3,48 ; srai a5,a3,48 -; select fa0,fa0,fa1##condition=(a1 eq a5) +; select fa0,fa3,fa1##condition=(a1 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa3, fa0 ; addi a3, zero, 0x2a ; slli a5, a0, 0x30 ; srai a1, a5, 0x30 ; slli a3, a3, 0x30 ; srai a5, a3, 0x30 +; fmv.d fa0, fa3 ; beq a1, a5, 8 ; fmv.d fa0, fa1 ; ret @@ -92,21 +101,24 @@ block0(v0: i16, v1: f64, v2: f64): ; VCode: ; block0: +; fmv.d fa3,fa0 ; li a3,42 ; slli a5,a0,48 ; srai a1,a5,48 ; slli a3,a3,48 ; srai a5,a3,48 -; select fa0,fa0,fa1##condition=(a1 eq a5) +; select fa0,fa3,fa1##condition=(a1 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa3, fa0 ; addi a3, zero, 0x2a ; slli a5, a0, 0x30 ; srai a1, a5, 0x30 ; slli a3, a3, 0x30 ; srai a5, a3, 0x30 +; fmv.d fa0, fa3 ; beq a1, a5, 8 ; fmv.d fa0, fa1 ; ret @@ -121,17 +133,20 @@ block0(v0: i32, v1: f32, v2: f32): ; VCode: ; block0: +; fmv.d fa5,fa0 ; li a1,42 ; sext.w a5,a0 ; sext.w a1,a1 -; select fa0,fa0,fa1##condition=(a5 eq a1) +; select fa0,fa5,fa1##condition=(a5 eq a1) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa5, fa0 ; addi a1, zero, 0x2a ; sext.w a5, a0 ; sext.w a1, a1 +; fmv.d fa0, fa5 ; beq a5, a1, 8 ; fmv.d fa0, fa1 ; ret @@ -146,17 +161,20 @@ block0(v0: i32, v1: f64, v2: f64): ; VCode: ; block0: +; fmv.d fa5,fa0 ; li a1,42 ; sext.w a5,a0 ; sext.w a1,a1 -; select fa0,fa0,fa1##condition=(a5 eq a1) +; select fa0,fa5,fa1##condition=(a5 eq a1) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa5, fa0 ; addi a1, zero, 0x2a ; sext.w a5, a0 ; sext.w a1, a1 +; fmv.d fa0, fa5 ; beq a5, a1, 8 ; fmv.d fa0, fa1 ; ret @@ -171,13 +189,16 @@ block0(v0: i64, v1: f32, v2: f32): ; VCode: ; block0: +; fmv.d fa2,fa0 ; li a5,42 -; select fa0,fa0,fa1##condition=(a0 eq a5) +; select fa0,fa2,fa1##condition=(a0 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa2, fa0 ; addi a5, zero, 0x2a +; fmv.d fa0, fa2 ; beq a0, a5, 8 ; fmv.d fa0, fa1 ; ret @@ -192,13 +213,16 @@ block0(v0: i64, v1: f64, v2: f64): ; VCode: ; block0: +; fmv.d fa2,fa0 ; li a5,42 -; select fa0,fa0,fa1##condition=(a0 eq a5) +; select fa0,fa2,fa1##condition=(a0 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa2, fa0 ; addi a5, zero, 0x2a +; fmv.d fa0, fa2 ; beq a0, a5, 8 ; fmv.d fa0, fa1 ; ret @@ -214,23 +238,26 @@ block0(v0: i128, v1: f32, v2: f32): ; VCode: ; block0: +; fmv.d fa2,fa0 ; li a5,42 ; li a2,0 ; xor a3,a0,a5 ; xor a4,a1,a2 ; or a0,a3,a4 ; seqz a2,a0 -; select fa0,fa0,fa1##condition=(a2 ne zero) +; select fa0,fa2,fa1##condition=(a2 ne zero) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa2, fa0 ; addi a5, zero, 0x2a ; mv a2, zero ; xor a3, a0, a5 ; xor a4, a1, a2 ; or a0, a3, a4 ; seqz a2, a0 +; fmv.d fa0, fa2 ; bnez a2, 8 ; fmv.d fa0, fa1 ; ret @@ -246,23 +273,26 @@ block0(v0: i128, v1: f64, v2: f64): ; VCode: ; block0: +; fmv.d fa2,fa0 ; li a5,42 ; li a2,0 ; xor a3,a0,a5 ; xor a4,a1,a2 ; or a0,a3,a4 ; seqz a2,a0 -; select fa0,fa0,fa1##condition=(a2 ne zero) +; select fa0,fa2,fa1##condition=(a2 ne zero) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; fmv.d fa2, fa0 ; addi a5, zero, 0x2a ; mv a2, zero ; xor a3, a0, a5 ; xor a4, a1, a2 ; or a0, a3, a4 ; seqz a2, a0 +; fmv.d fa0, fa2 ; bnez a2, 8 ; fmv.d fa0, fa1 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/select.clif b/cranelift/filetests/filetests/isa/riscv64/select.clif index 51d86299ab62..04490ef1dbec 100644 --- a/cranelift/filetests/filetests/isa/riscv64/select.clif +++ b/cranelift/filetests/filetests/isa/riscv64/select.clif @@ -23,9 +23,8 @@ block0(v0: i8, v1: i8, v2: i8): ; addi a3, zero, 0x2a ; andi a5, a0, 0xff ; andi a3, a3, 0xff -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -50,9 +49,8 @@ block0(v0: i8, v1: i16, v2: i16): ; addi a3, zero, 0x2a ; andi a5, a0, 0xff ; andi a3, a3, 0xff -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -77,9 +75,8 @@ block0(v0: i8, v1: i32, v2: i32): ; addi a3, zero, 0x2a ; andi a5, a0, 0xff ; andi a3, a3, 0xff -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -104,9 +101,8 @@ block0(v0: i8, v1: i64, v2: i64): ; addi a3, zero, 0x2a ; andi a5, a0, 0xff ; andi a3, a3, 0xff -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -154,10 +150,9 @@ block0(v0: i8, v1: i128, v2: i128): ; addi a5, zero, 0x2a ; andi s1, a0, 0xff ; andi a5, a5, 0xff -; bne s1, a5, 0x10 ; mv a0, s8 ; mv a1, a2 -; j 0xc +; beq s1, a5, 0xc ; mv a0, a3 ; mv a1, a4 ; ld s1, 8(sp) @@ -193,9 +188,8 @@ block0(v0: i16, v1: i8, v2: i8): ; srai a4, a5, 0x30 ; slli a3, a3, 0x30 ; srai a5, a3, 0x30 -; bne a4, a5, 0xc ; mv a0, a1 -; j 8 +; beq a4, a5, 8 ; mv a0, a2 ; ret @@ -224,9 +218,8 @@ block0(v0: i16, v1: i16, v2: i16): ; srai a4, a5, 0x30 ; slli a3, a3, 0x30 ; srai a5, a3, 0x30 -; bne a4, a5, 0xc ; mv a0, a1 -; j 8 +; beq a4, a5, 8 ; mv a0, a2 ; ret @@ -255,9 +248,8 @@ block0(v0: i16, v1: i32, v2: i32): ; srai a4, a5, 0x30 ; slli a3, a3, 0x30 ; srai a5, a3, 0x30 -; bne a4, a5, 0xc ; mv a0, a1 -; j 8 +; beq a4, a5, 8 ; mv a0, a2 ; ret @@ -286,9 +278,8 @@ block0(v0: i16, v1: i64, v2: i64): ; srai a4, a5, 0x30 ; slli a3, a3, 0x30 ; srai a5, a3, 0x30 -; bne a4, a5, 0xc ; mv a0, a1 -; j 8 +; beq a4, a5, 8 ; mv a0, a2 ; ret @@ -340,10 +331,9 @@ block0(v0: i16, v1: i128, v2: i128): ; srai a5, a1, 0x30 ; slli a0, s6, 0x30 ; srai s7, a0, 0x30 -; bne a5, s7, 0x10 ; mv a0, t0 ; mv a1, a2 -; j 0xc +; beq a5, s7, 0xc ; mv a0, a3 ; mv a1, a4 ; ld s6, 8(sp) @@ -375,9 +365,8 @@ block0(v0: i32, v1: i8, v2: i8): ; addi a3, zero, 0x2a ; sext.w a5, a0 ; sext.w a3, a3 -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -402,9 +391,8 @@ block0(v0: i32, v1: i16, v2: i16): ; addi a3, zero, 0x2a ; sext.w a5, a0 ; sext.w a3, a3 -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -429,9 +417,8 @@ block0(v0: i32, v1: i32, v2: i32): ; addi a3, zero, 0x2a ; sext.w a5, a0 ; sext.w a3, a3 -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -456,9 +443,8 @@ block0(v0: i32, v1: i64, v2: i64): ; addi a3, zero, 0x2a ; sext.w a5, a0 ; sext.w a3, a3 -; bne a5, a3, 0xc ; mv a0, a1 -; j 8 +; beq a5, a3, 8 ; mv a0, a2 ; ret @@ -506,10 +492,9 @@ block0(v0: i32, v1: i128, v2: i128): ; addi a5, zero, 0x2a ; sext.w s1, a0 ; sext.w a5, a5 -; bne s1, a5, 0x10 ; mv a0, s8 ; mv a1, a2 -; j 0xc +; beq s1, a5, 0xc ; mv a0, a3 ; mv a1, a4 ; ld s1, 8(sp) @@ -530,16 +515,17 @@ block0(v0: i64, v1: i8, v2: i8): ; VCode: ; block0: +; mv a3,a0 ; li a5,42 -; select a0,a1,a2##condition=(a0 eq a5) +; select a0,a1,a2##condition=(a3 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; addi a5, zero, 0x2a -; bne a0, a5, 0xc ; mv a0, a1 -; j 8 +; beq a3, a5, 8 ; mv a0, a2 ; ret @@ -553,16 +539,17 @@ block0(v0: i64, v1: i16, v2: i16): ; VCode: ; block0: +; mv a3,a0 ; li a5,42 -; select a0,a1,a2##condition=(a0 eq a5) +; select a0,a1,a2##condition=(a3 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; addi a5, zero, 0x2a -; bne a0, a5, 0xc ; mv a0, a1 -; j 8 +; beq a3, a5, 8 ; mv a0, a2 ; ret @@ -576,16 +563,17 @@ block0(v0: i64, v1: i32, v2: i32): ; VCode: ; block0: +; mv a3,a0 ; li a5,42 -; select a0,a1,a2##condition=(a0 eq a5) +; select a0,a1,a2##condition=(a3 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; addi a5, zero, 0x2a -; bne a0, a5, 0xc ; mv a0, a1 -; j 8 +; beq a3, a5, 8 ; mv a0, a2 ; ret @@ -599,16 +587,17 @@ block0(v0: i64, v1: i64, v2: i64): ; VCode: ; block0: +; mv a3,a0 ; li a5,42 -; select a0,a1,a2##condition=(a0 eq a5) +; select a0,a1,a2##condition=(a3 eq a5) ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; addi a5, zero, 0x2a -; bne a0, a5, 0xc ; mv a0, a1 -; j 8 +; beq a3, a5, 8 ; mv a0, a2 ; ret @@ -654,10 +643,9 @@ block0(v0: i64, v1: i128, v2: i128): ; mv s4, a1 ; mv s6, a0 ; addi a5, zero, 0x2a -; bne s6, a5, 0x10 ; mv a0, s4 ; mv a1, a2 -; j 0xc +; beq s6, a5, 0xc ; mv a0, a3 ; mv a1, a4 ; ld s4, 8(sp) @@ -696,9 +684,8 @@ block0(v0: i128, v1: i8, v2: i8): ; xor a4, a1, a4 ; or a0, a5, a4 ; seqz a4, a0 -; beqz a4, 0xc ; mv a0, a2 -; j 8 +; bnez a4, 8 ; mv a0, a3 ; ret @@ -730,9 +717,8 @@ block0(v0: i128, v1: i16, v2: i16): ; xor a4, a1, a4 ; or a0, a5, a4 ; seqz a4, a0 -; beqz a4, 0xc ; mv a0, a2 -; j 8 +; bnez a4, 8 ; mv a0, a3 ; ret @@ -764,9 +750,8 @@ block0(v0: i128, v1: i32, v2: i32): ; xor a4, a1, a4 ; or a0, a5, a4 ; seqz a4, a0 -; beqz a4, 0xc ; mv a0, a2 -; j 8 +; bnez a4, 8 ; mv a0, a3 ; ret @@ -798,9 +783,8 @@ block0(v0: i128, v1: i64, v2: i64): ; xor a4, a1, a4 ; or a0, a5, a4 ; seqz a4, a0 -; beqz a4, 0xc ; mv a0, a2 -; j 8 +; bnez a4, 8 ; mv a0, a3 ; ret @@ -857,10 +841,9 @@ block0(v0: i128, v1: i128, v2: i128): ; xor a1, a1, s9 ; or a0, a0, a1 ; seqz a0, a0 -; beqz a0, 0x10 ; mv s7, a2 ; mv a1, a3 -; j 0xc +; bnez a0, 0xc ; mv s7, a4 ; mv a1, a5 ; mv a0, s7 diff --git a/cranelift/filetests/filetests/isa/riscv64/simd-select.clif b/cranelift/filetests/filetests/isa/riscv64/simd-select.clif index 370ac0902576..acbf77ed55d7 100644 --- a/cranelift/filetests/filetests/isa/riscv64/simd-select.clif +++ b/cranelift/filetests/filetests/isa/riscv64/simd-select.clif @@ -35,9 +35,8 @@ block0(v0: i64, v1: i64x2, v2: i64x2): ; .byte 0x07, 0x85, 0x0f, 0x02 ; addi t6, sp, 0x20 ; .byte 0x07, 0x86, 0x0f, 0x02 -; beqz a0, 0xc ; .byte 0xd7, 0x37, 0xa0, 0x9e -; j 8 +; bnez a0, 8 ; .byte 0xd7, 0x37, 0xc0, 0x9e ; .byte 0xa7, 0x87, 0x05, 0x02 ; ld ra, 8(sp) @@ -80,9 +79,8 @@ block0(v0: i32, v1: i32x4, v2: i32x4): ; addi t6, sp, 0x20 ; .byte 0x07, 0x86, 0x0f, 0x02 ; sext.w a2, a0 -; beqz a2, 0xc ; .byte 0xd7, 0x34, 0xa0, 0x9e -; j 8 +; bnez a2, 8 ; .byte 0xd7, 0x34, 0xc0, 0x9e ; .byte 0xa7, 0x84, 0x05, 0x02 ; ld ra, 8(sp) @@ -127,9 +125,8 @@ block0(v0: i16, v1: i16x8, v2: i16x8): ; .byte 0x07, 0x86, 0x0f, 0x02 ; slli a2, a0, 0x30 ; srai a3, a2, 0x30 -; beqz a3, 0xc ; .byte 0xd7, 0x35, 0xa0, 0x9e -; j 8 +; bnez a3, 8 ; .byte 0xd7, 0x35, 0xc0, 0x9e ; .byte 0xa7, 0x85, 0x05, 0x02 ; ld ra, 8(sp) @@ -172,9 +169,8 @@ block0(v0: i8, v1: i8x16, v2: i8x16): ; addi t6, sp, 0x20 ; .byte 0x07, 0x86, 0x0f, 0x02 ; andi a2, a0, 0xff -; beqz a2, 0xc ; .byte 0xd7, 0x34, 0xa0, 0x9e -; j 8 +; bnez a2, 8 ; .byte 0xd7, 0x34, 0xc0, 0x9e ; .byte 0xa7, 0x84, 0x05, 0x02 ; ld ra, 8(sp) @@ -215,9 +211,8 @@ block0(v0: i64, v1: f64x2, v2: f64x2): ; .byte 0x07, 0x85, 0x0f, 0x02 ; addi t6, sp, 0x20 ; .byte 0x07, 0x86, 0x0f, 0x02 -; beqz a0, 0xc ; .byte 0xd7, 0x37, 0xa0, 0x9e -; j 8 +; bnez a0, 8 ; .byte 0xd7, 0x37, 0xc0, 0x9e ; .byte 0xa7, 0x87, 0x05, 0x02 ; ld ra, 8(sp) @@ -258,9 +253,8 @@ block0(v0: i64, v1: f32x4, v2: f32x4): ; .byte 0x07, 0x85, 0x0f, 0x02 ; addi t6, sp, 0x20 ; .byte 0x07, 0x86, 0x0f, 0x02 -; beqz a0, 0xc ; .byte 0xd7, 0x37, 0xa0, 0x9e -; j 8 +; bnez a0, 8 ; .byte 0xd7, 0x37, 0xc0, 0x9e ; .byte 0xa7, 0x87, 0x05, 0x02 ; ld ra, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/smax-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/smax-zbb.clif index 30c5819e302b..524a7d8b7e01 100644 --- a/cranelift/filetests/filetests/isa/riscv64/smax-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/smax-zbb.clif @@ -90,19 +90,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; slt a5,a3,a1 ; sltu a4,a2,a0 ; mv s7,a0 ; xor a0,a3,a1 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -116,25 +116,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; slt a5, a3, a1 ; sltu a4, a2, a0 ; mv s7, a0 ; xor a0, a3, a1 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/smax.clif b/cranelift/filetests/filetests/isa/riscv64/smax.clif index 10377029ae03..2bb5f21d330a 100644 --- a/cranelift/filetests/filetests/isa/riscv64/smax.clif +++ b/cranelift/filetests/filetests/isa/riscv64/smax.clif @@ -23,9 +23,8 @@ block0(v0: i8, v1: i8): ; srai a5, a3, 0x38 ; slli a1, a1, 0x38 ; srai a3, a1, 0x38 -; bge a3, a5, 0xc ; mv a0, a5 -; j 8 +; blt a3, a5, 8 ; mv a0, a3 ; ret @@ -50,9 +49,8 @@ block0(v0: i16, v1: i16): ; srai a5, a3, 0x30 ; slli a1, a1, 0x30 ; srai a3, a1, 0x30 -; bge a3, a5, 0xc ; mv a0, a5 -; j 8 +; blt a3, a5, 8 ; mv a0, a3 ; ret @@ -73,9 +71,8 @@ block0(v0: i32, v1: i32): ; block0: ; offset 0x0 ; sext.w a3, a0 ; sext.w a5, a1 -; bge a5, a3, 0xc ; mv a0, a3 -; j 8 +; blt a5, a3, 8 ; mv a0, a5 ; ret @@ -87,13 +84,16 @@ block0(v0: i64, v1: i64): ; VCode: ; block0: -; select a0,a0,a1##condition=(a0 sgt a1) +; select a3,a0,a1##condition=(a0 sgt a1) +; mv a0,a3 ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; blt a1, a0, 8 -; mv a0, a1 +; mv a3, a1 +; mv a0, a3 ; ret function %smax_i128(i128, i128) -> i128{ @@ -108,19 +108,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; slt a5,a3,a1 ; sltu a4,a2,a0 ; mv s7,a0 ; xor a0,a3,a1 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -134,25 +134,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; slt a5, a3, a1 ; sltu a4, a2, a0 ; mv s7, a0 ; xor a0, a3, a1 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/smin-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/smin-zbb.clif index 9b46e12d957e..8011b5abc54f 100644 --- a/cranelift/filetests/filetests/isa/riscv64/smin-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/smin-zbb.clif @@ -90,19 +90,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; slt a5,a1,a3 ; sltu a4,a0,a2 ; mv s7,a0 ; xor a0,a1,a3 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -116,25 +116,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; slt a5, a1, a3 ; sltu a4, a0, a2 ; mv s7, a0 ; xor a0, a1, a3 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/smin.clif b/cranelift/filetests/filetests/isa/riscv64/smin.clif index 3503329ebab1..4a8a356330c2 100644 --- a/cranelift/filetests/filetests/isa/riscv64/smin.clif +++ b/cranelift/filetests/filetests/isa/riscv64/smin.clif @@ -23,9 +23,8 @@ block0(v0: i8, v1: i8): ; srai a5, a3, 0x38 ; slli a1, a1, 0x38 ; srai a3, a1, 0x38 -; bge a5, a3, 0xc ; mv a0, a5 -; j 8 +; blt a5, a3, 8 ; mv a0, a3 ; ret @@ -50,9 +49,8 @@ block0(v0: i16, v1: i16): ; srai a5, a3, 0x30 ; slli a1, a1, 0x30 ; srai a3, a1, 0x30 -; bge a5, a3, 0xc ; mv a0, a5 -; j 8 +; blt a5, a3, 8 ; mv a0, a3 ; ret @@ -73,9 +71,8 @@ block0(v0: i32, v1: i32): ; block0: ; offset 0x0 ; sext.w a3, a0 ; sext.w a5, a1 -; bge a3, a5, 0xc ; mv a0, a3 -; j 8 +; blt a3, a5, 8 ; mv a0, a5 ; ret @@ -87,13 +84,16 @@ block0(v0: i64, v1: i64): ; VCode: ; block0: -; select a0,a0,a1##condition=(a0 slt a1) +; select a3,a0,a1##condition=(a0 slt a1) +; mv a0,a3 ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; blt a0, a1, 8 -; mv a0, a1 +; mv a3, a1 +; mv a0, a3 ; ret function %smin_i128(i128, i128) -> i128{ @@ -108,19 +108,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; slt a5,a1,a3 ; sltu a4,a0,a2 ; mv s7,a0 ; xor a0,a1,a3 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -134,25 +134,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; slt a5, a1, a3 ; sltu a4, a0, a2 ; mv s7, a0 ; xor a0, a1, a3 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/sshr-const.clif b/cranelift/filetests/filetests/isa/riscv64/sshr-const.clif index 92680b1cb135..0edfde22c78e 100644 --- a/cranelift/filetests/filetests/isa/riscv64/sshr-const.clif +++ b/cranelift/filetests/filetests/isa/riscv64/sshr-const.clif @@ -420,25 +420,22 @@ block0(v0: i128): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -476,25 +473,22 @@ block0(v0: i128): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -532,25 +526,22 @@ block0(v0: i128): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -588,25 +579,22 @@ block0(v0: i128): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -632,17 +620,17 @@ block0(v0: i128): ; andi a5,a2,63 ; li a3,64 ; sub a3,a3,a5 -; sll a3,a1,a3 -; select a3,a3,zero##condition=(a5 ne zero) +; sll a4,a1,a3 +; select a3,a4,zero##condition=(a5 ne zero) ; srl a4,a0,a5 ; or s11,a3,a4 ; li a3,64 ; sra a3,a1,a5 ; li a5,-1 -; select a5,a5,zero##condition=(a1 slt zero) -; li a4,64 +; select a4,a5,zero##condition=(a1 slt zero) +; li a5,64 ; andi a2,a2,127 -; select [a0,a1],[a3,a5],[s11,a3]##condition=(a2 uge a4) +; select [a0,a1],[a3,a4],[s11,a3]##condition=(a2 uge a5) ; ld s11,8(sp) ; addi sp,sp,16 ; ld ra,8(sp) @@ -664,7 +652,8 @@ block0(v0: i128): ; andi a5, a2, 0x3f ; addi a3, zero, 0x40 ; sub a3, a3, a5 -; sll a3, a1, a3 +; sll a4, a1, a3 +; mv a3, a4 ; bnez a5, 8 ; mv a3, zero ; srl a4, a0, a5 @@ -672,14 +661,14 @@ block0(v0: i128): ; addi a3, zero, 0x40 ; sra a3, a1, a5 ; addi a5, zero, -1 +; mv a4, a5 ; bltz a1, 8 -; mv a5, zero -; addi a4, zero, 0x40 +; mv a4, zero +; addi a5, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 -; mv a1, a5 -; j 0xc +; mv a1, a4 +; bgeu a2, a5, 0xc ; mv a0, s11 ; mv a1, a3 ; ld s11, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/sshr.clif b/cranelift/filetests/filetests/isa/riscv64/sshr.clif index 9c6ed4f7f662..ebfa779d9f5b 100644 --- a/cranelift/filetests/filetests/isa/riscv64/sshr.clif +++ b/cranelift/filetests/filetests/isa/riscv64/sshr.clif @@ -413,25 +413,22 @@ block0(v0: i128, v1: i8): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -466,25 +463,22 @@ block0(v0: i128, v1: i16): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -519,25 +513,22 @@ block0(v0: i128, v1: i32): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -572,25 +563,22 @@ block0(v0: i128, v1: i64): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi a0, zero, 0x40 ; sra a3, a1, a4 ; addi a4, zero, -1 -; bgez a1, 0xc ; mv t4, a4 -; j 8 +; bltz a1, 8 ; mv t4, zero ; addi a4, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 ; mv a1, t4 -; j 0xc +; bgeu a2, a4, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -612,17 +600,17 @@ block0(v0: i128, v1: i128): ; andi a5,a2,63 ; li a3,64 ; sub a3,a3,a5 -; sll a3,a1,a3 -; select a3,a3,zero##condition=(a5 ne zero) +; sll a4,a1,a3 +; select a3,a4,zero##condition=(a5 ne zero) ; srl a4,a0,a5 ; or s11,a3,a4 ; li a3,64 ; sra a3,a1,a5 ; li a5,-1 -; select a5,a5,zero##condition=(a1 slt zero) -; li a4,64 +; select a4,a5,zero##condition=(a1 slt zero) +; li a5,64 ; andi a2,a2,127 -; select [a0,a1],[a3,a5],[s11,a3]##condition=(a2 uge a4) +; select [a0,a1],[a3,a4],[s11,a3]##condition=(a2 uge a5) ; ld s11,8(sp) ; addi sp,sp,16 ; ld ra,8(sp) @@ -642,7 +630,8 @@ block0(v0: i128, v1: i128): ; andi a5, a2, 0x3f ; addi a3, zero, 0x40 ; sub a3, a3, a5 -; sll a3, a1, a3 +; sll a4, a1, a3 +; mv a3, a4 ; bnez a5, 8 ; mv a3, zero ; srl a4, a0, a5 @@ -650,14 +639,14 @@ block0(v0: i128, v1: i128): ; addi a3, zero, 0x40 ; sra a3, a1, a5 ; addi a5, zero, -1 +; mv a4, a5 ; bltz a1, 8 -; mv a5, zero -; addi a4, zero, 0x40 +; mv a4, zero +; addi a5, zero, 0x40 ; andi a2, a2, 0x7f -; bltu a2, a4, 0x10 ; mv a0, a3 -; mv a1, a5 -; j 0xc +; mv a1, a4 +; bgeu a2, a5, 0xc ; mv a0, s11 ; mv a1, a3 ; ld s11, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/trunc.clif b/cranelift/filetests/filetests/isa/riscv64/trunc.clif index 05fe998e65ee..d7e7430ea382 100644 --- a/cranelift/filetests/filetests/isa/riscv64/trunc.clif +++ b/cranelift/filetests/filetests/isa/riscv64/trunc.clif @@ -18,8 +18,8 @@ block0(v0: f32): ; fcvt.s.w fa1,a4,rtz ; fsgnj.s fa2,fa1,fa0 ; fmv.w.x fa4,zero -; fadd.s fa0,fa0,fa4,rne -; select fa0,fa0,fa2##condition=(a2 eq zero) +; fadd.s fa1,fa0,fa4,rne +; select fa0,fa1,fa2##condition=(a2 eq zero) ; ret ; ; Disassembled: @@ -32,7 +32,8 @@ block0(v0: f32): ; fcvt.s.w fa1, a4, rtz ; fsgnj.s fa2, fa1, fa0 ; fmv.w.x fa4, zero -; fadd.s fa0, fa0, fa4, rne +; fadd.s fa1, fa0, fa4, rne +; fmv.d fa0, fa1 ; beqz a2, 8 ; fmv.d fa0, fa2 ; ret @@ -70,9 +71,8 @@ block0(v0: f64): ; fsgnj.d fa4, fa2, fa0 ; fmv.d.x fa1, zero ; fadd.d fa2, fa0, fa1, rne -; bnez a4, 0xc ; fmv.d fa0, fa2 -; j 8 +; beqz a4, 8 ; fmv.d fa0, fa4 ; ret diff --git a/cranelift/filetests/filetests/isa/riscv64/umax-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/umax-zbb.clif index 3e613e4bd186..cd4cfcf4abd4 100644 --- a/cranelift/filetests/filetests/isa/riscv64/umax-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/umax-zbb.clif @@ -94,19 +94,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; sltu a5,a3,a1 ; sltu a4,a2,a0 ; mv s7,a0 ; xor a0,a3,a1 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -120,25 +120,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; sltu a5, a3, a1 ; sltu a4, a2, a0 ; mv s7, a0 ; xor a0, a3, a1 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/umax.clif b/cranelift/filetests/filetests/isa/riscv64/umax.clif index 45a254c12650..d0763142ce55 100644 --- a/cranelift/filetests/filetests/isa/riscv64/umax.clif +++ b/cranelift/filetests/filetests/isa/riscv64/umax.clif @@ -19,9 +19,8 @@ block0(v0: i8, v1: i8): ; block0: ; offset 0x0 ; andi a3, a0, 0xff ; andi a5, a1, 0xff -; bgeu a5, a3, 0xc ; mv a0, a3 -; j 8 +; bltu a5, a3, 8 ; mv a0, a5 ; ret @@ -46,9 +45,8 @@ block0(v0: i16, v1: i16): ; srli a5, a3, 0x30 ; slli a1, a1, 0x30 ; srli a3, a1, 0x30 -; bgeu a3, a5, 0xc ; mv a0, a5 -; j 8 +; bltu a3, a5, 8 ; mv a0, a3 ; ret @@ -73,9 +71,8 @@ block0(v0: i32, v1: i32): ; srli a5, a3, 0x20 ; slli a1, a1, 0x20 ; srli a3, a1, 0x20 -; bgeu a3, a5, 0xc ; mv a0, a5 -; j 8 +; bltu a3, a5, 8 ; mv a0, a3 ; ret @@ -87,13 +84,16 @@ block0(v0: i64, v1: i64): ; VCode: ; block0: -; select a0,a0,a1##condition=(a0 ugt a1) +; select a3,a0,a1##condition=(a0 ugt a1) +; mv a0,a3 ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; bltu a1, a0, 8 -; mv a0, a1 +; mv a3, a1 +; mv a0, a3 ; ret function %umax_i128(i128, i128) -> i128{ @@ -108,19 +108,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; sltu a5,a3,a1 ; sltu a4,a2,a0 ; mv s7,a0 ; xor a0,a3,a1 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -134,25 +134,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; sltu a5, a3, a1 ; sltu a4, a2, a0 ; mv s7, a0 ; xor a0, a3, a1 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/umin-zbb.clif b/cranelift/filetests/filetests/isa/riscv64/umin-zbb.clif index e58dcd77277a..4ef02d492f77 100644 --- a/cranelift/filetests/filetests/isa/riscv64/umin-zbb.clif +++ b/cranelift/filetests/filetests/isa/riscv64/umin-zbb.clif @@ -94,19 +94,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; sltu a5,a1,a3 ; sltu a4,a0,a2 ; mv s7,a0 ; xor a0,a1,a3 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -120,25 +120,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; sltu a5, a1, a3 ; sltu a4, a0, a2 ; mv s7, a0 ; xor a0, a1, a3 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/umin.clif b/cranelift/filetests/filetests/isa/riscv64/umin.clif index a4cc67386f1d..aaaf3772f101 100644 --- a/cranelift/filetests/filetests/isa/riscv64/umin.clif +++ b/cranelift/filetests/filetests/isa/riscv64/umin.clif @@ -19,9 +19,8 @@ block0(v0: i8, v1: i8): ; block0: ; offset 0x0 ; andi a3, a0, 0xff ; andi a5, a1, 0xff -; bgeu a3, a5, 0xc ; mv a0, a3 -; j 8 +; bltu a3, a5, 8 ; mv a0, a5 ; ret @@ -46,9 +45,8 @@ block0(v0: i16, v1: i16): ; srli a5, a3, 0x30 ; slli a1, a1, 0x30 ; srli a3, a1, 0x30 -; bgeu a5, a3, 0xc ; mv a0, a5 -; j 8 +; bltu a5, a3, 8 ; mv a0, a3 ; ret @@ -73,9 +71,8 @@ block0(v0: i32, v1: i32): ; srli a5, a3, 0x20 ; slli a1, a1, 0x20 ; srli a3, a1, 0x20 -; bgeu a5, a3, 0xc ; mv a0, a5 -; j 8 +; bltu a5, a3, 8 ; mv a0, a3 ; ret @@ -87,13 +84,16 @@ block0(v0: i64, v1: i64): ; VCode: ; block0: -; select a0,a0,a1##condition=(a0 ult a1) +; select a3,a0,a1##condition=(a0 ult a1) +; mv a0,a3 ; ret ; ; Disassembled: ; block0: ; offset 0x0 +; mv a3, a0 ; bltu a0, a1, 8 -; mv a0, a1 +; mv a3, a1 +; mv a0, a3 ; ret function %umin_i128(i128, i128) -> i128{ @@ -108,19 +108,19 @@ block0(v0: i128, v1: i128): ; sd fp,0(sp) ; mv fp,sp ; addi sp,sp,-16 -; sd s7,8(sp) -; sd s9,0(sp) +; sd s5,8(sp) +; sd s7,0(sp) ; block0: ; sltu a5,a1,a3 ; sltu a4,a0,a2 ; mv s7,a0 ; xor a0,a1,a3 -; mv s9,a1 -; select a5,a4,a5##condition=(a0 eq zero) -; mv a4,s7 -; select [a0,a1],[a4,s9],[a2,a3]##condition=(a5 ne zero) -; ld s7,8(sp) -; ld s9,0(sp) +; select s5,a4,a5##condition=(a0 eq zero) +; mv a4,a1 +; mv a5,s7 +; select [a0,a1],[a5,a4],[a2,a3]##condition=(s5 ne zero) +; ld s5,8(sp) +; ld s7,0(sp) ; addi sp,sp,16 ; ld ra,8(sp) ; ld fp,0(sp) @@ -134,25 +134,25 @@ block0(v0: i128, v1: i128): ; sd s0, 0(sp) ; mv s0, sp ; addi sp, sp, -0x10 -; sd s7, 8(sp) -; sd s9, 0(sp) +; sd s5, 8(sp) +; sd s7, 0(sp) ; block1: ; offset 0x1c ; sltu a5, a1, a3 ; sltu a4, a0, a2 ; mv s7, a0 ; xor a0, a1, a3 -; mv s9, a1 -; bnez a0, 8 -; mv a5, a4 -; mv a4, s7 -; beqz a5, 0x10 -; mv a0, a4 -; mv a1, s9 -; j 0xc +; mv s5, a4 +; beqz a0, 8 +; mv s5, a5 +; mv a4, a1 +; mv a5, s7 +; mv a0, a5 +; mv a1, a4 +; bnez s5, 0xc ; mv a0, a2 ; mv a1, a3 -; ld s7, 8(sp) -; ld s9, 0(sp) +; ld s5, 8(sp) +; ld s7, 0(sp) ; addi sp, sp, 0x10 ; ld ra, 8(sp) ; ld s0, 0(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/ushr-const.clif b/cranelift/filetests/filetests/isa/riscv64/ushr-const.clif index eabd41c9f0cb..74cd1845a116 100644 --- a/cranelift/filetests/filetests/isa/riscv64/ushr-const.clif +++ b/cranelift/filetests/filetests/isa/riscv64/ushr-const.clif @@ -407,19 +407,17 @@ block0(v0: i128): ; addi a2, zero, 0x40 ; sub a2, a2, a4 ; sll a5, a1, a2 -; beqz a4, 0xc ; mv a2, a5 -; j 8 +; bnez a4, 8 ; mv a2, zero ; srl a5, a0, a4 ; or a5, a2, a5 ; addi t0, zero, 0x40 ; srl a2, a1, a4 ; andi a4, a3, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a2 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a2 ; ret @@ -454,19 +452,17 @@ block0(v0: i128): ; addi a2, zero, 0x40 ; sub a2, a2, a4 ; sll a5, a1, a2 -; beqz a4, 0xc ; mv a2, a5 -; j 8 +; bnez a4, 8 ; mv a2, zero ; srl a5, a0, a4 ; or a5, a2, a5 ; addi t0, zero, 0x40 ; srl a2, a1, a4 ; andi a4, a3, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a2 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a2 ; ret @@ -501,19 +497,17 @@ block0(v0: i128): ; addi a2, zero, 0x40 ; sub a2, a2, a4 ; sll a5, a1, a2 -; beqz a4, 0xc ; mv a2, a5 -; j 8 +; bnez a4, 8 ; mv a2, zero ; srl a5, a0, a4 ; or a5, a2, a5 ; addi t0, zero, 0x40 ; srl a2, a1, a4 ; andi a4, a3, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a2 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a2 ; ret @@ -548,19 +542,17 @@ block0(v0: i128): ; addi a2, zero, 0x40 ; sub a2, a2, a4 ; sll a5, a1, a2 -; beqz a4, 0xc ; mv a2, a5 -; j 8 +; bnez a4, 8 ; mv a2, zero ; srl a5, a0, a4 ; or a5, a2, a5 ; addi t0, zero, 0x40 ; srl a2, a1, a4 ; andi a4, a3, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a2 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a2 ; ret @@ -586,8 +578,8 @@ block0(v0: i128): ; andi a5,a4,63 ; li a2,64 ; sub a3,a2,a5 -; sll a2,a1,a3 -; select a2,a2,zero##condition=(a5 ne zero) +; sll a3,a1,a3 +; select a2,a3,zero##condition=(a5 ne zero) ; srl a3,a0,a5 ; or s11,a2,a3 ; li a2,64 @@ -615,7 +607,8 @@ block0(v0: i128): ; andi a5, a4, 0x3f ; addi a2, zero, 0x40 ; sub a3, a2, a5 -; sll a2, a1, a3 +; sll a3, a1, a3 +; mv a2, a3 ; bnez a5, 8 ; mv a2, zero ; srl a3, a0, a5 @@ -623,10 +616,9 @@ block0(v0: i128): ; addi a2, zero, 0x40 ; srl a3, a1, a5 ; andi a5, a4, 0x7f -; bltu a5, a2, 0x10 ; mv a0, a3 ; mv a1, zero -; j 0xc +; bgeu a5, a2, 0xc ; mv a0, s11 ; mv a1, a3 ; ld s11, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/ushr.clif b/cranelift/filetests/filetests/isa/riscv64/ushr.clif index 81eb01a11ce7..6446a31a3101 100644 --- a/cranelift/filetests/filetests/isa/riscv64/ushr.clif +++ b/cranelift/filetests/filetests/isa/riscv64/ushr.clif @@ -400,19 +400,17 @@ block0(v0: i128, v1: i8): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi t0, zero, 0x40 ; srl a3, a1, a4 ; andi a4, a2, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a3 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -444,19 +442,17 @@ block0(v0: i128, v1: i16): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi t0, zero, 0x40 ; srl a3, a1, a4 ; andi a4, a2, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a3 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -488,19 +484,17 @@ block0(v0: i128, v1: i32): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi t0, zero, 0x40 ; srl a3, a1, a4 ; andi a4, a2, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a3 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -532,19 +526,17 @@ block0(v0: i128, v1: i64): ; addi a3, zero, 0x40 ; sub a3, a3, a4 ; sll a5, a1, a3 -; beqz a4, 0xc ; mv a3, a5 -; j 8 +; bnez a4, 8 ; mv a3, zero ; srl a5, a0, a4 ; or a5, a3, a5 ; addi t0, zero, 0x40 ; srl a3, a1, a4 ; andi a4, a2, 0x7f -; bltu a4, t0, 0x10 ; mv a0, a3 ; mv a1, zero -; j 0xc +; bgeu a4, t0, 0xc ; mv a0, a5 ; mv a1, a3 ; ret @@ -566,8 +558,8 @@ block0(v0: i128, v1: i128): ; andi a5,a2,63 ; li a3,64 ; sub a3,a3,a5 -; sll a3,a1,a3 -; select a3,a3,zero##condition=(a5 ne zero) +; sll a4,a1,a3 +; select a3,a4,zero##condition=(a5 ne zero) ; srl a4,a0,a5 ; or s11,a3,a4 ; li a3,64 @@ -593,7 +585,8 @@ block0(v0: i128, v1: i128): ; andi a5, a2, 0x3f ; addi a3, zero, 0x40 ; sub a3, a3, a5 -; sll a3, a1, a3 +; sll a4, a1, a3 +; mv a3, a4 ; bnez a5, 8 ; mv a3, zero ; srl a4, a0, a5 @@ -601,10 +594,9 @@ block0(v0: i128, v1: i128): ; addi a3, zero, 0x40 ; srl a4, a1, a5 ; andi a5, a2, 0x7f -; bltu a5, a3, 0x10 ; mv a0, a4 ; mv a1, zero -; j 0xc +; bgeu a5, a3, 0xc ; mv a0, s11 ; mv a1, a4 ; ld s11, 8(sp) diff --git a/cranelift/filetests/filetests/isa/riscv64/zca.clif b/cranelift/filetests/filetests/isa/riscv64/zca.clif index 334cd4247e00..4086bb6353cb 100644 --- a/cranelift/filetests/filetests/isa/riscv64/zca.clif +++ b/cranelift/filetests/filetests/isa/riscv64/zca.clif @@ -163,9 +163,8 @@ block0(v0: i8, v1: i8, v2: i8): ; Disassembled: ; block0: ; offset 0x0 ; andi a4, a0, 0xff -; beqz a4, 8 ; c.mv a0, a1 -; c.j 4 +; bnez a4, 6 ; c.mv a0, a2 ; c.jr ra