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 91a04a8..b395dd0 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 758182a..2fa1b79 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 38a489c..9404827 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 e28d21c..50f1133 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 62f39d4..991deb4 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 b323115..49c8a5c 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 1f98606..e2674af 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 5fcb17c..401da6c 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 eba1821..1cd117e 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 4d33bad..ae751cb 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 9bd431b..a49a284 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 5d8b7d0..5e10d28 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 35be16d..3a0bb38 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 9caa887..e90349d 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 546178f..afc8a9e 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 59984ea..d492eac 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 03281c8..a3aa89a 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 e26cd36..4ea6e3f 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'" }