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:
@@ -460,11 +460,6 @@ fn riscv64_get_operands<F: Fn(VReg) -> VReg>(inst: &Inst, collector: &mut Operan
|
||||
collector.reg_use(src);
|
||||
collector.reg_def(rd);
|
||||
}
|
||||
&Inst::Fcmp { rd, rs1, rs2, .. } => {
|
||||
collector.reg_use(rs1);
|
||||
collector.reg_use(rs2);
|
||||
collector.reg_early_def(rd);
|
||||
}
|
||||
&Inst::Select {
|
||||
ref dst,
|
||||
condition,
|
||||
@@ -1366,25 +1361,6 @@ impl Inst {
|
||||
let rd = format_reg(rd.to_reg(), allocs);
|
||||
format!("{} {},{}", op.op_name(), rd, base,)
|
||||
}
|
||||
&Inst::Fcmp {
|
||||
rd,
|
||||
cc,
|
||||
ty,
|
||||
rs1,
|
||||
rs2,
|
||||
} => {
|
||||
let rs1 = format_reg(rs1, allocs);
|
||||
let rs2 = format_reg(rs2, allocs);
|
||||
let rd = format_reg(rd.to_reg(), allocs);
|
||||
format!(
|
||||
"f{}.{} {},{},{}",
|
||||
cc,
|
||||
if ty == F32 { "s" } else { "d" },
|
||||
rd,
|
||||
rs1,
|
||||
rs2,
|
||||
)
|
||||
}
|
||||
&Inst::Store {
|
||||
to,
|
||||
src,
|
||||
|
||||
Reference in New Issue
Block a user