OSDN Git Service

gcc/
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Apr 2009 14:02:09 +0000 (14:02 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Apr 2009 14:02:09 +0000 (14:02 +0000)
2009-04-27  H.J. Lu  <hongjiu.lu@intel.com>

PR target/39903
* config/i386/i386.c (construct_container): Don't call
gen_reg_or_parallel with BLKmode on X86_64_SSE_CLASS,
X86_64_SSESF_CLASS and X86_64_SSEDF_CLASS.

gcc/testsuite/

2009-04-27  H.J. Lu  <hongjiu.lu@intel.com>

PR target/39903
* gcc.dg/torture/pr39903-1.c: New.
* gcc.dg/torture/pr39903-2.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146842 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr39903-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr39903-2.c [new file with mode: 0644]

index fae01de..b8bf343 100644 (file)
@@ -1,3 +1,10 @@
+2009-04-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/39903
+       * config/i386/i386.c (construct_container): Don't call
+       gen_reg_or_parallel with BLKmode on X86_64_SSE_CLASS,
+       X86_64_SSESF_CLASS and X86_64_SSEDF_CLASS.
+
 2009-04-27  Michael Matz  <matz@suse.de>
 
        * ssaexpand.h (struct ssaexpand): Member 'values' is a bitmap.
index 72e9e71..9a374ba 100644 (file)
@@ -5466,7 +5466,10 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode,
       case X86_64_SSE_CLASS:
       case X86_64_SSESF_CLASS:
       case X86_64_SSEDF_CLASS:
-       return gen_reg_or_parallel (mode, orig_mode, SSE_REGNO (sse_regno));
+       if (mode != BLKmode)
+         return gen_reg_or_parallel (mode, orig_mode, 
+                                     SSE_REGNO (sse_regno));
+       break;
       case X86_64_X87_CLASS:
       case X86_64_COMPLEX_X87_CLASS:
        return gen_rtx_REG (mode, FIRST_STACK_REG);
index 49401aa..9579635 100644 (file)
@@ -1,3 +1,9 @@
+2009-04-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/39903
+       * gcc.dg/torture/pr39903-1.c: New.
+       * gcc.dg/torture/pr39903-2.c: Likewise.
+
 2009-04-27  Revital Eres  <eres@il.ibm.com>
 
        * gcc.dg/sms-1.c: Add noinline attribute, create sms dump file
diff --git a/gcc/testsuite/gcc.dg/torture/pr39903-1.c b/gcc/testsuite/gcc.dg/torture/pr39903-1.c
new file mode 100644 (file)
index 0000000..1a67dd7
--- /dev/null
@@ -0,0 +1,24 @@
+/* PR target/39903 */
+/* { dg-do run } */
+/* { dg-options "-Wno-psabi" } */
+
+struct X {
+  double d;
+  double b[];
+};
+
+struct X __attribute__((noinline))
+foo (double d)
+{
+  struct X x;
+  x.d = d;
+  return x;
+}
+extern void abort (void);
+int main()
+{
+  struct X x = foo(3.0);
+  if (x.d != 3.0)
+    abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr39903-2.c b/gcc/testsuite/gcc.dg/torture/pr39903-2.c
new file mode 100644 (file)
index 0000000..0cd7402
--- /dev/null
@@ -0,0 +1,24 @@
+/* PR target/39903 */
+/* { dg-do run } */
+/* { dg-options "-Wno-psabi" } */
+
+struct X {
+  float d;
+  float b[];
+};
+
+struct X __attribute__((noinline))
+foo (float d)
+{
+  struct X x;
+  x.d = d;
+  return x;
+}
+extern void abort (void);
+int main()
+{
+  struct X x = foo(3.0);
+  if (x.d != 3.0)
+    abort ();
+  return 0;
+}