This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: PR target/39445: failure of SSE2 tests
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: ubizjak at gmail dot com
- Date: Thu, 12 Mar 2009 12:51:59 -0700
- Subject: PATCH: PR target/39445: failure of SSE2 tests
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
ix86_expand_push tries to set memory alignment to the function argument
boundary. But we don't have argument type to properly compute the
function argument boundary. Passing NULL as type may lead to the
wrong boundary. This patch reverts my change. I will check it in.
Thanks.
H.J.
---
gcc/
2009-03-12 H.J. Lu <hongjiu.lu@intel.com>
PR target/39445
* config/i386/i386.c (ix86_expand_push): Don't set memory
alignment.
gcc/testsuite/
2009-03-12 H.J. Lu <hongjiu.lu@intel.com>
PR target/39445
* gcc.target/i386/pr39445.c: New.
* gcc.target/i386/push-1.c: XFAIL.
--- gcc/config/i386/i386.c.pr39445 2009-03-12 10:24:04.000000000 -0700
+++ gcc/config/i386/i386.c 2009-03-12 12:43:15.000000000 -0700
@@ -12633,10 +12633,9 @@ ix86_expand_push (enum machine_mode mode
tmp = gen_rtx_MEM (mode, stack_pointer_rtx);
/* When we push an operand onto stack, it has to be aligned at least
- at the function argument boundary. */
- set_mem_align (tmp,
- ix86_function_arg_boundary (mode, NULL_TREE));
-
+ at the function argument boundary. However since we don't have
+ the argument type, we can't determine the actual argument
+ boundary. */
emit_move_insn (tmp, x);
}
--- gcc/testsuite/gcc.target/i386/pr39445.c.pr39445 2009-03-12 12:44:19.000000000 -0700
+++ gcc/testsuite/gcc.target/i386/pr39445.c 2009-03-12 12:42:23.000000000 -0700
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-Os -msse2" } */
+
+#include "sse2-check.h"
+
+typedef struct { __m128 f __attribute__((packed)); } packed;
+
+__m128 __attribute__((noinline))
+foo (__m128 a1, __m128 a2, __m128 a3, __m128 a4,
+ __m128 a5, __m128 a6, __m128 a7, __m128 a8,
+ int b1, int b2, int b3, int b4, int b5, int b6, int b7, packed y)
+{
+ return y.f;
+}
+
+void
+sse2_test (void)
+{
+ packed x;
+ __m128 y = { 0 };
+ x.f = y;
+ y = foo (y, y, y, y, y, y, y, y, 1, 2, 3, 4, 5, 6, -1, x);
+ if (__builtin_memcmp (&y, &x.f, sizeof (y)) != 0)
+ abort ();
+}
--- gcc/testsuite/gcc.target/i386/push-1.c.pr39445 2009-02-17 08:40:04.000000000 -0800
+++ gcc/testsuite/gcc.target/i386/push-1.c 2009-03-12 12:45:01.000000000 -0700
@@ -12,4 +12,4 @@ bar (void)
foo (x, x, x, x, 5);
}
-/* { dg-final { scan-assembler-not "movups" } } */
+/* { dg-final { scan-assembler-not "movups" { xfail *-*-* } } } */