From: Uros Bizjak Date: Thu, 19 Nov 2020 08:26:01 +0000 (+0100) Subject: i386: Disable *2_i387_1 for TARGET_SSE_MATH modes X-Git-Tag: releases/gcc-10.3.0~612 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36a1d386c779761e79f56ddfe2725feb7aa0bfe4;p=thirdparty%2Fgcc.git i386: Disable *2_i387_1 for TARGET_SSE_MATH modes This pattern interferes with *2_1 when TARGET_SSE_MATH modes are active. Combine pass is able to remove (use) RTXes and transforms *2_1 to *2_i387_1 where SSE alternatives are not available. 2020-11-19 Uroš Bizjak gcc/ PR target/97887 * config/i386/i386.md (*2_i387_1): Disable for TARGET_SSE_MATH modes. gcc/testsuite/ PR target/97887 * gcc.target/i386/pr97887.c: New test. --- diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index c2cf04289a0c..6e46cdcebb0e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -9993,7 +9993,7 @@ (absneg:X87MODEF (match_operand:X87MODEF 1 "register_operand" "0,0"))) (clobber (reg:CC FLAGS_REG))] - "TARGET_80387" + "TARGET_80387 && !(SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH)" "#") (define_split diff --git a/gcc/testsuite/gcc.target/i386/pr97887.c b/gcc/testsuite/gcc.target/i386/pr97887.c new file mode 100644 index 000000000000..b457f054bed0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr97887.c @@ -0,0 +1,15 @@ +/* PR target/97887 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -msse2 -mfpmath=sse" } */ + +float f (float a) +{ + return -a / a; +} + +double d (double a) +{ + return -a / a; +} + +/* { dg-final { scan-assembler-not "fchs" } } */