aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2008-04-28 19:49:51 +0200
committerUros Bizjak <uros@gcc.gnu.org>2008-04-28 19:49:51 +0200
commit0d5fd2b8e3a038293d2c6303876ee6e821e16aca (patch)
treeedaf2043436b84d496ffab9be7d87f5412c9ffdc /gcc
parent177bf4913f8e539e21d97d33a9a9b714a5d18f4a (diff)
downloadgcc-0d5fd2b8e3a038293d2c6303876ee6e821e16aca.zip
gcc-0d5fd2b8e3a038293d2c6303876ee6e821e16aca.tar.gz
gcc-0d5fd2b8e3a038293d2c6303876ee6e821e16aca.tar.bz2
re PR target/36073 (ICE with -ffast-math and -mfpmath=sse,387)
PR target/36073 * config/i386/i386.md (*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit): Change operand 1 predicate to nonimmediate_operand. testsuite/ChangeLog: PR target/36073 * gcc.target/i386/pr36073.c: New test. From-SVN: r134757
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.md2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr36073.c12
4 files changed, 27 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b839254..83383da 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2008-04-28 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/36073
+ * config/i386/i386.md
+ (*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit):
+ Change operand 1 predicate to nonimmediate_operand.
+
2008-04-28 Jakub Jelinek <jakub@redhat.com>
PR debug/36060
@@ -16,7 +23,8 @@
2008-04-28 Uros Bizjak <ubizjak@gmail.com>
PR target/36064
- * config/i386/i386.md (floatdi<X87MODEF:mode>2_i387_with_xmm splitters):
+ * config/i386/i386.md
+ (floatdi<X87MODEF:mode>2_i387_with_xmm splitters):
Use match_scratch instead of match_operand for operands 3 and 4.
2008-04-27 Richard Guenther <rguenther@suse.de>
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 6e62157..a68c7ec 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -5035,7 +5035,7 @@
(define_insn "*float<SSEMODEI24:mode><MODEF:mode>2_mixed_interunit"
[(set (match_operand:MODEF 0 "register_operand" "=f,x,x")
(float:MODEF
- (match_operand:SSEMODEI24 1 "register_operand" "m,r,m")))]
+ (match_operand:SSEMODEI24 1 "nonimmediate_operand" "m,r,m")))]
"(<SSEMODEI24:MODE>mode != DImode || TARGET_64BIT)
&& SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_MIX_SSE_I387
&& (TARGET_INTER_UNIT_CONVERSIONS || optimize_size)"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 70a716a..4ac8b14 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-28 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/36073
+ * gcc.target/i386/pr36073.c: New test.
+
2008-04-28 Richard Guenther <rguenther@suse.de>
PR testsuite/34223
diff --git a/gcc/testsuite/gcc.target/i386/pr36073.c b/gcc/testsuite/gcc.target/i386/pr36073.c
new file mode 100644
index 0000000..b158757
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr36073.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O -march=core2 -mfpmath=sse,387 -ffast-math" } */
+
+extern double log (double x);
+extern int f (void);
+
+double cached_value;
+
+void g (void)
+{
+ cached_value = log (f ());
+}