[llvm] 8ff1422 - [RISCV] Fix incorrect use of Zfa fli instruction for negative minimum value. (#70411)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 26 22:12:09 PDT 2023
Author: Craig Topper
Date: 2023-10-26T22:11:58-07:00
New Revision: 8ff14223536d6645d7c92b4488e3eb676e548cb1
URL: https://github.com/llvm/llvm-project/commit/8ff14223536d6645d7c92b4488e3eb676e548cb1
DIFF: https://github.com/llvm/llvm-project/commit/8ff14223536d6645d7c92b4488e3eb676e548cb1.diff
LOG: [RISCV] Fix incorrect use of Zfa fli instruction for negative minimum value. (#70411)
isSmallestNormalized() only considers the magnitude, not the sign.
Added:
Modified:
llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
llvm/test/CodeGen/RISCV/double-zfa.ll
llvm/test/CodeGen/RISCV/float-zfa.ll
llvm/test/CodeGen/RISCV/half-zfa-fli.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
index 7919189d198c8d1..ed8ae4a7a4550d4 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp
@@ -251,7 +251,7 @@ int RISCVLoadFPImm::getLoadFPImm(APFloat FPImm) {
"Unexpected semantics");
// Handle the minimum normalized value which is
diff erent for each type.
- if (FPImm.isSmallestNormalized())
+ if (FPImm.isSmallestNormalized() && !FPImm.isNegative())
return 1;
// Convert to single precision to use its lookup table.
diff --git a/llvm/test/CodeGen/RISCV/double-zfa.ll b/llvm/test/CodeGen/RISCV/double-zfa.ll
index 9f244f0daacf55d..162f33dd5ac9dd2 100644
--- a/llvm/test/CodeGen/RISCV/double-zfa.ll
+++ b/llvm/test/CodeGen/RISCV/double-zfa.ll
@@ -156,7 +156,8 @@ define double @loadfpimm17() {
define double @loadfpimm18() {
; CHECK-LABEL: loadfpimm18:
; CHECK: # %bb.0:
-; CHECK-NEXT: fli.d fa0, min
+; CHECK-NEXT: lui a0, %hi(.LCPI16_0)
+; CHECK-NEXT: fld fa0, %lo(.LCPI16_0)(a0)
; CHECK-NEXT: ret
ret double 0x8010000000000000
}
diff --git a/llvm/test/CodeGen/RISCV/float-zfa.ll b/llvm/test/CodeGen/RISCV/float-zfa.ll
index ec982a78dfe767e..6f9e5ec035224df 100644
--- a/llvm/test/CodeGen/RISCV/float-zfa.ll
+++ b/llvm/test/CodeGen/RISCV/float-zfa.ll
@@ -110,7 +110,8 @@ define float @loadfpimm12() {
define float @loadfpimm13() {
; CHECK-LABEL: loadfpimm13:
; CHECK: # %bb.0:
-; CHECK-NEXT: fli.s fa0, min
+; CHECK-NEXT: lui a0, 526336
+; CHECK-NEXT: fmv.w.x fa0, a0
; CHECK-NEXT: ret
ret float 0xb810000000000000
}
diff --git a/llvm/test/CodeGen/RISCV/half-zfa-fli.ll b/llvm/test/CodeGen/RISCV/half-zfa-fli.ll
index 73a77660eb3bdcb..577b774c27a0b36 100644
--- a/llvm/test/CodeGen/RISCV/half-zfa-fli.ll
+++ b/llvm/test/CodeGen/RISCV/half-zfa-fli.ll
@@ -216,7 +216,8 @@ define half @loadfpimm14() {
define half @loadfpimm15() {
; CHECK-LABEL: loadfpimm15:
; CHECK: # %bb.0:
-; CHECK-NEXT: fli.h fa0, min
+; CHECK-NEXT: lui a0, %hi(.LCPI14_0)
+; CHECK-NEXT: flh fa0, %lo(.LCPI14_0)(a0)
; CHECK-NEXT: ret
;
; ZFHMIN-LABEL: loadfpimm15:
More information about the llvm-commits
mailing list