diff mbox

[RFA:] fix breakage with "Update testsuite to run with slim LTO"

Message ID 201110210229.p9L2TKmx010677@ignucius.se.axis.com
State New
Headers show

Commit Message

Hans-Peter Nilsson Oct. 21, 2011, 2:29 a.m. UTC
> 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?


brgds, H-P

Comments

Jan Hubicka Oct. 21, 2011, 9:31 a.m. UTC | #1
> > 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.

Thanks. It looks good to me.  If we ever start scanning LTO assembler output,
we may simply add scan-lto-assembler variants or so...

Honza
Iain Sandoe Oct. 21, 2011, 11:10 a.m. UTC | #2
On 21 Oct 2011, at 10:31, Jan Hubicka wrote:

>>> 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.
>
> Thanks. It looks good to me.  If we ever start scanning LTO  
> assembler output,
> we may simply add scan-lto-assembler variants or so...

It looks like the gnat testsuite is also broken - but HP's fix doesn't  
recover that.
.. will try and take a look - but short on time today,
Iain
diff mbox

Patch

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.