diff mbox series

i386: Disable *<absneg:code><mode>2_i387_1 for TARGET_SSE_MATH modes [PR97787]

Message ID CAFULd4anJjB+S3z58h5zmbKZQ2G2mry_CtC0GnunbpBv_u0vMg@mail.gmail.com
State New
Headers show
Series i386: Disable *<absneg:code><mode>2_i387_1 for TARGET_SSE_MATH modes [PR97787] | expand

Commit Message

Uros Bizjak Nov. 19, 2020, 8:38 a.m. UTC
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/
    PR target/97887
    * config/i386/i386.md (*<absneg:code><mode>2_i387_1):
    Disable for TARGET_SSE_MATH modes.

gcc/testsuite/
    PR target/97887
    * gcc.target/i386/pr97887.c: New test.

Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Pushed to mainline and gcc-10.

Uros.
diff mbox series

Patch

diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 52e306de00a..29935014772 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 00000000000..b457f054bed
--- /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" } } */