#  Specific regression driver for AArch64 SVE2.
#  Copyright (C) 2009-2022 Free Software Foundation, Inc.
#  Contributed by ARM Ltd.
#
#  This file is part of GCC.
#
#  GCC 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, or (at your option)
#  any later version.
#
#  GCC 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/>.  */

# GCC testsuite that uses the `dg.exp' driver.

# Exit immediately if this isn't an AArch64 target.
if {![istarget aarch64*-*-*] } then {
  return
}

# Load support procs.
load_lib gcc-dg.exp

# Initialize `dg'.
dg-init

# Force SVE2 if we're not testing it already.
if { [check_effective_target_aarch64_sve2] } {
    set sve2_flags ""
} else {
    set sve2_flags "-march=armv8.5-a+sve2"
}

aarch64-with-arch-dg-options $sve2_flags {
    # Main loop.
    dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
	"" $sve2_flags
}

# All done.
dg-finish
