riscv64: Implement fcmp in ISLE (#5512)

Rework the compilation of fcmp in the riscv64 backend to be in ISLE, removing the need for the dedicated Fcmp instruction. This change is motivated by #5500, which showed that the riscv64 backend was generating branch instructions in the middle of a basic block.

We can't remove lower_br_fcmp quite yet as it's used in a few places in the emit module, but it's now no longer reachable from the ISLE lowerings.

Fixes #5500
This commit is contained in:
Trevor Elliott
2023-01-04 11:52:00 -08:00
committed by GitHub
parent d1920f5a2d
commit b2d5afdf83
7 changed files with 202 additions and 113 deletions

View File

@@ -2177,14 +2177,6 @@ fn riscv64_worst_case_instruction_size() {
//there are all candidates potential generate a lot of bytes.
let mut candidates: Vec<MInst> = vec![];
candidates.push(Inst::Fcmp {
rd: writable_a0(),
cc: FloatCC::UnorderedOrLessThanOrEqual,
ty: F64,
rs1: fa1(),
rs2: fa0(),
});
candidates.push(Inst::IntSelect {
dst: vec![writable_a0(), writable_a0()],
ty: I128,