From 31589ec6098edcb255d5876f22202e8b8429e745 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 23 Nov 2004 14:03:31 -0800 Subject: [PATCH] pr18425.c: Use effective target vect_long. * gcc.dg/vect/pr18425.c: Use effective target vect_long. * gcc.dg/vect/vect-13.c, gcc.dg/vect/vect-17.c, gcc.dg/vect/vect-18.c, gcc.dg/vect/vect-19.c, gcc.dg/vect/vect-20.c, gcc.dg/vect/vect-48a.c, gcc.dg/vect/vect-56a.c, gcc.dg/vect/vect-7.c, gcc.dg/vect/vect-77.c, gcc.dg/vect/vect-77a.c, gcc.dg/vect/vect-78.c, gcc.dg/vect/vect-86.c, gcc.dg/vect/vect-87.c, gcc.dg/vect/vect-88.c: XFAIL for alpha. * gcc.dg/vect/vect.exp: Add check for alpha. * lib/target-supports.exp (check_alpha_max_hw_available): New. (check_effective_target_vect_int): Enable for alpha. (check_effective_target_vect_long): New. (is-effective-target): Add it. From-SVN: r91105 --- gcc/testsuite/ChangeLog | 15 ++++++++ gcc/testsuite/gcc.dg/vect/pr18425.c | 10 ++---- gcc/testsuite/gcc.dg/vect/vect-13.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-17.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-18.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-19.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-20.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-48a.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-56a.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-7.c | 3 +- gcc/testsuite/gcc.dg/vect/vect-77.c | 3 +- gcc/testsuite/gcc.dg/vect/vect-77a.c | 3 +- gcc/testsuite/gcc.dg/vect/vect-78.c | 4 +-- gcc/testsuite/gcc.dg/vect/vect-86.c | 3 +- gcc/testsuite/gcc.dg/vect/vect-87.c | 3 +- gcc/testsuite/gcc.dg/vect/vect-88.c | 3 +- gcc/testsuite/gcc.dg/vect/vect.exp | 7 ++++ gcc/testsuite/lib/target-supports.exp | 67 ++++++++++++++++++++++++++++++++++- 18 files changed, 109 insertions(+), 26 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 91a04a8..b395dd0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2004-11-23 Richard Henderson + + * gcc.dg/vect/pr18425.c: Use effective target vect_long. + * gcc.dg/vect/vect-13.c, gcc.dg/vect/vect-17.c, gcc.dg/vect/vect-18.c, + gcc.dg/vect/vect-19.c, gcc.dg/vect/vect-20.c, gcc.dg/vect/vect-48a.c, + gcc.dg/vect/vect-56a.c, gcc.dg/vect/vect-7.c, gcc.dg/vect/vect-77.c, + gcc.dg/vect/vect-77a.c, gcc.dg/vect/vect-78.c, gcc.dg/vect/vect-86.c, + gcc.dg/vect/vect-87.c, gcc.dg/vect/vect-88.c: XFAIL for alpha. + + * gcc.dg/vect/vect.exp: Add check for alpha. + * lib/target-supports.exp (check_alpha_max_hw_available): New. + (check_effective_target_vect_int): Enable for alpha. + (check_effective_target_vect_long): New. + (is-effective-target): Add it. + 2004-11-23 Uros Bizjak * gcc.dg/pr18614-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/vect/pr18425.c b/gcc/testsuite/gcc.dg/vect/pr18425.c index 758182a..2fa1b79 100644 --- a/gcc/testsuite/gcc.dg/vect/pr18425.c +++ b/gcc/testsuite/gcc.dg/vect/pr18425.c @@ -1,10 +1,7 @@ /* { dg-do compile } */ -/* { dg-require-effective-target vect_int } */ - -#include -#include "tree-vect.h" - -#define N 16 +/* ??? Using "long" isn't quite right; we're testing vectors of pointers here. + But since no extant target supports sizeof(long) != sizeof(void*)... */ +/* { dg-require-effective-target vect_long } */ char ** _M_allocate(); void @@ -16,5 +13,4 @@ _M_fill_insert(unsigned int __n) *__new_start = __tmp; } - /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-13.c b/gcc/testsuite/gcc.dg/vect/vect-13.c index 38a489c..9404827 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-13.c +++ b/gcc/testsuite/gcc.dg/vect/vect-13.c @@ -38,4 +38,4 @@ int main (void) /* These fail to vectorize on targets that don't have or model a vector max operation. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail i?86-*-* x86_64-*-* sparc*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail i?86-*-* x86_64-*-* sparc*-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-17.c b/gcc/testsuite/gcc.dg/vect/vect-17.c index e28d21c..50f1133 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-17.c +++ b/gcc/testsuite/gcc.dg/vect/vect-17.c @@ -126,4 +126,4 @@ int main (void) /* These fail to vectorize on targets that don't have or model vector bitwise operations. */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-*} } } */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-18.c b/gcc/testsuite/gcc.dg/vect/vect-18.c index 62f39d4..991deb4 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-18.c +++ b/gcc/testsuite/gcc.dg/vect/vect-18.c @@ -125,4 +125,4 @@ int main (void) /* These fail to vectorize on targets that don't have or model vector bitwise operations. */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-*} } } */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-19.c b/gcc/testsuite/gcc.dg/vect/vect-19.c index b323115..49c8a5c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-19.c +++ b/gcc/testsuite/gcc.dg/vect/vect-19.c @@ -125,4 +125,4 @@ int main (void) /* These fail to vectorize on targets that don't have or model vector bitwise operations. */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-*} } } */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-20.c b/gcc/testsuite/gcc.dg/vect/vect-20.c index 1f98606..e2674af 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-20.c +++ b/gcc/testsuite/gcc.dg/vect/vect-20.c @@ -97,4 +97,4 @@ int main (void) /* These fail to vectorize on targets that don't have or model vector bitwise operations. */ -/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-*} } } */ +/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {xfail i?86-*-* x86_64-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-48a.c b/gcc/testsuite/gcc.dg/vect/vect-48a.c index 5fcb17c..401da6c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-48a.c +++ b/gcc/testsuite/gcc.dg/vect/vect-48a.c @@ -53,4 +53,4 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-56a.c b/gcc/testsuite/gcc.dg/vect/vect-56a.c index eba1821..1cd117e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-56a.c +++ b/gcc/testsuite/gcc.dg/vect/vect-56a.c @@ -51,4 +51,4 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-7.c b/gcc/testsuite/gcc.dg/vect/vect-7.c index 4d33bad..ae751cb 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-7.c +++ b/gcc/testsuite/gcc.dg/vect/vect-7.c @@ -45,4 +45,5 @@ int main (void) return main1 (); } -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */ +/* Fails for targets that don't vectorize PLUS. */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-77.c b/gcc/testsuite/gcc.dg/vect/vect-77.c index 9bd431b..a49a284 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-77.c +++ b/gcc/testsuite/gcc.dg/vect/vect-77.c @@ -41,5 +41,4 @@ int main (void) /* These are not yet vectorized on targets that do not model alignment-handling mechanisms. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail i?86-*-* x86_64-*-* sparc*-*-* } } } */ - +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail i?86-*-* x86_64-*-* sparc*-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-77a.c b/gcc/testsuite/gcc.dg/vect/vect-77a.c index 5d8b7d0..5e10d28c9 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-77a.c +++ b/gcc/testsuite/gcc.dg/vect/vect-77a.c @@ -43,5 +43,4 @@ int main (void) /* This fails to vectorize for 64-bit powerpc but there's no way to specify that in an xfail list. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* } } } */ - +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail sparc*-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-78.c b/gcc/testsuite/gcc.dg/vect/vect-78.c index 35be16d..3a0bb38 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-78.c +++ b/gcc/testsuite/gcc.dg/vect/vect-78.c @@ -40,6 +40,4 @@ int main (void) return 0; } - -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail i?86-*-* x86_64-*-* sparc*-*-* } } } */ - +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail i?86-*-* x86_64-*-* sparc*-*-* alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-86.c b/gcc/testsuite/gcc.dg/vect/vect-86.c index 9caa887..e90349d 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-86.c +++ b/gcc/testsuite/gcc.dg/vect/vect-86.c @@ -45,4 +45,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* Fails for targets that don't vectorize PLUS. */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-87.c b/gcc/testsuite/gcc.dg/vect/vect-87.c index 546178f..afc8a9e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-87.c +++ b/gcc/testsuite/gcc.dg/vect/vect-87.c @@ -49,4 +49,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* Fails for targets that don't vectorize PLUS. */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-88.c b/gcc/testsuite/gcc.dg/vect/vect-88.c index 59984ea..d492eac 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-88.c +++ b/gcc/testsuite/gcc.dg/vect/vect-88.c @@ -49,4 +49,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* Fails for targets that don't vectorize PLUS. */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail alpha*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index 03281c8..a3aa89a 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -58,6 +58,13 @@ if [istarget "powerpc*-*-*"] { } elseif [istarget "sparc*-*-*"] { lappend DEFAULT_VECTCFLAGS "-mcpu=ultrasparc" "-mvis" set dg-do-what-default run +} elseif [istarget "alpha*-*-*"] { + lappend DEFAULT_VECTCFLAGS "-mmax" + if [check_alpha_max_hw_available] { + set dg-do-what-default run + } else { + set dg-do-what-default compile + } } else { return } diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index e26cd36..4ea6e3f 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -368,6 +368,46 @@ proc check_vmx_hw_available { } { return $vmx_hw_available_saved } +proc check_alpha_max_hw_available { } { + global alpha_max_hw_available_saved + global tool + + if [info exists alpha_max_hw_available_saved] { + verbose "check_alpha_max_hw_available returning saved $alpha_max_hw_available_saved" 2 + } else { + set alpha_max_hw_available_saved 0 + + # Set up, compile, and execute a test program probing bit 8 of the + # architecture mask, which indicates presence of MAX instructions. + set src max[pid].c + set exe max[pid].x + + set f [open $src "w"] + puts $f "int main() { return __builtin_alpha_amask(1<<8) != 0; }" + close $f + + verbose "check_alpha_max_hw_available compiling testfile $src" 2 + set lines [${tool}_target_compile $src $exe executable ""] + file delete $src + + if [string match "" $lines] then { + # No error message, compilation succeeded. + set result [${tool}_load "./$exe" "" ""] + set status [lindex $result 0] + remote_file build delete $exe + verbose "check_alpha_max_hw_available testfile status is <$status>" 2 + + if { $status == "pass" } then { + set alpha_max_hw_available_saved 1 + } + } else { + verbose "check_alpha_max_hw_availalble testfile compilation failed" 2 + } + } + + return $alpha_max_hw_available_saved +} + # Return 1 if we're generating 32-bit code using default options, 0 # otherwise. @@ -406,7 +446,8 @@ proc check_effective_target_vect_int { } { if { [istarget i?86-*-*] || [istarget powerpc*-*-*] || [istarget x86_64-*-*] - || [istarget sparc*-*-*] } { + || [istarget sparc*-*-*] + || [istarget alpha*-*-*] } { set et_vect_int_saved 1 } } @@ -415,6 +456,29 @@ proc check_effective_target_vect_int { } { return $et_vect_int_saved } +# Return 1 if the target supports hardware vectors of long, 0 otherwise. +# +# This won't change for different subtargets so cache the result. + +proc check_effective_target_vect_long { } { + global et_vect_long_saved + + if [info exists et_vect_long_saved] { + verbose "check_effective_target_vect_long: using cached result" 2 + } else { + set et_vect_long_saved 0 + if { [istarget i?86-*-*] + || [istarget powerpc*-*-*] + || [istarget x86_64-*-*] + || ([istarget sparc*-*-*] && [check_effective_target_ilp32]) } { + set et_vect_long_saved 1 + } + } + + verbose "check_effective_target_vect_long: returning $et_vect_long_saved" 2 + return $et_vect_long_saved +} + # Return 1 if the target supports hardware vectors of float, 0 otherwise. # # This won't change for different subtargets so cache the result. @@ -473,6 +537,7 @@ proc is-effective-target { arg } { "named_sections" { set selected [check_named_sections_available] } "gc_sections" { set selected [check_gc_sections_available] } "vect_int" { set selected [check_effective_target_vect_int] } + "vect_long" { set selected [check_effective_target_vect_long] } "vect_float" { set selected [check_effective_target_vect_float] } "vect_double" { set selected [check_effective_target_vect_double] } default { error "unknown effective target selector `$arg'" } -- 2.7.4