aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2010-10-26 13:56:42 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2010-10-26 06:56:42 -0700
commitf28e93a8a563dc2202264ffef34e129e8ce5eeef (patch)
tree2c78afba269a3dd635960b56f043f279eb00af53
parent76d8a30aaf0a266709be00a9e01148e60d803f1e (diff)
downloadgcc-f28e93a8a563dc2202264ffef34e129e8ce5eeef.zip
gcc-f28e93a8a563dc2202264ffef34e129e8ce5eeef.tar.gz
gcc-f28e93a8a563dc2202264ffef34e129e8ce5eeef.tar.bz2
Properly align parameters on stack for x86.
gcc/ 2010-10-26 H.J. Lu <hongjiu.lu@intel.com> PR target/44948 * config/i386/i386.c (ix86_old_function_arg_boundary): New. (ix86_function_arg_boundary): Always align parameters on stack in 64bit and align parameters with alignment >= 16byte on stack in 32bit. Warn alignment change. gcc/testsuite/ 2010-10-26 H.J. Lu <hongjiu.lu@intel.com> PR target/44948 * g++.dg/abi/param2.C: Add -Wno-psabi for ilp32 x86. * g++.dg/vect/pr33860a.cc: Likewise. * gcc.c-torture/compile/20070522-1.c: Likewise. * gcc.dg/compat/struct-align-1_x.c: Likewise. * gcc.dg/compat/struct-align-1_y.c: Likewise. * gcc.dg/compat/struct-align-2_x.c: Likewise. * gcc.dg/compat/struct-align-2_y.c: Likewise. * gcc.dg/pr44136.c: Likewise. * gcc.c-torture/compile/pr33617.c: Add -Wno-psabi for x86. * gcc.dg/compat/vector-1_x.c: Likewise. * gcc.dg/compat/vector-1_y.c: Likewise. * gcc.dg/compat/vector-2_x.c: Likewise. * gcc.dg/compat/vector-2_y.c: Likewise. * gcc.dg/pr43300.c: Likewise. * gcc.dg/compat/vector-1a_x.c: Add -Wno-psabi. * gcc.dg/compat/vector-1a_y.c: Likewise. * gcc.dg/compat/vector-1b_x.c: Likewise. * gcc.dg/compat/vector-1b_y.c: Likewise. * gcc.dg/compat/vector-2a_x.c: Likewise. * gcc.dg/compat/vector-2a_y.c: Likewise. * gcc.dg/compat/vector-2b_x.c: Likewise. * gcc.dg/compat/vector-2b_y.c: Likewise. * gcc.target/i386/pr39162.c: Likewise. * gcc.target/i386/pr40906-2.c: Likewise. * gcc.target/i386/sse-5.c: Likewise. * gcc.dg/pr35442.c: Prune ABI change warnings. * gcc.c-torture/execute/pr38151.x: New. * gcc.target/i386/pr44948-1a.c: Likewise. * gcc.target/i386/pr44948-1b.c: Likewise. * gcc.target/i386/pr44948-2a.c: Likewise. * gcc.target/i386/pr44948-2b.c: Likewise. From-SVN: r165965
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c62
-rw-r--r--gcc/testsuite/ChangeLog39
-rw-r--r--gcc/testsuite/g++.dg/abi/param2.C1
-rw-r--r--gcc/testsuite/g++.dg/vect/pr33860a.cc2
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20070522-1.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr33617.c2
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr38151.x2
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-align-1_x.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-align-1_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-align-2_x.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/struct-align-2_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1_x.c1
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1_y.c1
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1a_x.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1a_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1b_x.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1b_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2_x.c3
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2a_x.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2a_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2b_x.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2b_y.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr35442.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr43300.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr44136.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39162.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr40906-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr44948-1a.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/pr44948-1b.c15
-rw-r--r--gcc/testsuite/gcc.target/i386/pr44948-2a.c21
-rw-r--r--gcc/testsuite/gcc.target/i386/pr44948-2b.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-5.c2
34 files changed, 202 insertions, 32 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1e329e2..922b195 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2010-10-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/44948
+ * config/i386/i386.c (ix86_old_function_arg_boundary): New.
+ (ix86_function_arg_boundary): Always align parameters on stack
+ in 64bit and align parameters with alignment >= 16byte on stack
+ in 32bit. Warn alignment change.
+
2010-10-26 Ian Lance Taylor <iant@google.com>
PR middle-end/45687
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 48ac3b5..6f3a898 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6600,24 +6600,10 @@ contains_aligned_value_p (const_tree type)
return false;
}
-/* Gives the alignment boundary, in bits, of an argument with the
- specified mode and type. */
-
-int
-ix86_function_arg_boundary (enum machine_mode mode, const_tree type)
+static int
+ix86_old_function_arg_boundary (enum machine_mode mode, const_tree type,
+ int align)
{
- int align;
- if (type)
- {
- /* Since the main variant type is used for call, we convert it to
- the main variant type. */
- type = TYPE_MAIN_VARIANT (type);
- align = TYPE_ALIGN (type);
- }
- else
- align = GET_MODE_ALIGNMENT (mode);
- if (align < PARM_BOUNDARY)
- align = PARM_BOUNDARY;
/* In 32bit, only _Decimal128 and __float128 are aligned to their
natural boundaries. */
if (!TARGET_64BIT && mode != TDmode && mode != TFmode)
@@ -6645,6 +6631,48 @@ ix86_function_arg_boundary (enum machine_mode mode, const_tree type)
return align;
}
+/* Gives the alignment boundary, in bits, of an argument with the
+ specified mode and type. */
+
+int
+ix86_function_arg_boundary (enum machine_mode mode, const_tree type)
+{
+ int align;
+ if (type)
+ {
+ /* Since the main variant type is used for call, we convert it to
+ the main variant type. */
+ type = TYPE_MAIN_VARIANT (type);
+ align = TYPE_ALIGN (type);
+ }
+ else
+ align = GET_MODE_ALIGNMENT (mode);
+ if (align < PARM_BOUNDARY)
+ align = PARM_BOUNDARY;
+ else
+ {
+ static bool warned;
+ int saved_align = align;
+
+ if (!TARGET_64BIT && align < 128)
+ align = PARM_BOUNDARY;
+
+ if (warn_psabi
+ && !warned
+ && align != ix86_old_function_arg_boundary (mode, type,
+ saved_align))
+ {
+ warned = true;
+ inform (input_location,
+ "The ABI of passing parameter with %dbyte"
+ " alignment has changed in GCC 4.6",
+ align / BITS_PER_UNIT);
+ }
+ }
+
+ return align;
+}
+
/* Return true if N is a possible register number of function value. */
static bool
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a29194f..60655c3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,42 @@
+2010-10-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/44948
+ * g++.dg/abi/param2.C: Add -Wno-psabi for ilp32 x86.
+ * g++.dg/vect/pr33860a.cc: Likewise.
+ * gcc.c-torture/compile/20070522-1.c: Likewise.
+ * gcc.dg/compat/struct-align-1_x.c: Likewise.
+ * gcc.dg/compat/struct-align-1_y.c: Likewise.
+ * gcc.dg/compat/struct-align-2_x.c: Likewise.
+ * gcc.dg/compat/struct-align-2_y.c: Likewise.
+ * gcc.dg/pr44136.c: Likewise.
+
+ * gcc.c-torture/compile/pr33617.c: Add -Wno-psabi for x86.
+ * gcc.dg/compat/vector-1_x.c: Likewise.
+ * gcc.dg/compat/vector-1_y.c: Likewise.
+ * gcc.dg/compat/vector-2_x.c: Likewise.
+ * gcc.dg/compat/vector-2_y.c: Likewise.
+ * gcc.dg/pr43300.c: Likewise.
+
+ * gcc.dg/compat/vector-1a_x.c: Add -Wno-psabi.
+ * gcc.dg/compat/vector-1a_y.c: Likewise.
+ * gcc.dg/compat/vector-1b_x.c: Likewise.
+ * gcc.dg/compat/vector-1b_y.c: Likewise.
+ * gcc.dg/compat/vector-2a_x.c: Likewise.
+ * gcc.dg/compat/vector-2a_y.c: Likewise.
+ * gcc.dg/compat/vector-2b_x.c: Likewise.
+ * gcc.dg/compat/vector-2b_y.c: Likewise.
+ * gcc.target/i386/pr39162.c: Likewise.
+ * gcc.target/i386/pr40906-2.c: Likewise.
+ * gcc.target/i386/sse-5.c: Likewise.
+
+ * gcc.dg/pr35442.c: Prune ABI change warnings.
+
+ * gcc.c-torture/execute/pr38151.x: New.
+ * gcc.target/i386/pr44948-1a.c: Likewise.
+ * gcc.target/i386/pr44948-1b.c: Likewise.
+ * gcc.target/i386/pr44948-2a.c: Likewise.
+ * gcc.target/i386/pr44948-2b.c: Likewise.
+
2010-10-26 Ian Lance Taylor <iant@google.com>
PR middle-end/45687
diff --git a/gcc/testsuite/g++.dg/abi/param2.C b/gcc/testsuite/g++.dg/abi/param2.C
index ed3c0df..d28387a 100644
--- a/gcc/testsuite/g++.dg/abi/param2.C
+++ b/gcc/testsuite/g++.dg/abi/param2.C
@@ -1,6 +1,7 @@
// PR target/20795
// Test passing aligned empty aggregate
// { dg-do compile }
+// { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
struct S { union {} a; } __attribute__((aligned));
diff --git a/gcc/testsuite/g++.dg/vect/pr33860a.cc b/gcc/testsuite/g++.dg/vect/pr33860a.cc
index a4f7bec..77e2822 100644
--- a/gcc/testsuite/g++.dg/vect/pr33860a.cc
+++ b/gcc/testsuite/g++.dg/vect/pr33860a.cc
@@ -1,4 +1,6 @@
/* { dg-do compile } */
+/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+
/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
class Matrix
diff --git a/gcc/testsuite/gcc.c-torture/compile/20070522-1.c b/gcc/testsuite/gcc.c-torture/compile/20070522-1.c
index 4c8b70c..1e1e802 100644
--- a/gcc/testsuite/gcc.c-torture/compile/20070522-1.c
+++ b/gcc/testsuite/gcc.c-torture/compile/20070522-1.c
@@ -1,3 +1,5 @@
+/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+
/* This was PR 31606, we were trying to use TImode to expand the
struct copy in SRA but TImode is not support on ia32. */
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr33617.c b/gcc/testsuite/gcc.c-torture/compile/pr33617.c
index 0174fb6..51c6f14 100644
--- a/gcc/testsuite/gcc.c-torture/compile/pr33617.c
+++ b/gcc/testsuite/gcc.c-torture/compile/pr33617.c
@@ -1,3 +1,5 @@
+/* { dg-options "-w -Wno-psabi" { target { i?86-*-* x86_64-*-* } } } */
+
typedef float V8SF __attribute__ ((vector_size (32)));
void bar (V8SF);
void
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr38151.x b/gcc/testsuite/gcc.c-torture/execute/pr38151.x
new file mode 100644
index 0000000..cb7b119
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr38151.x
@@ -0,0 +1,2 @@
+set additional_flags "-Wno-psabi"
+return 0
diff --git a/gcc/testsuite/gcc.dg/compat/struct-align-1_x.c b/gcc/testsuite/gcc.dg/compat/struct-align-1_x.c
index 51b2ef4..939db9d 100644
--- a/gcc/testsuite/gcc.dg/compat/struct-align-1_x.c
+++ b/gcc/testsuite/gcc.dg/compat/struct-align-1_x.c
@@ -1,3 +1,5 @@
+/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+
#include "compat-common.h"
#include "struct-align-1.h"
diff --git a/gcc/testsuite/gcc.dg/compat/struct-align-1_y.c b/gcc/testsuite/gcc.dg/compat/struct-align-1_y.c
index c858e10..77cb098 100644
--- a/gcc/testsuite/gcc.dg/compat/struct-align-1_y.c
+++ b/gcc/testsuite/gcc.dg/compat/struct-align-1_y.c
@@ -1,3 +1,5 @@
+/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+
#include "compat-common.h"
#include "struct-align-1.h"
diff --git a/gcc/testsuite/gcc.dg/compat/struct-align-2_x.c b/gcc/testsuite/gcc.dg/compat/struct-align-2_x.c
index 2a4ae586..6bfc222 100644
--- a/gcc/testsuite/gcc.dg/compat/struct-align-2_x.c
+++ b/gcc/testsuite/gcc.dg/compat/struct-align-2_x.c
@@ -1,3 +1,5 @@
+/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+
/* Disable this test for 16-bit targets. */
#include <limits.h>
diff --git a/gcc/testsuite/gcc.dg/compat/struct-align-2_y.c b/gcc/testsuite/gcc.dg/compat/struct-align-2_y.c
index 0ca2e40..2727015 100644
--- a/gcc/testsuite/gcc.dg/compat/struct-align-2_y.c
+++ b/gcc/testsuite/gcc.dg/compat/struct-align-2_y.c
@@ -1,3 +1,5 @@
+/* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+
/* Disable this test for 16-bit targets. */
#include <limits.h>
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1_x.c b/gcc/testsuite/gcc.dg/compat/vector-1_x.c
index ab4f88b..29a8170 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1_x.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1_x.c
@@ -1,4 +1,5 @@
/* { dg-options "-w" } */
+/* { dg-options "-w -Wno-psabi" { target { i?86-*-* x86_64-*-* } } } */
#ifndef SKIP_ATTRIBUTE
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1_y.c b/gcc/testsuite/gcc.dg/compat/vector-1_y.c
index 5a09c0e..284b98c 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1_y.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1_y.c
@@ -1,4 +1,5 @@
/* { dg-options "-w" } */
+/* { dg-options "-w -Wno-psabi" { target { i?86-*-* x86_64-*-* } } } */
#ifndef SKIP_ATTRIBUTE
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1a_x.c b/gcc/testsuite/gcc.dg/compat/vector-1a_x.c
index aa0fa7f..1d39cec 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1a_x.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1a_x.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -msse2" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -msse2" } */
#include "vector-1_x.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1a_y.c b/gcc/testsuite/gcc.dg/compat/vector-1a_y.c
index 2c88e19..53b1a7f 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1a_y.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1a_y.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -msse2" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -msse2" } */
#include "vector-1_y.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1b_x.c b/gcc/testsuite/gcc.dg/compat/vector-1b_x.c
index fe2565c..f3f76ec 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1b_x.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1b_x.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -mavx" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -mavx" } */
#include "vector-1_x.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1b_y.c b/gcc/testsuite/gcc.dg/compat/vector-1b_y.c
index 3212bf5..105282c 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1b_y.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1b_y.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -mavx" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -mavx" } */
#include "vector-1_y.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2_x.c b/gcc/testsuite/gcc.dg/compat/vector-2_x.c
index d08c77f..899a3ab 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2_x.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2_x.c
@@ -1,5 +1,6 @@
/* { dg-options "-w" } */
-/* { dg-options "-w -mno-mmx" { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-options "-w -mno-mmx -Wno-psabi" { target { i?86-*-* x86_64-*-* } } } */
+
#ifndef SKIP_ATTRIBUTE
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2_y.c b/gcc/testsuite/gcc.dg/compat/vector-2_y.c
index fd5830c..a5ab241 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2_y.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2_y.c
@@ -1,5 +1,5 @@
/* { dg-options "-w" } */
-/* { dg-options "-w -mno-mmx" { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-options "-w -mno-mmx -Wno-psabi" { target { i?86-*-* x86_64-*-* } } } */
#ifndef SKIP_ATTRIBUTE
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2a_x.c b/gcc/testsuite/gcc.dg/compat/vector-2a_x.c
index fcfacec..fb62bb8 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2a_x.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2a_x.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -msse2" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -msse2" } */
#include "vector-2_x.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2a_y.c b/gcc/testsuite/gcc.dg/compat/vector-2a_y.c
index 3797acb..7cdd195 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2a_y.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2a_y.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -msse2" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -msse2" } */
#include "vector-2_y.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2b_x.c b/gcc/testsuite/gcc.dg/compat/vector-2b_x.c
index 4dd3436..71b36be 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2b_x.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2b_x.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -mavx" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -mavx" } */
#include "vector-2_x.c"
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2b_y.c b/gcc/testsuite/gcc.dg/compat/vector-2b_y.c
index 2820e0b..9c114bb 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2b_y.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2b_y.c
@@ -1,3 +1,3 @@
-/* { dg-options "-w -mno-mmx -mavx" } */
+/* { dg-options "-w -Wno-psabi -mno-mmx -mavx" } */
#include "vector-2_y.c"
diff --git a/gcc/testsuite/gcc.dg/pr35442.c b/gcc/testsuite/gcc.dg/pr35442.c
index 2bf5ce6..875cb0b 100644
--- a/gcc/testsuite/gcc.dg/pr35442.c
+++ b/gcc/testsuite/gcc.dg/pr35442.c
@@ -11,4 +11,4 @@ foo (A a)
}
/* Ignore a warning that is irrelevant to the purpose of this test. */
-/* { dg-prune-output ".*GCC vector passed by reference.*" } */
+/* { dg-prune-output "(.*GCC vector passed by reference.*|.*ABI of * passing parameter with.*)" } */
diff --git a/gcc/testsuite/gcc.dg/pr43300.c b/gcc/testsuite/gcc.dg/pr43300.c
index df71dbe..a3d66fe 100644
--- a/gcc/testsuite/gcc.dg/pr43300.c
+++ b/gcc/testsuite/gcc.dg/pr43300.c
@@ -1,5 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-Os -w" } */
+/* { dg-options "-Os -w -Wno-psabi" { target { i?86-*-* x86_64-*-* } } } */
+
typedef float V2SF __attribute__ ((vector_size (128)));
V2SF
diff --git a/gcc/testsuite/gcc.dg/pr44136.c b/gcc/testsuite/gcc.dg/pr44136.c
index 71c21ab..e053cf8 100644
--- a/gcc/testsuite/gcc.dg/pr44136.c
+++ b/gcc/testsuite/gcc.dg/pr44136.c
@@ -1,7 +1,7 @@
/* PR debug/44136 */
/* { dg-do compile } */
/* { dg-options "-w -O2 -g" } */
-/* { dg-options "-w -O2 -g -mno-sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-options "-w -Wno-psabi -O2 -g -mno-sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#define vector __attribute((vector_size(16)))
vector float a;
diff --git a/gcc/testsuite/gcc.target/i386/pr39162.c b/gcc/testsuite/gcc.target/i386/pr39162.c
index 2d114b8..09ea615 100644
--- a/gcc/testsuite/gcc.target/i386/pr39162.c
+++ b/gcc/testsuite/gcc.target/i386/pr39162.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -msse2 -mno-avx" } */
+/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
diff --git a/gcc/testsuite/gcc.target/i386/pr40906-2.c b/gcc/testsuite/gcc.target/i386/pr40906-2.c
index 535141a..f0eda00 100644
--- a/gcc/testsuite/gcc.target/i386/pr40906-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr40906-2.c
@@ -1,6 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-options "-O2 -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpush-args -mno-accumulate-outgoing-args -m128bit-long-double" } */
+/* { dg-options "-O2 -Wno-psabi -fomit-frame-pointer -fno-asynchronous-unwind-tables -mpush-args -mno-accumulate-outgoing-args -m128bit-long-double" } */
void abort (void);
diff --git a/gcc/testsuite/gcc.target/i386/pr44948-1a.c b/gcc/testsuite/gcc.target/i386/pr44948-1a.c
new file mode 100644
index 0000000..db58c04
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr44948-1a.c
@@ -0,0 +1,18 @@
+/* PR target/44948 */
+/* { dg-do run } */
+/* { dg-options "-O -Wno-psabi -mtune=generic" } */
+/* { dg-require-effective-target avx_runtime } */
+/* { dg-additional-sources pr44948-1b.c } */
+
+#pragma GCC target ("avx")
+
+struct A { long b[8] __attribute__((aligned (32))); };
+void foo (long double, struct A);
+
+int
+main (void)
+{
+ struct A a = { { 0, 1, 2, 3, 4, 5, 6, 7 } };
+ foo (8.0L, a);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr44948-1b.c b/gcc/testsuite/gcc.target/i386/pr44948-1b.c
new file mode 100644
index 0000000..1e2d4d3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr44948-1b.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O -mno-avx -Wno-psabi -mtune=generic" } */
+
+struct A { long b[8] __attribute__((aligned (32))); };
+
+void
+foo (long double x, struct A y)
+{
+ int i;
+ if (x != 8.0L)
+ __builtin_abort ();
+ for (i = 0; i < 8; i++)
+ if (y.b[i] != i)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr44948-2a.c b/gcc/testsuite/gcc.target/i386/pr44948-2a.c
new file mode 100644
index 0000000..120346e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr44948-2a.c
@@ -0,0 +1,21 @@
+/* PR target/44948 */
+/* { dg-do run } */
+/* { dg-options "-O -Wno-psabi -mno-sse -mtune=generic" } */
+/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse2_runtime } */
+/* { dg-additional-sources pr44948-2b.c } */
+
+#pragma GCC target ("sse2")
+
+struct A
+{
+ float V4SF __attribute__ ((vector_size (16)));
+};
+
+int
+main (void)
+{
+ struct A a = { { 0, 1, 2, 3 } };
+ foo (8.0L, a, 8.0L);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr44948-2b.c b/gcc/testsuite/gcc.target/i386/pr44948-2b.c
new file mode 100644
index 0000000..fa1769b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr44948-2b.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O -mno-sse -Wno-psabi -mtune=generic" } */
+
+struct A
+{
+ float V4SF __attribute__ ((vector_size (16)));
+};
+
+void
+foo (long double x, struct A y, long double z)
+{
+ int i;
+ struct A a = { { 0, 1, 2, 3 } };
+
+ if (x != 8.0L || z != 8.0L)
+ __builtin_abort ();
+ if (__builtin_memcmp (&a, &y, sizeof (a)))
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/sse-5.c b/gcc/testsuite/gcc.target/i386/sse-5.c
index bdbd501..934fad5 100644
--- a/gcc/testsuite/gcc.target/i386/sse-5.c
+++ b/gcc/testsuite/gcc.target/i386/sse-5.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=i386" } } */
-/* { dg-options "-Winline -O2 -march=i386" } */
+/* { dg-options "-Winline -Wno-psabi -O2 -march=i386" } */
typedef double v2df __attribute__ ((vector_size (16)));
v2df p;