There are tests in g++.tree-prof that have non-unique lines in test
summaries for scan-*-dump checks.  Investigation showed that these tests
were being run multiple times, for a list of options that had leaked
over from another set of profile-directed optimization tests.  This
patch doesn't fix duplicate lines for checks in profiled tests that are
run multiple times, but it does avoid the problem and, in so doing, fix
tests that use profopt.exp so they are run with the correct sets of
options.

Without this patch, tests in g++.dg/tree-prof are run with
[ { -g } { -O0 } { -O1 } { -O2 } { -O3 } { -O3 -g } { -Os } ] instead
of the expected [list {}].  Each test provides its own options, so
the ones from PROFOPT_OPTIONS were ignored.

Tests gcc.misc-tests/bprob*.c were supposed to be run with a set of
options that was instead overridden by an empty list.  This patch makes
it use [ { -O2 } {-O3 } ] so the options tested there will get some
coverage with optimization, although not as much as originally planned
when the tests were added years and years ago.

The other sets of tests that use profopt.exp continue to be tested with
the same options they've been using.

OK for mainline?

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

        * lib/profopt.exp: Make prof_option_list local to profopt-execute.
        * g++.dg/tree-prof/tree-prof.exp (PROFOPT_OPTIONS): Define after
        including profopt.opt; save and restore existing value.
        * g++.dg/bprob/bprob.exp: Likewise.
        * gcc.dg/matrix/matrix.exp: Likewise.
        * gcc.dg/tree-prof/tree-prof.exp: Likewise.
        * gcc.misc-tests/bprob.exp: Likewise; also replace formerly-ignored
        PROFOPT_OPTIONS.

Index: lib/profopt.exp
===================================================================
--- lib/profopt.exp     (revision 188753)
+++ lib/profopt.exp     (working copy)
@@ -64,8 +64,6 @@
        { -Os } ]
 }
 
-set prof_option_list $PROFOPT_OPTIONS
-
 #
 # profopt-cleanup -- remove profiling or performance results files.
 #
@@ -215,7 +213,7 @@
 #
 proc profopt-execute { src } {
     global srcdir tmpdir
-    global prof_option_list
+    global PROFOPT_OPTIONS
     global tool profile_option feedback_option prof_ext perf_ext perf_delta
     global generate_final_code use_final_code
     global verbose
@@ -227,6 +225,12 @@
         error "No feedback option specified for second compile."
     }
 
+    # Use the default option list or one defined for a set of tests.
+    if ![info exists PROFOPT_OPTIONS] {
+         error "PROFOPT_OPTIONS is not defined"
+    }
+    set prof_option_list $PROFOPT_OPTIONS
+
     regsub "(?q)$srcdir/" $src "" testcase
     # If we couldn't rip $srcdir out of `src' then just do the best we can.
     # The point is to reduce the unnecessary noise in the logs.  Don't strip
Index: g++.dg/tree-prof/tree-prof.exp
===================================================================
--- g++.dg/tree-prof/tree-prof.exp      (revision 188753)
+++ g++.dg/tree-prof/tree-prof.exp      (working copy)
@@ -29,9 +29,6 @@
 set tool g++
 set prof_ext "gcda"
 
-# Override the list defined in profopt.exp.
-set PROFOPT_OPTIONS [list {}]
-
 if $tracelevel then {
     strace $tracelevel
 }
@@ -39,6 +36,10 @@
 # Load support procs.
 load_lib profopt.exp
 
+# Save and override the default list defined in profopt.exp.
+set treeprof_save_profopt_options $PROFOPT_OPTIONS
+set PROFOPT_OPTIONS [list {}]
+
 # These are globals used by profopt-execute.  The first is options
 # needed to generate profile data, the second is options to use the
 # profile data.
@@ -52,3 +53,5 @@
     }
     profopt-execute $src
 }
+
+set PROFOPT_OPTIONS $treeprof_save_profopt_options
Index: g++.dg/bprob/bprob.exp
===================================================================
--- g++.dg/bprob/bprob.exp      (revision 188753)
+++ g++.dg/bprob/bprob.exp      (working copy)
@@ -33,7 +33,11 @@
     strace $tracelevel
 }
 
-# Override the list defined in profopt.exp.
+# Load support procs.
+load_lib profopt.exp
+
+# Save and override the default list defined in profopt.exp.
+set bprob_save_profopt_options $PROFOPT_OPTIONS
 set PROFOPT_OPTIONS [list \
        { -g } \
        { -O0 } \
@@ -47,9 +51,6 @@
     strace $tracelevel
 }
 
-# Load support procs.
-load_lib profopt.exp
-
 set profile_options "-fprofile-arcs"
 set feedback_options "-fbranch-probabilities"
 
@@ -63,3 +64,5 @@
         profopt-execute $src
     }
 }
+
+set PROFOPT_OPTIONS $bprob_save_profopt_options
Index: gcc.dg/matrix/matrix.exp
===================================================================
--- gcc.dg/matrix/matrix.exp    (revision 188753)
+++ gcc.dg/matrix/matrix.exp    (working copy)
@@ -39,9 +39,6 @@
 set tool gcc
 set prof_ext "gcda"
 
-# Override the list defined in profopt.exp.
-set PROFOPT_OPTIONS [list {}]
-
 if $tracelevel then {
     strace $tracelevel
 }
@@ -49,6 +46,10 @@
 # Load support procs.
 load_lib profopt.exp
 
+# Save and override the default list defined in profopt.exp.
+set matrix_save_profopt_options $PROFOPT_OPTIONS
+set PROFOPT_OPTIONS [list {}]
+
 # These are globals used by profopt-execute.  The first is options
 # needed to generate profile data, the second is options to use the
 # profile data.
@@ -63,3 +64,4 @@
     profopt-execute $src
 }
 
+set PROFOPT_OPTIONS $matrix_save_profopt_options
Index: gcc.dg/tree-prof/tree-prof.exp
===================================================================
--- gcc.dg/tree-prof/tree-prof.exp      (revision 188753)
+++ gcc.dg/tree-prof/tree-prof.exp      (working copy)
@@ -29,9 +29,6 @@
 set tool gcc
 set prof_ext "gcda"
 
-# Override the list defined in profopt.exp.
-set PROFOPT_OPTIONS [list {}]
-
 if $tracelevel then {
     strace $tracelevel
 }
@@ -39,6 +36,10 @@
 # Load support procs.
 load_lib profopt.exp
 
+# Save and override the default list defined in profopt.exp.
+set treeprof_save_profopt_options $PROFOPT_OPTIONS
+set PROFOPT_OPTIONS [list {}]
+
 # These are globals used by profopt-execute.  The first is options
 # needed to generate profile data, the second is options to use the
 # profile data.
@@ -52,3 +53,5 @@
     }
     profopt-execute $src
 }
+
+set PROFOPT_OPTIONS $treeprof_save_profopt_options
Index: gcc.misc-tests/bprob.exp
===================================================================
--- gcc.misc-tests/bprob.exp    (revision 188753)
+++ gcc.misc-tests/bprob.exp    (working copy)
@@ -30,16 +30,6 @@
 set prof_ext "gcda"
 set perf_ext tim
 
-# Override the list defined in profopt.exp.
-set PROFOPT_OPTIONS [list \
-       { -g } \
-       { -O0 } \
-       { -O1 } \
-       { -O2 -DPERFTIME } \
-       { -O3 -DPERFTIME } \
-       { -O3 -g -DPERFTIME } \
-       { -Os } ]
-
 if $tracelevel then {
     strace $tracelevel
 }
@@ -47,6 +37,10 @@
 # Load support procs.
 load_lib profopt.exp
 
+# Save and override the default list defined in profopt.exp.
+set bprob_save_profopt_options $PROFOPT_OPTIONS
+set PROFOPT_OPTIONS [list { -O2 } { -O3  }]
+
 set profile_options "-fprofile-arcs"
 set feedback_options "-fbranch-probabilities"
 
@@ -59,3 +53,5 @@
         profopt-execute $src
     }
 }
+
+set PROFOPT_OPTIONS $bprob_save_profopt_options

Reply via email to