https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97786
--- Comment #5 from Surya Kumari Jangala <jskumari at gcc dot gnu.org> --- The input gimple to RTL has the builtin split into two parts: ‘isinfD’ and ‘signbitD’ due to which in the final assembly generated, we have instructions to check the sign bit of the floating point number instead of using the sign bit computed by the xststdcdp insn. Instead, if we can avoid splitting the builtin, we can modify RTL to handle the builtin and generate optimized instructions. This split seems to be happening before the gimple passes. Using -fdump-tree-all-all option, the first file in the dump (<filename>.006t.original) has the split: ;; Function test1 (null) ;; enabled by -tree-original { return isinfD.1825 (xD.3943) != 0 ? signbitD.1014 (xD.3943) != 0 ? -1 : 1 : 0; }