From dc8f5205374552519f0e4a89c115f3a17c23931b Mon Sep 17 00:00:00 2001
From: Richard Guenther <rguenther@suse.de>
Date: Wed, 5 Jul 2006 16:24:57 +0000
Subject: [PATCH] re PR target/28158 (ICE on complex operation with -O1 -msse)

2006-07-05  Richard Guenther  <rguenther@suse.de>

	PR target/28158
	* config/i386/i386.md (*negdf2_1): Restrict pattern to
	TARGET_SSE2 targets if using SSE math.
	(*absdf2_1): Likewise.

	* gfortran.dg/pr28158.f90: New testcase.

From-SVN: r115203
---
 gcc/ChangeLog                         | 7 +++++++
 gcc/config/i386/i386.md               | 4 ++--
 gcc/testsuite/ChangeLog               | 5 +++++
 gcc/testsuite/gfortran.dg/pr28158.f90 | 7 +++++++
 4 files changed, 21 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/pr28158.f90

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 798fe03a3c15..93de949630c4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-07-05  Richard Guenther  <rguenther@suse.de>
+
+	PR target/28158
+	* config/i386/i386.md (*negdf2_1): Restrict pattern to
+	TARGET_SSE2 targets if using SSE math.
+	(*absdf2_1): Likewise.
+
 2006-07-05  Richard Guenther  <rguenther@suse.de>
 
 	PR tree-optimization/28162
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 80c352c81d68..ee2e76bf9b14 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -9913,7 +9913,7 @@
 (define_insn "*negdf2_1"
   [(set (match_operand:DF 0 "register_operand" "=f")
 	(neg:DF (match_operand:DF 1 "register_operand" "0")))]
-  "TARGET_80387 && (reload_completed || !TARGET_SSE_MATH)"
+  "TARGET_80387 && (reload_completed || !(TARGET_SSE2 && TARGET_SSE_MATH))"
   "fchs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "DF")])
@@ -9937,7 +9937,7 @@
 (define_insn "*absdf2_1"
   [(set (match_operand:DF 0 "register_operand" "=f")
 	(abs:DF (match_operand:DF 1 "register_operand" "0")))]
-  "TARGET_80387 && (reload_completed || !TARGET_SSE_MATH)"
+  "TARGET_80387 && (reload_completed || !(TARGET_SSE2 && TARGET_SSE_MATH))"
   "fabs"
   [(set_attr "type" "fsgn")
    (set_attr "mode" "DF")])
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e40ce0bfe09a..60e18a3e7b3c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-07-05  Richard Guenther  <rguenther@suse.de>
+
+	PR target/28158
+	* gfortran.dg/pr28158.f90: New testcase.
+
 2006-07-05  Richard Guenther  <rguenther@suse.de>
 
 	PR tree-optimization/28162
diff --git a/gcc/testsuite/gfortran.dg/pr28158.f90 b/gcc/testsuite/gfortran.dg/pr28158.f90
new file mode 100644
index 000000000000..4556ecd76edd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr28158.f90
@@ -0,0 +1,7 @@
+! { dg-do compile { target i?86-*-* x86_64-*-* } }
+! { dg-require-effective-target ilp32 }
+! { dg-options "-O -msse -mfpmath=sse" }
+    subroutine yhalf(z)
+    complex cdexpj,z
+    z=cdexpj((0.d0,1.d0)*z)
+    end
-- 
GitLab