re PR target/39592 (Revision 145272 breaks -ansi -msse)
authorJoseph Myers <joseph@codesourcery.com>
Tue, 31 Mar 2009 12:51:02 +0000 (13:51 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Tue, 31 Mar 2009 12:51:02 +0000 (13:51 +0100)
PR target/39592
* config/i386/i386.md (*floatunssi<mode>2_1, two unnamed
define_splits, floatunssi<mode>2): Require x87 conversions from
DImode to be permitted.

testsuite:
* gcc.target/i386/pr39592-1.c: New test.

From-SVN: r145342

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr39592-1.c [new file with mode: 0644]

index 1b75a51425fdc2b13e9f8ffaedeb381a85c5b670..5b975fd18e4338126d4265d412149bfce6fc1336 100644 (file)
@@ -1,3 +1,10 @@
+2009-03-31  Joseph Myers  <joseph@codesourcery.com>
+
+       PR target/39592
+       * config/i386/i386.md (*floatunssi<mode>2_1, two unnamed
+       define_splits, floatunssi<mode>2): Require x87 conversions from
+       DImode to be permitted.
+
 2009-03-31  Joseph Myers  <joseph@codesourcery.com>
 
        PR preprocessor/15638
index 9592f91ff7ee364d26bd28b4daf05bcd04b95574..c43f3362a1d085017240d6f88ef65219ce1a3c06 100644 (file)
    (clobber (match_operand:DI 2 "memory_operand" "=m,m"))
    (clobber (match_scratch:SI 3 "=X,x"))]
   "!TARGET_64BIT
-   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, SImode)
+   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
    && TARGET_SSE"
   "#"
   [(set_attr "type" "multi")
    (clobber (match_operand:DI 2 "memory_operand" ""))
    (clobber (match_scratch:SI 3 ""))]
   "!TARGET_64BIT
-   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, SImode)
+   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
    && TARGET_SSE
    && reload_completed"
   [(set (match_dup 2) (match_dup 1))
    (clobber (match_operand:DI 2 "memory_operand" ""))
    (clobber (match_scratch:SI 3 ""))]
   "!TARGET_64BIT
-   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, SImode)
+   && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
    && TARGET_SSE
    && reload_completed"
   [(set (match_dup 2) (match_dup 3))
       (clobber (match_dup 2))
       (clobber (match_scratch:SI 3 ""))])]
   "!TARGET_64BIT
-   && ((TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, SImode)
+   && ((TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
        && TARGET_SSE)
        || (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH))"
 {
index 3593c7d538b5a59e9b1784e9afabe5b4c2dae2ec..4dab8771ddadd2323df69d6df68fa22a3ff4f9e7 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-31  Joseph Myers  <joseph@codesourcery.com>
+
+       PR target/39592
+       * gcc.target/i386/pr39592-1.c: New test.
+
 2009-03-31  Joseph Myers  <joseph@codesourcery.com>
 
        PR preprocessor/15638
diff --git a/gcc/testsuite/gcc.target/i386/pr39592-1.c b/gcc/testsuite/gcc.target/i386/pr39592-1.c
new file mode 100644 (file)
index 0000000..a7f3704
--- /dev/null
@@ -0,0 +1,10 @@
+/* Test for ICE with C99-conforming excess precision and -msse.  PR
+   39592.  */
+/* { dg-do compile } */
+/* { dg-options "-ansi -msse" } */
+
+double
+foo (unsigned long var)
+{
+  return var;
+}