Re: [PATCH 3/5] Run profile feedback tests with autofdo
On Sat, May 21, 2016 at 10:55:21PM +0200, Bernhard Reutner-Fischer wrote: > >@@ -313,6 +332,7 @@ proc profopt-execute { src } { > > # valid, by running it after dg-additional-files-options. > > foreach ext $prof_ext { > > profopt-target-cleanup $tmpdir $base $ext > >+profopt-target-cleanup $tmpdir perf data > > } > > I think I've asked this before.. Why do you need to run cleanup of perf data > in this loop (and not outside)? > Also why the asymmetry ... perf generates a backup file if a file already exists. > >@@ -399,7 +460,9 @@ proc profopt-execute { src } { > > # Remove the profiling data files. > > foreach ext $prof_ext { > > profopt-target-cleanup $tmpdir $base $ext > >+profopt-target-cleanup $tmpdir perf data > > } > >+file delete "perf.data" The extra one is not needed. I'll remove it. Thanks -Andi -- a...@linux.intel.com -- Speaking for myself only.
Re: [PATCH 3/5] Run profile feedback tests with autofdo
On May 21, 2016 6:36:24 PM GMT+02:00, Andi Kleenwrote: >From: Andi Kleen >diff --git a/gcc/testsuite/lib/profopt.exp >b/gcc/testsuite/lib/profopt.exp >index 0aea6c4..4ddb10a 100644 >--- a/gcc/testsuite/lib/profopt.exp >+++ b/gcc/testsuite/lib/profopt.exp >@@ -36,7 +36,7 @@ load_lib gcc-dg.exp > global PROFOPT_OPTIONS perf_delta > > # The including .exp file must define these. >-global tool profile_option feedback_option prof_ext >+global tool profile_option feedback_option prof_ext profile_wrapper > if ![info exists tool] { > error "Tools is not specified." > } >@@ -229,6 +229,18 @@ proc profopt-get-options { src } { > return ${dg-extra-tool-flags} > } > >+# auto-profopt-execute -- Compile for auot profiling and then >feedback, then normal. s/auot/auto/ >+# SRC is the full path name of the testcase. >+proc auto-profopt-execute { src } { >+set profile_wrapper [profopt-perf-wrapper] >+set profile_options "-g" >+set feedback_options "-fauto-profile" >+set run_autofdo 1 >+profopt-execute $src >+set run_autofdo "" >+set profile_wrapper "" >+} >+ > # ># c-prof-execute -- compile for profiling and then feedback, then >normal > # >@@ -238,6 +250,7 @@ proc profopt-execute { src } { > global srcdir tmpdir > global PROFOPT_OPTIONS >global tool profile_option feedback_option prof_ext perf_ext perf_delta >+global profile_wrapper run_autofdo ld_library_path > global generate_final_code use_final_code > global verbose > global testname_with_flags >@@ -248,6 +261,12 @@ proc profopt-execute { src } { > if ![info exists feedback_option] { > error "No feedback option specified for second compile." > } >+if ![info exists profile_wrapper] { >+ set profile_wrapper "" >+} >+if ![info exists run_autofdo] { >+ set run_autofdo "" >+} > > # Use the default option list or one defined for a set of tests. > if ![info exists PROFOPT_OPTIONS] { >@@ -313,6 +332,7 @@ proc profopt-execute { src } { > # valid, by running it after dg-additional-files-options. > foreach ext $prof_ext { > profopt-target-cleanup $tmpdir $base $ext >+ profopt-target-cleanup $tmpdir perf data > } I think I've asked this before.. Why do you need to run cleanup of perf data in this loop (and not outside)? Also why the asymmetry ... > # Tree profiling requires TLS runtime support, which may need >@@ -335,12 +355,49 @@ proc profopt-execute { src } { > } > > # Run the profiled test. >+ if { $run_autofdo == 1 } { >+ if { ![info exists ld_library_path]} { >+ set ld_library_path "" >+ } >+ set orig_ld_library_path "[getenv LD_LIBRARY_PATH]" >+ setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" >+ verbose "Running $profile_wrapper $execname1" >+ set id [remote_spawn "" "$profile_wrapper $execname1" "readonly"] >+ setenv LD_LIBRARY_PATH $orig_ld_library_path >+ if { $id < 0 } { >+ warning "Failed to run profiler" >+ set status "fail" >+ } else { >+ set result [remote_wait "" 300] >+ set status [lindex $result 0] >+ verbose "perf result $result" >+ if { $status == 0 } { >+ set status "pass" >+ } else { >+ set status "fail" >+ } >+ } >+ } else { >+ set result [${tool}_load $execname1 "" ""] >+ set status [lindex $result 0] >+ } > >- set result [${tool}_load $execname1 "" ""] >- set status [lindex $result 0] > set missing_file 0 > # Make sure the profile data was generated, and fail if not. > if { $status == "pass" } { >+ # convert profile >+ if { $run_autofdo == 1 } { >+ set cmd "create_gcov --binary $execname1 --profile=perf.data >-gcov_version=1 --gcov=$tmpdir/$base.$ext" >+ verbose "Running $cmd" >+ set id [remote_spawn "" $cmd] >+ if { $id < 0 } { >+ set status "fail" >+ fail "$testcase: Cannot run $cmd" >+ } >+ set status [remote_wait "" 300] >+ set status "pass" >+ } >+ > foreach ext $prof_ext { > remote_upload target $tmpdir/$base.$ext > set files [glob -nocomplain $base.$ext] >@@ -375,6 +432,10 @@ proc profopt-execute { src } { > set options "$extra_options" > lappend options "additional_flags=$option $extra_flags >$feedback_option" > set optstr "$option $feedback_option" >+ if { [string first "-fauto-profile" $options] >= 0} { >+ set options [regsub -- "-fauto-profile" $options >"-fauto-profile=$tmpdir/$base.$ext"] >+ } >+ > set comp_output [${tool}_target_compile "$src" "$execname2" >"executable" $options] >
[PATCH 3/5] Run profile feedback tests with autofdo
From: Andi KleenExtend the existing bprob and tree-prof tests to also run with autofdo. The test runtimes are really a bit too short for autofdo, but it's a reasonable sanity check. This only works natively for now. dejagnu doesn't seem to support a wrapper for unix tests, so I had to open code running these tests. That should be ok due to the native run restrictions. gcc/testsuite/: 2016-05-21 Andi Kleen * g++.dg/bprob/bprob.exp: Support autofdo. * g++.dg/tree-prof/tree-prof.exp: dito. * gcc.dg/tree-prof/tree-prof.exp: dito. * gcc.misc-tests/bprob.exp: dito. * gfortran.dg/prof/prof.exp: dito. * lib/profopt.exp: dito. * lib/target-supports.exp: Check for autofdo. --- gcc/testsuite/g++.dg/bprob/bprob.exp | 10 gcc/testsuite/g++.dg/tree-prof/tree-prof.exp | 10 gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp | 10 gcc/testsuite/gcc.misc-tests/bprob.exp | 14 ++ gcc/testsuite/gfortran.dg/prof/prof.exp | 9 gcc/testsuite/lib/profopt.exp| 69 ++-- gcc/testsuite/lib/target-supports.exp| 31 + 7 files changed, 150 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/g++.dg/bprob/bprob.exp b/gcc/testsuite/g++.dg/bprob/bprob.exp index d07..e45d965 100644 --- a/gcc/testsuite/g++.dg/bprob/bprob.exp +++ b/gcc/testsuite/g++.dg/bprob/bprob.exp @@ -53,6 +53,7 @@ if $tracelevel then { set profile_options "-fprofile-arcs" set feedback_options "-fbranch-probabilities" +set profile_wrapper "" # Main loop. foreach profile_option $profile_options feedback_option $feedback_options { @@ -65,4 +66,13 @@ foreach profile_option $profile_options feedback_option $feedback_options { } } +foreach profile_option $profile_options feedback_option $feedback_options { +foreach src [lsort [glob -nocomplain $srcdir/$subdir/bprob-*.c]] { +if ![runtest_file_p $runtests $src] then { +continue +} +auto-profopt-execute $src +} +} + set PROFOPT_OPTIONS $bprob_save_profopt_options diff --git a/gcc/testsuite/g++.dg/tree-prof/tree-prof.exp b/gcc/testsuite/g++.dg/tree-prof/tree-prof.exp index 7a4b5cb..ea08602 100644 --- a/gcc/testsuite/g++.dg/tree-prof/tree-prof.exp +++ b/gcc/testsuite/g++.dg/tree-prof/tree-prof.exp @@ -44,6 +44,7 @@ set PROFOPT_OPTIONS [list {}] # profile data. set profile_option "-fprofile-generate -D_PROFILE_GENERATE" set feedback_option "-fprofile-use -D_PROFILE_USE" +set profile_wrapper "" foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.C]] { # If we're only testing specific files and this isn't one of them, skip it. @@ -53,4 +54,13 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.C]] { profopt-execute $src } +foreach profile_option $profile_options feedback_option $feedback_options { +foreach src [lsort [glob -nocomplain $srcdir/$subdir/bprob-*.c]] { +if ![runtest_file_p $runtests $src] then { +continue +} +auto-profopt-execute $src +} +} + set PROFOPT_OPTIONS $treeprof_save_profopt_options diff --git a/gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp b/gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp index 650ad8d..abf7231 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp +++ b/gcc/testsuite/gcc.dg/tree-prof/tree-prof.exp @@ -44,6 +44,7 @@ set PROFOPT_OPTIONS [list {}] # profile data. set profile_option "-fprofile-generate -D_PROFILE_GENERATE" set feedback_option "-fprofile-use -D_PROFILE_USE" +set profile_wrapper "" foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] { # If we're only testing specific files and this isn't one of them, skip it. @@ -53,4 +54,13 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] { profopt-execute $src } +foreach profile_option $profile_options feedback_option $feedback_options { +foreach src [lsort [glob -nocomplain $srcdir/$subdir/bprob-*.c]] { +if ![runtest_file_p $runtests $src] then { +continue +} +auto-profopt-execute $src +} +} + set PROFOPT_OPTIONS $treeprof_save_profopt_options diff --git a/gcc/testsuite/gcc.misc-tests/bprob.exp b/gcc/testsuite/gcc.misc-tests/bprob.exp index 52dcb1f..f43f011 100644 --- a/gcc/testsuite/gcc.misc-tests/bprob.exp +++ b/gcc/testsuite/gcc.misc-tests/bprob.exp @@ -41,6 +41,7 @@ load_lib profopt.exp set bprob_save_profopt_options $PROFOPT_OPTIONS set PROFOPT_OPTIONS [list { -O2 } { -O3 }] +set profile_wrapper "" set profile_options "-fprofile-arcs" set feedback_options "-fbranch-probabilities" @@ -54,4 +55,17 @@ foreach profile_option $profile_options feedback_option $feedback_options { } } +if { ! [check_profiling_available "-fauto-profile"] } { +set PROFOPT_OPTIONS $bprob_save_profopt_options +return +} + +foreach profile_option $profile_options feedback_option $feedback_options { +foreach