Skip to content

Commit 8ff1422

Browse files
committed
[RISCV] Fix incorrect use of Zfa fli instruction for negative minimum value. (#70411)
isSmallestNormalized() only considers the magnitude, not the sign.
1 parent be0cbe9 commit 8ff1422

File tree

4 files changed

+7
-4
lines changed

4 files changed

+7
-4
lines changed

llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ int RISCVLoadFPImm::getLoadFPImm(APFloat FPImm) {
251251
"Unexpected semantics");
252252

253253
// Handle the minimum normalized value which is different for each type.
254-
if (FPImm.isSmallestNormalized())
254+
if (FPImm.isSmallestNormalized() && !FPImm.isNegative())
255255
return 1;
256256

257257
// Convert to single precision to use its lookup table.

llvm/test/CodeGen/RISCV/double-zfa.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ define double @loadfpimm17() {
156156
define double @loadfpimm18() {
157157
; CHECK-LABEL: loadfpimm18:
158158
; CHECK: # %bb.0:
159-
; CHECK-NEXT: fli.d fa0, min
159+
; CHECK-NEXT: lui a0, %hi(.LCPI16_0)
160+
; CHECK-NEXT: fld fa0, %lo(.LCPI16_0)(a0)
160161
; CHECK-NEXT: ret
161162
ret double 0x8010000000000000
162163
}

llvm/test/CodeGen/RISCV/float-zfa.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ define float @loadfpimm12() {
110110
define float @loadfpimm13() {
111111
; CHECK-LABEL: loadfpimm13:
112112
; CHECK: # %bb.0:
113-
; CHECK-NEXT: fli.s fa0, min
113+
; CHECK-NEXT: lui a0, 526336
114+
; CHECK-NEXT: fmv.w.x fa0, a0
114115
; CHECK-NEXT: ret
115116
ret float 0xb810000000000000
116117
}

llvm/test/CodeGen/RISCV/half-zfa-fli.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ define half @loadfpimm14() {
216216
define half @loadfpimm15() {
217217
; CHECK-LABEL: loadfpimm15:
218218
; CHECK: # %bb.0:
219-
; CHECK-NEXT: fli.h fa0, min
219+
; CHECK-NEXT: lui a0, %hi(.LCPI14_0)
220+
; CHECK-NEXT: flh fa0, %lo(.LCPI14_0)(a0)
220221
; CHECK-NEXT: ret
221222
;
222223
; ZFHMIN-LABEL: loadfpimm15:

0 commit comments

Comments
 (0)