Hi All, The inlining of lrint isn't valid in all cases on ILP32 when -fno-math-errno is used because an inexact exception is raised in certain circumstances.
For ILP32 I now restrict the inlining only when -fno-trapping-math is also specified. This fixed PR/81800. Regtested on aarch64-none-linux-gnu and no regressions. Ok for trunk? Thanks, Tamar gcc/ 2017-08-11 Tamar Christina <tamar.christ...@arm.com> PR target/81800 * config/aarch64/aarch64.md (lrint<GPF:mode><GPI:mode>2): Add flag_trapping_math. gcc/testsuite/ 2017-08-11 Tamar Christina <tamar.christ...@arm.com> * gcc.target/aarch64/inline-lrint_2.c (dg-options): Add -fno-trapping-math. --
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index b1ef0252c4b0b93d368abbd9bb88cb740115a829..6617ea0b95f71fd91534f63de9ddfd2f400bb787 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -5122,7 +5122,7 @@ (define_expand "lrint<GPF:mode><GPI:mode>2" [(match_operand:GPI 0 "register_operand") (match_operand:GPF 1 "register_operand")] - "TARGET_FLOAT" + "TARGET_FLOAT && (!TARGET_ILP32 || !flag_trapping_math)" { rtx cvt = gen_reg_rtx (<GPF:MODE>mode); emit_insn (gen_rint<GPF:mode>2 (cvt, operands[1])); diff --git a/gcc/testsuite/gcc.target/aarch64/inline-lrint_2.c b/gcc/testsuite/gcc.target/aarch64/inline-lrint_2.c index 6080e186d8f0c6f5ede81c6438e059e8b976378f..bd0c73c8d34a2cb52d0a453a175bedd59bba5457 100644 --- a/gcc/testsuite/gcc.target/aarch64/inline-lrint_2.c +++ b/gcc/testsuite/gcc.target/aarch64/inline-lrint_2.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-O3 -fno-math-errno" } */ +/* { dg-options "-O3 -fno-math-errno -fno-trapping-math" } */ #include "lrint-matherr.h"