https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66462
--- Comment #24 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jeff Law <[email protected]>: https://gcc.gnu.org/g:8bce5e413a15abb756a1f6d0bc2f6741b6463b3e commit r17-4521-g8bce5e413a15abb756a1f6d0bc2f6741b6463b3e Author: Matt Turner <[email protected]> Date: Mon Sep 21 07:26:08 2026 -0600 [PATCH 1/5] alpha: implement the FP classification optabs GCC expands __builtin_isnan, __builtin_isinf, __builtin_isfinite and __builtin_isnormal into FP comparisons on alpha, and by default those comparisons carry no software-completion suffix: isnan_d: cmptun $f16,$f16,$f10 fbne $f10,$L11 A subnormal operand raises a denormal-operand exception there, and the outcome depends on the FPCR denormal-operand-disable bit: the operand is flushed to zero, which makes a subnormal indistinguishable from a zero, or the trap is delivered with no completion information, which is fatal: $ cat cls.c #include <math.h> int main (void) { volatile double sub = 0x1p-1050; return fpclassify (sub); } $ ./cls Floating point exception (core dumped) -mieee is the documented way to get subnormal support, so this is a matter of quality of implementation rather than conformance, but the classification built-ins exist to detect exactly these values and should not kill the process when given one. Classify by inspecting the encoding in an integer register instead, as the AArch64 isinf, isfinite and isnan expanders do for PR66462. Defining these patterns also stops fold_builtin_interclass_mathfn from rewriting the built-ins into comparisons in the first place. With -mieee the comparisons are completed by the kernel and are cheaper, so keep the generic expansions there, except with -fsignaling-nans: a comparison raises an invalid-operation exception for a signaling NaN, which is the PR66462 case that AArch64 and LoongArch handle the same way. gcc/ChangeLog: PR middle-end/66462 * config/alpha/alpha-protos.h (enum alpha_fp_class): New. (alpha_expand_fp_classify): Declare. * config/alpha/alpha.cc (alpha_expand_fp_classify): New function. * config/alpha/alpha.md (isfinite<mode>2, isinf<mode>2) (isnan<mode>2, isnormal<mode>2): New expanders. gcc/testsuite/ChangeLog: PR middle-end/66462 * gcc.target/alpha/fp-classify-1.c: New test. * gcc.target/alpha/fp-classify-2.c: New test. * gcc.target/alpha/fp-classify-3.c: New test. * gcc.target/alpha/fp-classify-4.c: New test.
