#   Copyright (C) 2009-2026 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/>.

load_lib libgomp-dg.exp
load_gcc_lib gcc-dg.exp

if ![check_effective_target_pthread] {
  return
}

if ![check_effective_target_fgraphite] {
  return
}

lappend ALWAYS_CFLAGS "compiler=$GCC_UNDER_TEST"
# Flags for force-parallel-*.c testcases.
set PARALLEL_CFLAGS "-ansi -pedantic-errors -O2 \
-ftree-parallelize-loops=4 -floop-parallelize-all \
-fdump-tree-parloops-details -fdump-tree-optimized \
-fno-loop-strip-mine -fno-loop-block -fdump-tree-graphite-all"

# Initialize `dg'.
dg-init

# Turn on OpenMP.
lappend ALWAYS_CFLAGS "additional_flags=-fopenmp"

# Gather a list of all tests.
set tests [lsort [find $srcdir/$subdir *.c]]

set ld_library_path $always_ld_library_path
append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
set_ld_library_path_env_vars

# Run the tests
dg-runtest $tests "" $PARALLEL_CFLAGS

# All done.
dg-finish
