aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/vect/vect.exp
blob: 65a0235af12fa4ecd21fee38b21a2b846fe23f75 (plain)
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
137
138
139
140
141
142
143
144
145
146
# Copyright (C) 2004, 2007, 2008, 2010 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.

# There's a bunch of headers we need.
if [is_remote host] {
    foreach header [glob -nocomplain $srcdir/$subdir/*.{h,def} ] {
        remote_download host $header
    }
}

# Load support procs.
load_lib g++-dg.exp
load_lib target-supports.exp

# If the target system supports vector instructions, the default action
# for a test is 'run', otherwise it's 'compile'.  Save current default.
# Executing vector instructions on a system without hardware vector support
# is also disabled by a call to check_vect, but disabling execution here is
# more efficient.
global dg-do-what-default
set save-dg-do-what-default ${dg-do-what-default}

# Set up flags used for tests that don't specify options.
set DEFAULT_VECTCFLAGS ""

# These flags are used for all targets.
lappend DEFAULT_VECTCFLAGS "-O2" "-ftree-vectorize" "-fno-vect-cost-model" \
  "-ftree-vectorizer-verbose=4" "-fdump-tree-vect-stats"

# Skip these tests for targets that do not support generating vector
# code.  Set additional target-dependent vector flags, which can be
# overridden by using dg-options in individual tests.
if  [istarget "powerpc-*paired*"]  {
   lappend DEFAULT_VECTCFLAGS "-mpaired"
    if [check_750cl_hw_available] {
        set dg-do-what-default run 
    } else {
        set dg-do-what-default compile
    }
} elseif [istarget "powerpc*-*-*"] {
    # Skip targets not supporting -maltivec.
    if ![is-effective-target powerpc_altivec_ok] {
	return
    }

    lappend DEFAULT_VECTCFLAGS "-maltivec"
    if [check_vsx_hw_available]  {
      lappend DEFAULT_VECTCFLAGS "-mvsx" "-mno-allow-movmisalign"
    }

    if [check_vmx_hw_available] {
	set dg-do-what-default run
    } else {
	if [is-effective-target ilp32] {
	    # Specify a cpu that supports VMX for compile-only tests.
	    lappend DEFAULT_VECTCFLAGS "-mcpu=970"
	}
	set dg-do-what-default compile
    }
} elseif { [istarget  "spu-*-*"] } {
   set dg-do-what-default run
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
    if { ![check_effective_target_sse2] } then {
	return
    }
    lappend DEFAULT_VECTCFLAGS "-msse2"
    if [check_sse2_hw_available] {
	set dg-do-what-default run
    } else {
	set dg-do-what-default compile
    }
} elseif { [istarget "mips*-*-*"]
	   && [check_effective_target_mpaired_single]
	   && [check_effective_target_nomips16] } {
    lappend DEFAULT_VECTCFLAGS "-mpaired-single"
    set dg-do-what-default run
} elseif [istarget "sparc*-*-*"] {
    lappend DEFAULT_VECTCFLAGS "-mcpu=ultrasparc" "-mvis"
    if [check_effective_target_ultrasparc_hw] {
	set dg-do-what-default run
    } else {
	set dg-do-what-default compile
    }
} elseif [istarget "alpha*-*-*"] {
    # Alpha's vectorization capabilities are extremely limited.
    # It's more effort than its worth disabling all of the tests
    # that it cannot pass.  But if you actually want to see what
    # does work, command out the return.
    return

    lappend DEFAULT_VECTCFLAGS "-mmax"
    if [check_alpha_max_hw_available] {
	set dg-do-what-default run
    } else {
	set dg-do-what-default compile
    }
} elseif [istarget "ia64-*-*"] {
    set dg-do-what-default run
} elseif [is-effective-target arm_neon_ok] {
    lappend DEFAULT_VECTCFLAGS "-mfpu=neon" "-mfloat-abi=softfp"
    if [is-effective-target arm_neon_hw] {
      set dg-do-what-default run
    } else {
      set dg-do-what-default compile
    }
} else {
    return
}

# Initialize `dg'.
dg-init

# Main loop.
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{c,cc,S} ]] \
        "" $DEFAULT_VECTCFLAGS

#### Tests with special options
global SAVED_DEFAULT_VECTCFLAGS
set SAVED_DEFAULT_VECTCFLAGS $DEFAULT_VECTCFLAGS
    
# --param max-aliased-vops=0
set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS
lappend DEFAULT_VECTCFLAGS "--param max-aliased-vops=0"
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/param-max-aliased*.\[cS\]]]  \
        "" $DEFAULT_VECTCFLAGS 

# Clean up.
set dg-do-what-default ${save-dg-do-what-default} 

# All done.
dg-finish