[Bug target/81800] [8/9 regression] on aarch64 ilp32 lrint should not be inlined as two instructions

wilco at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Sep 4 13:07:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81800

--- Comment #20 from Wilco <wilco at gcc dot gnu.org> ---
Author: wilco
Date: Wed Sep  4 13:06:55 2019
New Revision: 275374

URL: https://gcc.gnu.org/viewcvs?rev=275374&root=gcc&view=rev
Log:
[AArch64] Fix PR81800

PR81800 is about the lrint inline giving spurious FE_INEXACT exceptions.
The previous change for PR81800 didn't fix this: when lrint is disabled
in the backend, the midend will simply use llrint.  This actually makes
things worse since llrint now also ignores FE_INVALID exceptions!
The fix is to disable lrint/llrint on double if the size of a long is
smaller (ie. ilp32).

    gcc/
        PR target/81800
        * gcc/config/aarch64/aarch64.md (lrint): Disable lrint pattern if GPF
        operand is larger than a long int.

    testsuite/
        PR target/81800
        * gcc.target/aarch64/no-inline-lrint_3.c: New test.

Added:
    branches/gcc-8-branch/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c
Modified:
    branches/gcc-8-branch/gcc/ChangeLog
    branches/gcc-8-branch/gcc/config/aarch64/aarch64.md
    branches/gcc-8-branch/gcc/testsuite/ChangeLog


More information about the Gcc-bugs mailing list