diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2020-11-19 09:23:46 +0100 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2020-11-19 09:25:04 +0100 |
commit | 50134189a434e638861f8bf27d5caab9622811c8 (patch) | |
tree | 2c5f1d2c50f589e90ab450535e3c9e0b034f34e1 /gcc | |
parent | 700337494e1b0d5ff608e1a3c77852381e264653 (diff) | |
download | gcc-50134189a434e638861f8bf27d5caab9622811c8.zip gcc-50134189a434e638861f8bf27d5caab9622811c8.tar.gz gcc-50134189a434e638861f8bf27d5caab9622811c8.tar.bz2 |
i386: Disable *<absneg:code><mode>2_i387_1 for TARGET_SSE_MATH modes
This pattern interferes with *<absneg:code><mode>2_1 when TARGET_SSE_MATH
modes are active. Combine pass is able to remove (use) RTXes and transforms
*<absneg:code><mode>2_1 to *<absneg:code><mode>2_i387_1 where SSE
alternatives are not available.
2020-11-19 Uroš Bizjak <ubizjak@gmail.com>
gcc/
* config/i386/i386.md (*<absneg:code><mode>2_i387_1):
Disable for TARGET_SSE_MATH modes.
gcc/testsuite/
* gcc.target/i386/pr97887.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386.md | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr97887.c | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 52e306d..2993501 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -10258,7 +10258,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>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 0000000..b457f05 --- /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" } } */ |