]> git.ipfire.org Git - thirdparty/gcc.git/commit
AArch64: Add isfinite expander [PR 66462]
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Wed, 27 Aug 2025 17:20:21 +0000 (17:20 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Thu, 11 Sep 2025 11:44:08 +0000 (11:44 +0000)
commitb996d4509f1724d92a08dae70d8354fbb5561fb7
treeb85345cabda0860a3d37aad1e0a3c5d1fdae9e9f
parentaa4aafbad5235fd302c39e1d8b7cb9cdea11c67c
AArch64: Add isfinite expander [PR 66462]

Add an expander for isfinite using integer arithmetic.  This is
typically faster and avoids generating spurious exceptions on
signaling NaNs.  This fixes part of PR66462.

int isfinite1 (float x) { return __builtin_isfinite (x); }

Before:
fabs    s0, s0
mov     w0, 2139095039
fmov    s31, w0
fcmp    s0, s31
cset    w0, hi
eor     w0, w0, 1
ret

After:
fmov    w1, s0
mov     w0, -16777216
cmp     w0, w1, lsl 1
cset    w0, hi
ret

gcc:
PR middle-end/66462
* config/aarch64/aarch64.md (isfinite<mode>2): Add new expander.

gcc/testsuite:
PR middle-end/66462
* gcc.target/aarch64/pr66462.c: Add tests for isfinite.
gcc/config/aarch64/aarch64.md
gcc/testsuite/gcc.target/aarch64/pr66462.c