From a9871dcbcd2cede31a9fae04ee7ac34c958233b6 Mon Sep 17 00:00:00 2001 From: Afonso Bordado Date: Wed, 4 Oct 2023 14:57:45 +0100 Subject: [PATCH] riscv64: Mark `fcmp` as already extended --- cranelift/codegen/src/isa/riscv64/inst.isle | 5 +++-- .../filetests/isa/riscv64/extend.clif | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/cranelift/codegen/src/isa/riscv64/inst.isle b/cranelift/codegen/src/isa/riscv64/inst.isle index 1001ba9453af..716b022b7b22 100644 --- a/cranelift/codegen/src/isa/riscv64/inst.isle +++ b/cranelift/codegen/src/isa/riscv64/inst.isle @@ -2148,9 +2148,10 @@ (rule 1 (val_already_extended (uextend _)) $true) (rule 1 (val_already_extended (sextend _)) $true) -;; The result of `icmp` is zero or one, meaning that it's already sign extended -;; to the full register width. +;; The result of `icmp`/`fcmp` is zero or one, meaning that it's already sign +;; extended to the full register width. (rule 1 (val_already_extended (icmp _ _ _)) $true) +(rule 1 (val_already_extended (fcmp _ _ _)) $true) (type ExtendOp (enum diff --git a/cranelift/filetests/filetests/isa/riscv64/extend.clif b/cranelift/filetests/filetests/isa/riscv64/extend.clif index 604e31ea5fe9..445671f2c8af 100644 --- a/cranelift/filetests/filetests/isa/riscv64/extend.clif +++ b/cranelift/filetests/filetests/isa/riscv64/extend.clif @@ -258,3 +258,21 @@ block0(v0: i8, v1: i64): ; add a0, a0, a1 ; ret + +function %extend_fcmp(f64, f64) -> i64 { +block0(v0: f64, v1: f64): + v3 = fcmp.f64 lt v0, v1 + v4 = sextend.i64 v3 + return v4 +} + +; VCode: +; block0: +; flt.d a0,fa0,fa1 +; ret +; +; Disassembled: +; block0: ; offset 0x0 +; flt.d a0, fa0, fa1 +; ret +