https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88558
Bug ID: 88558 Summary: Inline lrint, lrintf Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: jsm28 at gcc dot gnu.org Target Milestone: --- Target: powerpc*-*-* For hard-float powerpc, GCC should support inline code generation for the lrint / lrintf built-in functions, subject only to -fno-math-errno (the condition -fno-math-errno is already checked in builtins.c:expand_builtin_int_roundingfn_2, so the back end's lrint insn patterns do not need to check that condition). At present, the rs6000 back end has a lrint<mode>di2 pattern with an unnecessarily restrictive TARGET_FPRND condition, that can inline llrint / llrintf, and lrint / lrintf if long is 64-bit, for new-enough processors. (TARGET_FPRND is supposed to be for the instructions such as frin, friz etc.; fctiw / fctid are much older instructions). But it has nothing to generate fctiw. (See discussions in bug 83964, where machine-specific built-in functions for these instructions caused problems and were removed.) At present, glibc's bits/mathinline.h for powerpc has inlines of lrint and lrintf for 32-bit using fctiw, but we're moving away from such inlines in glibc headers where the compiler should be able to generate appropriate code for built-in function calls itself.