This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[RFA:] fix breakage with "Update testsuite to run with slim LTO"
- From: Hans-Peter Nilsson <hans-peter dot nilsson at axis dot com>
- To: hubicka at ucw dot cz
- Cc: hp at axis dot com, hubicka at ucw dot cz, gcc-patches at gcc dot gnu dot org, dnovillo at google dot com, rguenther at suse dot de, ak at linux dot intel dot com
- Date: Fri, 21 Oct 2011 04:29:20 +0200
- Subject: [RFA:] fix breakage with "Update testsuite to run with slim LTO"
> Date: Fri, 21 Oct 2011 00:19:32 +0200
> From: Jan Hubicka <hubicka@ucw.cz>
> Yes, if we scan assembler, we likely want -fno-fat-lto-objects.
> > then IIUC you need to patch *all* torture tests that use
> > scan-assembler and scan-assembler-not. Alternatively, patch
> > somewhere else, like not passing it if certain directives are
> > used, like scan-assembler{,-not}. And either way, is it safe to
> > add that option always, not just when also passing "-flto" or
> > something?
>
> Hmm, some of assembler scans still works because they check for
> presence of symbols we output anyway, but indeed, it would make more
> sense to automatically imply -ffat-lto-object when scan-assembler
> is used. I am not sure if my dejagnu skill as on par here however.
Maybe you could make amends ;) by testing the following, which
seems to work at least for dg-torture.exp and cris-elf/cris-sim,
in which -ffat-lto-object is automatically added for each
scan-assembler and scan-assembler-not test, extensible for other
dg-final actions without polluting with checking LTO options and
whatnot across the files. I checked (and corrected) so it also
works when !check_effective_target_lto by commenting out the
setting in the second chunk.
gcc/testsuite:
* lib/gcc-dg.exp (gcc_force_conventional_output): New global
variable, default empty, -ffat-lto-objects for effective_target_lto.
(gcc-dg-test-1): Add options from dg-final methods.
* lib/scanasm.exp (scan-assembler_required_options)
(scan-assembler-not_required_options): New procs.
Ok to commit?
Index: lib/gcc-dg.exp
===================================================================
--- lib/gcc-dg.exp (revision 180270)
+++ lib/gcc-dg.exp (working copy)
@@ -68,6 +68,13 @@ if [info exists ADDITIONAL_TORTURE_OPTIO
}
set LTO_TORTURE_OPTIONS ""
+
+# Some torture-options cause intermediate code output, unusable for
+# testing using e.g. scan-assembler. In this variable are the options
+# how to force it, when needed.
+global gcc_force_conventional_output
+set gcc_force_conventional_output ""
+
if [check_effective_target_lto] {
# When having plugin test both slim and fat LTO and plugin/nonplugin
# path.
@@ -76,6 +83,7 @@ if [check_effective_target_lto] {
{ -O2 -flto -fno-use-linker-plugin -flto-partition=none } \
{ -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects }
]
+ set gcc_force_conventional_output "-ffat-lto-objects"
} else {
set LTO_TORTURE_OPTIONS [list \
{ -O2 -flto -flto-partition=none } \
@@ -154,6 +162,19 @@ proc gcc-dg-test-1 { target_compile prog
default {
perror "$do_what: not a valid dg-do keyword"
return ""
+ }
+ }
+
+ # Let { dg-final { action } } force options as returned by an
+ # optional proc ${action}_required_options.
+ upvar 2 dg-final-code finalcode
+ foreach x [split $finalcode "\n"] {
+ set finalcmd [lindex $x 0]
+ if { [info procs ${finalcmd}_required_options] != "" } {
+ set req [${finalcmd}_required_options]
+ if { $req != "" } {
+ lappend extra_tool_flags $req
+ }
}
}
Index: lib/scanasm.exp
===================================================================
--- lib/scanasm.exp (revision 180270)
+++ lib/scanasm.exp (working copy)
@@ -85,6 +85,11 @@ proc scan-assembler { args } {
dg-scan "scan-assembler" 1 $testcase $output_file $args
}
+proc scan-assembler_required_options { args } {
+ global gcc_force_conventional_output
+ return $gcc_force_conventional_output
+}
+
# Check that a pattern is not present in the .s file produced by the
# compiler. See dg-scan for details.
@@ -94,6 +99,11 @@ proc scan-assembler-not { args } {
set output_file "[file rootname [file tail $testcase]].s"
dg-scan "scan-assembler-not" 0 $testcase $output_file $args
+}
+
+proc scan-assembler-not_required_options { args } {
+ global gcc_force_conventional_output
+ return $gcc_force_conventional_output
}
# Return the scan for the assembly for hidden visibility.
brgds, H-P