| # Specific regression driver for nvptx. |
| # Copyright (C) 2015-2022 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/>. |
| |
| # GCC testsuite that uses the `dg.exp' driver. |
| |
| # Exit immediately if this isn't a nvptx target. |
| if ![istarget nvptx*-*-*] then { |
| return |
| } |
| |
| # Load support procs. |
| load_lib gcc-dg.exp |
| |
| # Return 1 if code by default compiles for at least PTX ISA version |
| # major.minor. |
| proc check_effective_target_default_ptx_isa_version_at_least { major minor } { |
| set name default_ptx_isa_version_at_least_${major}_${minor} |
| |
| set supported_p \ |
| [concat \ |
| "((__PTX_ISA_VERSION_MAJOR__ == $major" \ |
| " && __PTX_ISA_VERSION_MINOR__ >= $minor)" \ |
| " || (__PTX_ISA_VERSION_MAJOR__ > $major))"] |
| |
| set src \ |
| [list \ |
| "#if $supported_p" \ |
| "#else" \ |
| "#error unsupported" \ |
| "#endif"] |
| set src [join $src "\n"] |
| |
| set res [check_no_compiler_messages $name assembly $src ""] |
| |
| return $res |
| } |
| |
| # Return 1 if code with PTX ISA version major.minor or higher can be run. |
| proc check_effective_target_runtime_ptx_isa_version_at_least { major minor } { |
| set name runtime_ptx_isa_version_${major}_${minor} |
| |
| set default \ |
| [check_effective_target_default_ptx_isa_version_at_least \ |
| ${major} ${minor}] |
| |
| if { $default } { |
| set flag "" |
| } else { |
| set flag "-mptx=$major.$minor" |
| } |
| |
| set res [check_runtime $name { |
| int main (void) { return 0; } |
| } $flag] |
| |
| return $res |
| } |
| |
| # Return 1 if runtime environment support the PTX ISA directive .alias. |
| proc check_effective_target_runtime_ptx_alias { } { |
| return [check_effective_target_runtime_ptx_isa_version_at_least 6 3] |
| } |
| |
| # Add options to enable using PTX ISA directive .alias. |
| proc add_options_for_ptx_alias { flags } { |
| append flags " -malias" |
| |
| if { ![check_effective_target_default_ptx_isa_version_at_least 6 3] } { |
| append flags " -mptx=6.3" |
| } |
| |
| return $flags |
| } |
| |
| # If a testcase doesn't have special options, use these. |
| global DEFAULT_CFLAGS |
| if ![info exists DEFAULT_CFLAGS] then { |
| set DEFAULT_CFLAGS " -ansi -pedantic-errors" |
| } |
| |
| # Initialize `dg'. |
| dg-init |
| |
| # Main loop. |
| dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ |
| "" $DEFAULT_CFLAGS |
| |
| # All done. |
| dg-finish |