[PATCH] D116694: [RISCV] Add strictfp support for compares.
Jim Lin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 31 04:03:21 PDT 2022
Jim added inline comments.
================
Comment at: llvm/test/CodeGen/RISCV/double-fcmp-strict.ll:205
+; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
+; RV64I-NEXT: call __ledf2 at plt
+; RV64I-NEXT: slti a0, a0, 1
----------------
craig.topper wrote:
> Jim wrote:
> > I am not sure that does the exception raise in `__ledf2` ?
> > In GCC, it use `__unorddf2` to check either operands is NaN before `__ledf2`.
> I'm not seeing `__unorddf2` when I tried testing https://godbolt.org/z/fb7PWaso4
https://godbolt.org/z/nWbfh9hjx
Clang extra appended options `-ffp-exception-behavior=strict -Xclang -fexperimental-strict-floating-point` to enable strict floating-point.
option: -O3 -march=rv64if -mabi=lp64f -g0 -ffp-exception-behavior=strict -Xclang -fexperimental-strict-floating-point
```
addi sp, sp, -16
sd ra, 8(sp) # 8-byte Folded Spill
call __gtdf2 at plt <<< may raise fp exception
sgtz a0, a0
ld ra, 8(sp) # 8-byte Folded Reload
addi sp, sp, 16
ret
```
option: -O3 -march=rv64ifd -mabi=lp64f -g0 -ffp-exception-behavior=strict -Xclang -fexperimental-strict-floating-point
```
fmv.d.x ft0, a0
fmv.d.x ft1, a1
frflags a1
flt.d a0, ft1, ft0
fsflags a1
feq.d zero, ft1, ft0
ret
```
GCC use `call __unorddf2` to check either operands is NaN.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116694/new/
https://reviews.llvm.org/D116694
More information about the llvm-commits
mailing list