1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
# This whole file adapted from libgomp.c++/c++.exp.
load_lib libgomp-dg.exp
load_gcc_lib gcc-dg.exp
load_gcc_lib torture-options.exp
proc check_effective_target_c { } {
return 0
}
proc check_effective_target_c++ { } {
return 1
}
if { $blddir != "" } {
set libstdc++_library_path "../libstdc++-v3/src/.libs"
set shlib_ext [get_shlib_extension]
if { ![file exists "${blddir}/${libstdc++_library_path}/libstdc++.a"]
&& ![file exists "${blddir}/${libstdc++_library_path}/libstdc++.${shlib_ext}"] } {
verbose -log "No libstdc++ library found, will not execute c++ tests"
unset libstdc++_library_path
return
}
lappend lang_library_paths ${libstdc++_library_path}
} elseif { ![info exists GXX_UNDER_TEST] } {
verbose -log "GXX_UNDER_TEST not defined, will not execute c++ tests"
return
}
if { $blddir != "" } {
set lang_source_re {^.*\.[cC]$}
set lang_include_flags [exec sh ${blddir}/../libstdc++-v3/scripts/testsuite_flags --build-includes]
}
lappend ALWAYS_CFLAGS "compiler=$GXX_UNDER_TEST"
# Initialize dg.
dg-init
torture-init
# Turn on OpenACC.
lappend ALWAYS_CFLAGS "additional_flags=-fopenacc"
# Gather a list of all tests.
set tests [lsort [concat \
[find $srcdir/$subdir *.C] \
[find $srcdir/$subdir/../libgomp.oacc-c-c++-common *.c]]]
set ld_library_path $always_ld_library_path
if { $blddir != "" } {
append ld_library_path ":${blddir}/${libstdc++_library_path}"
}
append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
set_ld_library_path_env_vars
# Test with all available offload targets, and with offloading disabled.
foreach offload_target [concat [split $offload_targets ","] "disable"] {
global openacc_device_type
set openacc_device_type [offload_target_to_openacc_device_type $offload_target]
set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
switch $openacc_device_type {
"" {
unsupported "$subdir $offload_target offloading"
continue
}
host {
set acc_mem_shared 1
}
nvidia {
if { ![check_effective_target_openacc_nvidia_accel_present] } {
# Don't bother; execution testing is going to FAIL.
untested "$subdir $offload_target offloading: supported, but hardware not accessible"
continue
}
# Copy ptx file (TEMPORARY)
remote_download host $srcdir/libgomp.oacc-c-c++-common/subr.ptx
# Where timer.h lives
lappend ALWAYS_CFLAGS "additional_flags=-I${srcdir}/libgomp.oacc-c-c++-common"
set acc_mem_shared 0
}
radeon {
if { ![check_effective_target_openacc_radeon_accel_present] } {
# Don't bother; execution testing is going to FAIL.
untested "$subdir $offload_target offloading: supported, but hardware not accessible"
continue
}
set acc_mem_shared 0
}
default {
error "Unknown OpenACC device type: $openacc_device_type (offload target: $offload_target)"
}
}
set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
# To avoid compilation overhead, and to keep simple '-foffload=[...]'
# handling in test cases, by default only build for the offload target
# that we're actually going to test.
set tagopt "$tagopt -foffload=$offload_target"
# Force usage of the corresponding OpenACC device type.
setenv ACC_DEVICE_TYPE $openacc_device_type
# To get better test coverage for device-specific code that is only
# ever used in offloading configurations, we'd like more thorough
# testing for test cases that deal with offloading, which most of all
# OpenACC test cases are. We enable torture testing, but limit it to
# -O0 and -O2 only, to avoid testing times exploding too much, under
# the assumption that between -O0 and -O[something] there is the
# biggest difference in the overall structure of the generated code.
switch -glob $offload_target {
disable {
set-torture-options [list \
{ -O2 } ]
}
default {
set-torture-options [list \
{ -O0 } \
{ -O2 } ]
}
}
gcc-dg-runtest $tests "$tagopt" ""
}
unset offload_target
if { $blddir != "" } {
unset lang_source_re
unset lang_include_flags
unset libstdc++_library_path
unset lang_library_paths
}
# All done.
torture-finish
dg-finish
|