This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/81800] New: [8 regression] on aarch64 ilp32 lrint should not be inlined as two instructions
- From: "nsz at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 10 Aug 2017 14:48:52 +0000
- Subject: [Bug target/81800] New: [8 regression] on aarch64 ilp32 lrint should not be inlined as two instructions
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81800
Bug ID: 81800
Summary: [8 regression] on aarch64 ilp32 lrint should not be
inlined as two instructions
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: nsz at gcc dot gnu.org
Target Milestone: ---
recently lrint is inlined as frintx/fcvtzs on aarch64, but this
is not valid on ilp32 where a non-integer double may be out-of-bound
for a long and then the first instruction raises the inexact,
the second one raises invalid exception and only the invalid should
be raised in this case.
so the inlining is only valid with -fno-trapping-math i think.
gcc -O3 -mabi=ilp32 -S -fno-math-errno b.c
compiles to
f:
frintx d0, d0
fcvtzs w0, d0
ret
(the patch for the equivalent bug in glibc is
https://sourceware.org/ml/libc-alpha/2017-08/msg00299.html
which saves and restores the fenv around the instructions.)