pr18425.c: Use effective target vect_long.
authorRichard Henderson <rth@redhat.com>
Tue, 23 Nov 2004 22:03:31 +0000 (14:03 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 23 Nov 2004 22:03:31 +0000 (14:03 -0800)
        * 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

18 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr18425.c
gcc/testsuite/gcc.dg/vect/vect-13.c
gcc/testsuite/gcc.dg/vect/vect-17.c
gcc/testsuite/gcc.dg/vect/vect-18.c
gcc/testsuite/gcc.dg/vect/vect-19.c
gcc/testsuite/gcc.dg/vect/vect-20.c
gcc/testsuite/gcc.dg/vect/vect-48a.c
gcc/testsuite/gcc.dg/vect/vect-56a.c
gcc/testsuite/gcc.dg/vect/vect-7.c
gcc/testsuite/gcc.dg/vect/vect-77.c
gcc/testsuite/gcc.dg/vect/vect-77a.c
gcc/testsuite/gcc.dg/vect/vect-78.c
gcc/testsuite/gcc.dg/vect/vect-86.c
gcc/testsuite/gcc.dg/vect/vect-87.c
gcc/testsuite/gcc.dg/vect/vect-88.c
gcc/testsuite/gcc.dg/vect/vect.exp
gcc/testsuite/lib/target-supports.exp

index 91a04a829f0a952ba00ec72439604c89e9d46a2d..b395dd02d5cd2caaf48b1aa31491de74db382ee6 100644 (file)
@@ -1,3 +1,18 @@
+2004-11-23  Richard Henderson  <rth@redhat.com>
+
+       * 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 <uros@kss-loka.si>
 
        * gcc.dg/pr18614-1.c: New test.
index 758182a5b82bd56dc98f91c2a38564e207377627..2fa1b799434bc04cb18025d09d1dd0390c69edbc 100644 (file)
@@ -1,10 +1,7 @@
 /* { dg-do compile } */
-/* { dg-require-effective-target vect_int } */
-
-#include <stdarg.h>
-#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" } } */
index 38a489c2894dd755097c57681e8040657a06c328..94048276ccb654dc7508938f22c8c44a7d11726c 100644 (file)
@@ -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*-*-* } } } */
index e28d21cefe531cf58fadb0ab8cd792866e5e8030..50f11331c0be36989104e3b230d443637c96ea4d 100644 (file)
@@ -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*-*-* } } } */
index 62f39d42810d1e1bf048d2ceffd1b0f0d7897620..991deb44bb4d983750c4398f6eba32c2d9302373 100644 (file)
@@ -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*-*-* } } } */
index b323115c9e2c5fa767ffb341fd127f35d5baabe8..49c8a5ce8ba5c058559e491688fb5e46f09bb870 100644 (file)
@@ -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*-*-* } } } */
index 1f98606557fd697136f3c03f839cee720cd589ec..e2674af3b00df52f91ff6c53725ad1bfb04b2b23 100644 (file)
@@ -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*-*-* } } } */
index 5fcb17c452f818be49020119435f2987368bfc6b..401da6c998a4911d0f33df73b164292cce26713c 100644 (file)
@@ -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*-*-* } } } */
index eba18213fb6072c9f8aea1822fe703d7275fd831..1cd117eb0b34e0f371bdcb122fe0242a3f48b1c1 100644 (file)
@@ -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*-*-* } } } */
index 4d33bad908b3c4e6b98ddce05b1cfb2a53b3b6ed..ae751cbd42cddb12a7dc1e20f36e1d120d824323 100644 (file)
@@ -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*-*-* } } } */
index 9bd431bf32fe67313c5fba8b0c4693de44a1f461..a49a284348e65872065401ffee7444e7b06564dc 100644 (file)
@@ -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*-*-* } } } */
index 5d8b7d0d0e326c0614065c89c81095c5e2803d12..5e10d28c97632c449ec8b9a3cfef3ec360af086c 100644 (file)
@@ -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*-*-* } } } */
index 35be16dbe282e8a4d16415a61c56fff942e4cc27..3a0bb3885bf1d51353877bf0a4136b1551372f1e 100644 (file)
@@ -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*-*-* } } } */
index 9caa887b9fc3d67a6d6e43271f6da99cbe74bd9a..e90349d74c7707c29b39e5c7ba8b98d1cc30bce6 100644 (file)
@@ -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*-*-* } } } */
index 546178f8788e25d4084a23521734ed1cbb59dc88..afc8a9ed59456df03d8df64f1f731fa6194e381f 100644 (file)
@@ -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*-*-* } } } */
index 59984eaba4263d571eceea67ae26f04d90cfb7ac..d492eacc8979bd01b2493f415783f1fd0cfae3d2 100644 (file)
@@ -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*-*-* } } } */
index 03281c8d37a2505fc4e43dc9e68fc4d38ee9bfd9..a3aa89ae5c3ce74d9b8851d4f7784e773f39148d 100644 (file)
@@ -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
 }
index e26cd362bb51b7595fbde8b4390da72131aeadba..4ea6e3f95cf395c249f86a0177e3970c6235238f 100644 (file)
@@ -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'" }