This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: PR target/39445: failure of SSE2 tests


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 *-*-* } } } */



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]