The tests in gcc.dg/torture/stackalign use two sets of torture options:
the usual optimization sets used as default for torture tests, and up to
four sets of options that are specific to stack alignment.  Currently
the stack alignment options are passed via an option that is used by the
dg-test option dg_extra_tool_flags, which doesn't become part of the
test messages in summary files the way the other torture options do,
leading to non-unique compilation messages in the test summary.

This patch uses existing support to combine multiple sets of torture
options for use in a single set of tests, in this case the usual
optimization torture options plus the stack alignment options.  Options
used in all of the stack alignment testing on x86 targets are used in
default options rather than as part of torture options, to reduce noise
in test summaries.  Tests that currently use dg-options now use
dg-additional-options instead to append to, rather than replace, the
default flags.

H.J., I'm pretty sure this now does what you want for the seven tests
that specify different options.

Tested on i686-pc-linux-gnu and arm-none-eabi.  OK for mainline?

Janis
2012-06-11  Janis Johnson  <jani...@codesourcery.com>

        * gcc.dg/torture/stackalign/stackalign.exp: Combine stack
        alignment torture options with usual torture options.
        * gcc.dg/torture/stackalign/alloca-2.c: Use dg-additional-options
        instead of dg-options.
        * gcc.dg/torture/stackalign/alloca-3.c: Likewise.
        * gcc.dg/torture/stackalign/alloca-4.c: Likewise.
        * gcc.dg/torture/stackalign/alloca-5.c: Likewise.
        * gcc.dg/torture/stackalign/alloca-6.c: Likewise.
        * gcc.dg/torture/stackalign/push-1.c: Likewise.
        * gcc.dg/torture/stackalign/vararg-3.c: Likewise.

Index: gcc.dg/torture/stackalign/stackalign.exp
===================================================================
--- gcc.dg/torture/stackalign/stackalign.exp    (revision 188322)
+++ gcc.dg/torture/stackalign/stackalign.exp    (working copy)
@@ -1,4 +1,4 @@
-# Copyright (C) 2008, 2010
+# Copyright (C) 2008, 2010, 2012
 # Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
@@ -18,33 +18,53 @@
 # This harness is for tests that should be run at all optimisation levels.
 
 load_lib gcc-dg.exp
+load_lib torture-options.exp
 
-set additional_flags ""
+global DG_TORTURE_OPTIONS LTO_TORTURE_OPTIONS
+
+dg-init
+torture-init
+
+# default_flags are replaced by a dg-options test directive, or appended
+# to by using dg-additional-options.  Use default_flags for options that
+# are used in all of the torture sets to limit the amount of noise in
+# test summaries.
+set default_flags ""
+
+# torture_flags are combined with other torture options and do not
+# affect options specified within a test.
+set torture_flags ""
+
+set stackalign_options [list]
 if { [check_effective_target_automatic_stack_alignment] } then {
-    lappend additional_flags "-mstackrealign"
-    lappend additional_flags "-mpreferred-stack-boundary=5"
+    append default_flags " -mstackrealign"
+    append default_flags " -mpreferred-stack-boundary=5"
 }
 if { [istarget i?86*-*-*] || [istarget x86_64-*-*] } then {
-    lappend additional_flags "-mno-mmx"
+    append default_flags " -mno-mmx"
 }
+lappend stackalign_options [join $torture_flags]
 
-dg-init
-
-gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] $additional_flags
 if { [check_effective_target_fpic] } then {
-    set pic_additional_flags $additional_flags
-    lappend pic_additional_flags "-fpic"
-    gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] $pic_additional_flags
+    set pic_torture_flags $torture_flags
+    append pic_torture_flags " -fpic"
+    lappend stackalign_options [join $pic_torture_flags]
 }
 
 if { [check_effective_target_automatic_stack_alignment] } then {
-    lappend additional_flags "-mforce-drap"
-    gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] $additional_flags
+    append torture_flags " -mforce-drap"
+    lappend stackalign_options [join $torture_flags]
     if { [check_effective_target_fpic] } then {
-       set pic_additional_flags $additional_flags
-       lappend pic_additional_flags "-fpic"
-       gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] $pic_additional_flags
+       set pic_torture_flags $torture_flags
+       append pic_torture_flags " -fpic"
+       lappend stackalign_options [join $pic_torture_flags]
     }
 }
 
+# Combine stackalign options with the usual torture optimization flags.
+set-torture-options [concat $DG_TORTURE_OPTIONS $LTO_TORTURE_OPTIONS] 
$stackalign_options
+
+gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] "$default_flags"
+
+torture-finish
 dg-finish
Index: gcc.dg/torture/stackalign/alloca-2.c
===================================================================
--- gcc.dg/torture/stackalign/alloca-2.c        (revision 188322)
+++ gcc.dg/torture/stackalign/alloca-2.c        (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
-/* { dg-options "-msse2" } */
+/* { dg-additional-options "-mmmx -msse2" } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <emmintrin.h>
Index: gcc.dg/torture/stackalign/alloca-3.c
===================================================================
--- gcc.dg/torture/stackalign/alloca-3.c        (revision 188322)
+++ gcc.dg/torture/stackalign/alloca-3.c        (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-options "-msse2" } */
+/* { dg-additional-options "-mmmx -msse2" } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <emmintrin.h>
Index: gcc.dg/torture/stackalign/alloca-4.c
===================================================================
--- gcc.dg/torture/stackalign/alloca-4.c        (revision 188322)
+++ gcc.dg/torture/stackalign/alloca-4.c        (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
-/* { dg-options "-mincoming-stack-boundary=2 -mpreferred-stack-boundary=2" } */
+/* { dg-additional-options "-mincoming-stack-boundary=2 
-mpreferred-stack-boundary=2" } */
 
 #include "check.h"
 
Index: gcc.dg/torture/stackalign/alloca-5.c
===================================================================
--- gcc.dg/torture/stackalign/alloca-5.c        (revision 188322)
+++ gcc.dg/torture/stackalign/alloca-5.c        (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/45234 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
-/* { dg-options "-mincoming-stack-boundary=2 -mpreferred-stack-boundary=2" } */
+/* { dg-additional-options "-mincoming-stack-boundary=2 
-mpreferred-stack-boundary=2" } */
 
 #include "check.h"
 
Index: gcc.dg/torture/stackalign/alloca-6.c
===================================================================
--- gcc.dg/torture/stackalign/alloca-6.c        (revision 188322)
+++ gcc.dg/torture/stackalign/alloca-6.c        (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/45234 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
-/* { dg-options "-mincoming-stack-boundary=2 -mpreferred-stack-boundary=2" } */
+/* { dg-additional-options "-mincoming-stack-boundary=2 
-mpreferred-stack-boundary=2" } */
 
 #include "check.h"
 
Index: gcc.dg/torture/stackalign/push-1.c
===================================================================
--- gcc.dg/torture/stackalign/push-1.c  (revision 188322)
+++ gcc.dg/torture/stackalign/push-1.c  (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/37010 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
-/* { dg-options "-msse2 -mpreferred-stack-boundary=2" } */
+/* { dg-additional-options "-mmmx -msse2 -mpreferred-stack-boundary=2" } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <emmintrin.h>
Index: gcc.dg/torture/stackalign/vararg-3.c
===================================================================
--- gcc.dg/torture/stackalign/vararg-3.c        (revision 188322)
+++ gcc.dg/torture/stackalign/vararg-3.c        (working copy)
@@ -1,6 +1,6 @@
 /* PR middle-end/37009 */
 /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-options "-msse2" } */
+/* { dg-additional-options "-mmmx -msse2" } */
 /* { dg-require-effective-target sse2_runtime } */
 
 #include <stdarg.h>

Reply via email to