#   Copyright (C) 2001, 2002, 2004, 2007, 2008 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# Test the functionality of programs compiled with profile-directed block
# ordering using -fprofile-arcs followed by -fbranch-probabilities.

load_lib target-supports.exp

# Some targets don't have any implementation of __bb_init_func or are
# missing other needed machinery.
if { ![check_profiling_available "-fprofile-arcs"] } {
    return
}

# The procedures in profopt.exp need these parameters.
set tool gcc
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
}

# Load support procs.
load_lib profopt.exp

set profile_options "-fprofile-arcs"
set feedback_options "-fprofile-use"

foreach profile_option $profile_options feedback_option $feedback_options {
    foreach src [lsort [glob -nocomplain $srcdir/$subdir/bprob-*.c]] {
        # If we're only testing specific files and this isn't one of them, skip it.
        if ![runtest_file_p $runtests $src] then {
            continue
        }
        profopt-execute $src
    }
}
