public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Thomas Schwinge <thomas@codesourcery.com>
To: Jan Hubicka <hubicka@ucw.cz>, <gcc-patches@gcc.gnu.org>
Cc: Richard Biener <rguenther@suse.de>,
	Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>,
	Mike Stump <mikestump@comcast.net>
Subject: Let each 'lto_init' determine the default 'LTO_OPTIONS', and 'torture-init' the 'LTO_TORTURE_OPTIONS' (was: Update testsuite to run with slim LTO)
Date: Wed, 3 May 2023 13:16:22 +0200	[thread overview]
Message-ID: <875y99d5rt.fsf@euler.schwinge.homeip.net> (raw)
In-Reply-To: <20110927172322.GA21068@kam.mff.cuni.cz>

[-- Attachment #1: Type: text/plain, Size: 4697 bytes --]

Hi!

This very likely isn't the only instance of such a kind of problem in the
GCC testsuite ;-) -- but it's one that I've run into, and analyzed:

On 2011-09-27T19:23:22+0200, Jan Hubicka <hubicka@ucw.cz> wrote:
> this patch updates testsuite to cover both fat and slim LTO when linker plugin
> is used [...]

This change here:

> *** lib/lto.exp       (revision 179274)
> --- lib/lto.exp       (working copy)
> *************** proc lto_init { args } {
> *** 66,79 ****
>       # You can put this in the environment before site.exp is written or
>       # add it to site.exp directly.
>       if ![info exists LTO_OPTIONS] {
> !     set LTO_OPTIONS [list   \
> !         {-O0 -flto -flto-partition=none } \
> !         {-O2 -flto -flto-partition=none } \
> !         {-O0 -flto -flto-partition=1to1 } \
> !         {-O2 -flto -flto-partition=1to1 } \
> !         {-O0 -flto}         \
> !         {-O2 -flto}         \
> !     ]
>       }
>   }
>
> --- 66,89 ----
>       # You can put this in the environment before site.exp is written or
>       # add it to site.exp directly.
>       if ![info exists LTO_OPTIONS] {
> !         if [check_linker_plugin_available] {
> !       set LTO_OPTIONS [list \
> !           {-O0 -flto -flto-partition=none -fuse-linker-plugin} \
> !           {-O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects } \
> !           {-O0 -flto -flto-partition=1to1 -fno-use-linker-plugin } \
> !           {-O2 -flto -flto-partition=1to1 -fno-use-linker-plugin } \
> !           {-O0 -flto -fuse-linker-plugin -fno-fat-lto-objects }     \
> !           {-O2 -flto -fuse-linker-plugin}   \
> !       ]
> !     } else {
> !       set LTO_OPTIONS [list \
> !           {-O0 -flto -flto-partition=none } \
> !           {-O2 -flto -flto-partition=none } \
> !           {-O0 -flto -flto-partition=1to1 } \
> !           {-O2 -flto -flto-partition=1to1 } \
> !           {-O0 -flto }      \
> !           {-O2 -flto}               \
> !     }
>       }
>   }

... is problematic: initializing the persistent 'LTO_OPTIONS' dependent
on 'check_linker_plugin_available' that is (potentially) variable per
testing variant ('RUNTESTFLAGS=--target_board=unix\{-m64,-m32\}', for
example).

Similarly:

> *** lib/c-torture.exp (revision 179274)
> --- lib/c-torture.exp (working copy)
> *************** if [info exists ADDITIONAL_TORTURE_OPTIO
> *** 52,61 ****
>
>   set LTO_TORTURE_OPTIONS ""
>   if [check_effective_target_lto] {
> !     set LTO_TORTURE_OPTIONS [list \
> !     { -O2 -flto -flto-partition=none } \
> !     { -O2 -flto }
> !     ]
>   }
>
>   global GCC_UNDER_TEST
> --- 52,69 ----
>
>   set LTO_TORTURE_OPTIONS ""
>   if [check_effective_target_lto] {
> !     # When having plugin test both slim and fat LTO and plugin/nonplugin
> !     # path.
> !     if [check_linker_plugin_available] {
> !       set LTO_TORTURE_OPTIONS [list \
> !       { -O2 -flto -fno-use-linker-plugin -flto-partition=none } \
> !       { -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects }
> !       ]
> !     } else {
> !       set LTO_TORTURE_OPTIONS [list \
> !       { -O2 -flto -flto-partition=none } \
> !       { -O2 -flto -fuse-linker-plugin }
> !     }
>   }

..., and:

> *** lib/gcc-dg.exp    (revision 179274)
> --- lib/gcc-dg.exp    (working copy)
> *************** if [info exists ADDITIONAL_TORTURE_OPTIO
> *** 69,78 ****
>
>   set LTO_TORTURE_OPTIONS ""
>   if [check_effective_target_lto] {
> !     set LTO_TORTURE_OPTIONS [list \
> !     { -O2 -flto -flto-partition=none } \
> !     { -O2 -flto }
> !     ]
>   }
>
>
> --- 69,86 ----
>
>   set LTO_TORTURE_OPTIONS ""
>   if [check_effective_target_lto] {
> !     # When having plugin test both slim and fat LTO and plugin/nonplugin
> !     # path.
> !     if [check_linker_plugin_available] {
> !       set LTO_TORTURE_OPTIONS [list \
> !       { -O2 -flto -fno-use-linker-plugin -flto-partition=none } \
> !       { -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects }
> !       ]
> !     } else {
> !       set LTO_TORTURE_OPTIONS [list \
> !       { -O2 -flto -flto-partition=none } \
> !       { -O2 -flto -fuse-linker-plugin }
> !     }
>   }

OK to push the attached
"Let each 'lto_init' determine the default 'LTO_OPTIONS', and 'torture-init' the 'LTO_TORTURE_OPTIONS'"?


Grüße
 Thomas


-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Let-each-lto_init-determine-the-default-LTO_OPTIONS-.patch --]
[-- Type: text/x-diff, Size: 8393 bytes --]

From 75ac220ba923436d2df1b5bbb6356aba2bba1bfe Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Tue, 2 May 2023 19:57:47 +0200
Subject: [PATCH] Let each 'lto_init' determine the default 'LTO_OPTIONS', and
 'torture-init' the 'LTO_TORTURE_OPTIONS'

Otherwise, for example for 'RUNTESTFLAGS' of '--target_board=unix\{-m64,-m32\}'
vs. '--target_board=unix\{-m32,-m64\}', both variants exercise testing with
always the first flag variant's 'LTO_OPTIONS'/'LTO_TORTURE_OPTIONS', which
results in unequal test results between the two 'RUNTESTFLAGS' variants if one
of the flag variants has 'check_linker_plugin_available' but the other doesn't.

Fix-up for r180245 (commit c1a7cdbbcca90ad5260bfc543f8c10f3514e76c1)
"Update testsuite to run with slim LTO".

	gcc/testsuite/
	* g++.dg/guality/guality.exp: Move 'torture-init' earlier.
	* gcc.dg/guality/guality.exp: Likewise.
	* gfortran.dg/guality/guality.exp: Likewise.
	* lib/c-torture.exp (LTO_TORTURE_OPTIONS): Don't set.
	* lib/gcc-dg.exp (LTO_TORTURE_OPTIONS): Don't set.
	* lib/lto.exp (lto_init, lto_finish): Let each 'lto_init'
	determine the default 'LTO_OPTIONS'.
	* lib/torture-options.exp (torture-init, torture-finish): Let each
	'torture-init' determine the 'LTO_TORTURE_OPTIONS'.
---
 gcc/testsuite/g++.dg/guality/guality.exp      |  2 +-
 gcc/testsuite/gcc.dg/guality/guality.exp      |  2 +-
 gcc/testsuite/gfortran.dg/guality/guality.exp |  2 +-
 gcc/testsuite/lib/c-torture.exp               | 17 -----------
 gcc/testsuite/lib/gcc-dg.exp                  | 14 ----------
 gcc/testsuite/lib/lto.exp                     | 13 +++++++++
 gcc/testsuite/lib/torture-options.exp         | 28 +++++++++++++++++++
 7 files changed, 44 insertions(+), 34 deletions(-)

diff --git a/gcc/testsuite/g++.dg/guality/guality.exp b/gcc/testsuite/g++.dg/guality/guality.exp
index 2d736d292e93..cd56b06f2f0b 100644
--- a/gcc/testsuite/g++.dg/guality/guality.exp
+++ b/gcc/testsuite/g++.dg/guality/guality.exp
@@ -37,6 +37,7 @@ proc check_guality {args} {
 }
 
 dg-init
+torture-init
 
 global GDB
 if ![info exists ::env(GUALITY_GDB_NAME)] {
@@ -54,7 +55,6 @@ report_gdb $::env(GUALITY_GDB_NAME) [info script]
 
 global DG_TORTURE_OPTIONS LTO_TORTURE_OPTIONS
 set guality_dg_torture_options [guality_minimal_options $DG_TORTURE_OPTIONS]
-torture-init
 set-torture-options \
     $guality_dg_torture_options \
     [list {}] \
diff --git a/gcc/testsuite/gcc.dg/guality/guality.exp b/gcc/testsuite/gcc.dg/guality/guality.exp
index 075bebe34e89..a8f2921d8881 100644
--- a/gcc/testsuite/gcc.dg/guality/guality.exp
+++ b/gcc/testsuite/gcc.dg/guality/guality.exp
@@ -37,6 +37,7 @@ proc check_guality {args} {
 }
 
 dg-init
+torture-init
 
 global GDB
 if ![info exists ::env(GUALITY_GDB_NAME)] {
@@ -69,7 +70,6 @@ global DG_TORTURE_OPTIONS
 set guality_dg_torture_options [guality_minimal_options $DG_TORTURE_OPTIONS]
 set guality_dg_torture_options [guality_transform_options $guality_dg_torture_options]
 set guality_lto_torture_options [guality_transform_options $LTO_TORTURE_OPTIONS]
-torture-init
 set-torture-options \
     $guality_dg_torture_options \
     [list {}] \
diff --git a/gcc/testsuite/gfortran.dg/guality/guality.exp b/gcc/testsuite/gfortran.dg/guality/guality.exp
index 86a966a9133c..610449523f06 100644
--- a/gcc/testsuite/gfortran.dg/guality/guality.exp
+++ b/gcc/testsuite/gfortran.dg/guality/guality.exp
@@ -18,6 +18,7 @@ if { [istarget "powerpc-ibm-aix*"] } {
 }
 
 dg-init
+torture-init
 
 global GDB
 if ![info exists ::env(GUALITY_GDB_NAME)] {
@@ -35,7 +36,6 @@ report_gdb $::env(GUALITY_GDB_NAME) [info script]
 
 global DG_TORTURE_OPTIONS
 set guality_dg_torture_options [guality_minimal_options $DG_TORTURE_OPTIONS]
-torture-init
 set-torture-options \
     $guality_dg_torture_options \
 
diff --git a/gcc/testsuite/lib/c-torture.exp b/gcc/testsuite/lib/c-torture.exp
index e54437d5f878..f62c6e9fe6ce 100644
--- a/gcc/testsuite/lib/c-torture.exp
+++ b/gcc/testsuite/lib/c-torture.exp
@@ -38,7 +38,6 @@ if { $orig_environment_saved == 0 } {
 # The default option list can be overridden by
 # TORTURE_OPTIONS="{ list1 } ... { listN }"
 
-set LTO_TORTURE_OPTIONS ""
 if [info exists TORTURE_OPTIONS] {
     set C_TORTURE_OPTIONS $TORTURE_OPTIONS
 } else {
@@ -57,22 +56,6 @@ if [info exists TORTURE_OPTIONS] {
 	{ -O3 -g } \
 	{ -Os } \
 	{ -Og -g } ]
-
-    if [check_effective_target_lto] {
-        # When having plugin test both slim and fat LTO and plugin/nonplugin
-        # path.
-        if [check_linker_plugin_available] {
-          set LTO_TORTURE_OPTIONS [list \
-    	      { -O2 -flto -fno-use-linker-plugin -flto-partition=none } \
-	      { -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects }
-          ]
-        } else {
-          set LTO_TORTURE_OPTIONS [list \
-	      { -O2 -flto -flto-partition=none } \
-	      { -O2 -flto }
-          ]
-        }
-    }
 }
 
 if [info exists ADDITIONAL_TORTURE_OPTIONS] {
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 9d79b9402e9e..693cbdd7511a 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -73,7 +73,6 @@ if { $orig_environment_saved == 0 } {
 global gcc_force_conventional_output
 set gcc_force_conventional_output ""
 
-set LTO_TORTURE_OPTIONS ""
 if [info exists TORTURE_OPTIONS] {
     set DG_TORTURE_OPTIONS $TORTURE_OPTIONS
 } else {
@@ -93,19 +92,6 @@ if [info exists TORTURE_OPTIONS] {
 	{ -Os } ]
 
     if [check_effective_target_lto] {
-        # When having plugin test both slim and fat LTO and plugin/nonplugin
-        # path.
-	if [check_linker_plugin_available] {
-           set LTO_TORTURE_OPTIONS [list \
-	      { -O2 -flto -fno-use-linker-plugin -flto-partition=none } \
-	      { -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects }
-           ]
-        } else {
-           set LTO_TORTURE_OPTIONS [list \
-	      { -O2 -flto -flto-partition=none } \
-	      { -O2 -flto }
-           ]
-        }
         set gcc_force_conventional_output "-ffat-lto-objects"
     }
 }
diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp
index 9e44c443bdbd..c95e7d0a505d 100644
--- a/gcc/testsuite/lib/lto.exp
+++ b/gcc/testsuite/lib/lto.exp
@@ -215,6 +215,11 @@ proc lto_init { args } {
 	      {-O2 -flto}		\
 	  ]
 	}
+	global lto_init_set_LTO_OPTIONS
+	if [info exists lto_init_set_LTO_OPTIONS] {
+	    error "lto_init_set_LTO_OPTIONS already set"
+	}
+	set lto_init_set_LTO_OPTIONS 1
     }
 }
 
@@ -233,6 +238,14 @@ proc lto_finish { } {
     } elseif [board_info $dest exists mathlib] {
 	unset board_info($dest,mathlib)
     }
+
+    # Let the next 'lto_init' redetermine the default 'LTO_OPTIONS'.
+    global lto_init_set_LTO_OPTIONS
+    if [info exists lto_init_set_LTO_OPTIONS] {
+	global LTO_OPTIONS
+	unset LTO_OPTIONS
+	unset lto_init_set_LTO_OPTIONS
+    }
 }
 
 # Subsets of tests can be selectively disabled by members of this list:
diff --git a/gcc/testsuite/lib/torture-options.exp b/gcc/testsuite/lib/torture-options.exp
index 61295604b5bf..394418e9a02f 100644
--- a/gcc/testsuite/lib/torture-options.exp
+++ b/gcc/testsuite/lib/torture-options.exp
@@ -28,6 +28,27 @@ proc torture-init { args } {
     if [info exists torture_with_loops] {
 	error "torture-init: torture_with_loops is not empty as expected"
     }
+
+    global LTO_TORTURE_OPTIONS
+    if [info exists LTO_TORTURE_OPTIONS] {
+	error "torture-init: LTO_TORTURE_OPTIONS is not empty as expected"
+    }
+    set LTO_TORTURE_OPTIONS ""
+    if [check_effective_target_lto] {
+	# When having plugin test both slim and fat LTO and plugin/nonplugin
+	# path.
+	if [check_linker_plugin_available] {
+	    set LTO_TORTURE_OPTIONS [list \
+	      { -O2 -flto -fno-use-linker-plugin -flto-partition=none } \
+	      { -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects }
+	    ]
+	} else {
+	    set LTO_TORTURE_OPTIONS [list \
+	      { -O2 -flto -flto-partition=none } \
+	      { -O2 -flto }
+	    ]
+	}
+    }
 }
 
 # Return 1 if torture options have already been set, 0 otherwise.
@@ -100,6 +121,13 @@ proc torture-finish { args } {
     } else {
 	error "torture-finish: torture_with_loops is not defined"
     }
+
+    global LTO_TORTURE_OPTIONS
+    if [info exists LTO_TORTURE_OPTIONS] {
+	unset LTO_TORTURE_OPTIONS
+    } else {
+	error "torture-finish: LTO_TORTURE_OPTIONS is not defined"
+    }
 }
 
 # Useful for debugging .exp files.
-- 
2.39.2


  parent reply	other threads:[~2023-05-03 11:16 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-27 17:54 Update testsuite to run with slim LTO Jan Hubicka
2011-09-30 14:56 ` Diego Novillo
2011-10-20 19:34 ` Breakage with "Update testsuite to run with slim LTO" Hans-Peter Nilsson
2011-10-20 19:53   ` Andi Kleen
2011-10-21  0:39   ` Jan Hubicka
2011-10-21  5:22     ` [RFA:] fix breakage " Hans-Peter Nilsson
2011-10-21  9:58       ` Jan Hubicka
2011-10-21 12:23         ` Iain Sandoe
2011-10-21 12:35           ` Rainer Orth
2011-10-21 16:20             ` Jan Hubicka
2011-10-21 17:40               ` Hans-Peter Nilsson
2011-10-21 18:52                 ` Jan Hubicka
2011-10-21 19:56                   ` Hans-Peter Nilsson
2011-10-24 12:08             ` Richard Guenther
2011-10-28 14:59       ` ping: [RFA:] testsuite infrastructure for options implied by dg-final methods Hans-Peter Nilsson
2011-11-04 13:56         ` ping*2: " Hans-Peter Nilsson
2011-11-04 17:05           ` Mike Stump
2011-11-04 17:54             ` Hans-Peter Nilsson
2011-11-04 18:14               ` Mike Stump
2011-11-04 18:16                 ` Hans-Peter Nilsson
2023-05-03 11:16 ` Thomas Schwinge [this message]
2023-05-03 11:46   ` Let each 'lto_init' determine the default 'LTO_OPTIONS', and 'torture-init' the 'LTO_TORTURE_OPTIONS' (was: Update testsuite to run with slim LTO) Richard Biener
2023-05-09  7:32     ` Christophe Lyon
2023-05-09  9:00       ` Testsuite: Add missing 'torture-init'/'torture-finish' around 'LTO_TORTURE_OPTIONS' usage (was: Let each 'lto_init' determine the default 'LTO_OPTIONS', and 'torture-init' the 'LTO_TORTURE_OPTIONS') Thomas Schwinge
2023-05-09 15:17         ` Christophe Lyon
2023-05-09 19:14           ` Christophe Lyon
2023-05-10  7:51             ` Testsuite: Add 'torture-init-done', and use it to conditionalize implicit 'torture-init' (was: Testsuite: Add missing 'torture-init'/'torture-finish' around 'LTO_TORTURE_OPTIONS' usage (was: Let each 'lto_init' determine the default 'LTO_OPTIONS', and 'torture-init' the 'LTO_TORTURE_OPTIONS')) Thomas Schwinge
2023-05-10 13:42               ` Christophe Lyon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=875y99d5rt.fsf@euler.schwinge.homeip.net \
    --to=thomas@codesourcery.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hubicka@ucw.cz \
    --cc=mikestump@comcast.net \
    --cc=rguenther@suse.de \
    --cc=ro@CeBiTec.Uni-Bielefeld.DE \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).