vect-28.c: Fix test to not expect peeling on !vector_alignment_reachable targets.
authorDorit Nuzman <dorit@il.ibm.com>
Tue, 7 Aug 2007 19:13:27 +0000 (19:13 +0000)
committerDorit Nuzman <dorit@gcc.gnu.org>
Tue, 7 Aug 2007 19:13:27 +0000 (19:13 +0000)
        * gcc.dg/vect/vect-28.c: Fix test to not expect peeling on
        !vector_alignment_reachable targets.
        * gcc.dg/vect/vect-33.c: Likewise.
        * gcc.dg/vect/vect-42.c: Likewise.
        * gcc.dg/vect/vect-44.c: Likewise.
        * gcc.dg/vect/vect-50.c: Likewise.
        * gcc.dg/vect/vect-70.c: Likewise.
        * gcc.dg/vect/vect-71.c: Likewise.
        * gcc.dg/vect/vect-87.c: Likewise.
        * gcc.dg/vect/vect-88.c: Likewise.
        * gcc.dg/vect/vect-91.c: Likewise.
        * gcc.dg/vect/vect-93.c: Likewise.
        * gcc.dg/vect/vect-96.c: Likewise.
        * gcc.dg/vect/no-section-anchors-69.c: Likewise.
        * gcc.dg/vect/section-anchors-69.c: Likewise.
        * gcc.dg/vect/pr25413.c: Likewise.
        * gcc.dg/vect/costmodel/ppc/costmodel-33.c: Likewise.
        * gcc.dg/vect/costmodel/ppc/costmodel-76b.c: Likewise.
        * gfortran.dg/vect-2.f90: Likewise.
        * gfortran.dg/vect-3.f90: Likewise.
        * gfortran.dg/vect-4.f90: Likewise.
        * gfortran.dg/vect-5.f90: Likewise.
        * lib/target-supports.exp (check_effective_target_natural_alignment):
        Return false for darwin.
        (check_effective_target_vector_alignment_reachable_for_double): New.

From-SVN: r127276

23 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-33.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
gcc/testsuite/gcc.dg/vect/pr25413.c
gcc/testsuite/gcc.dg/vect/section-anchors-vect-69.c
gcc/testsuite/gcc.dg/vect/vect-28.c
gcc/testsuite/gcc.dg/vect/vect-33.c
gcc/testsuite/gcc.dg/vect/vect-42.c
gcc/testsuite/gcc.dg/vect/vect-44.c
gcc/testsuite/gcc.dg/vect/vect-50.c
gcc/testsuite/gcc.dg/vect/vect-70.c
gcc/testsuite/gcc.dg/vect/vect-71.c
gcc/testsuite/gcc.dg/vect/vect-87.c
gcc/testsuite/gcc.dg/vect/vect-88.c
gcc/testsuite/gcc.dg/vect/vect-91.c
gcc/testsuite/gcc.dg/vect/vect-93.c
gcc/testsuite/gcc.dg/vect/vect-96.c
gcc/testsuite/gfortran.dg/vect/vect-2.f90
gcc/testsuite/gfortran.dg/vect/vect-3.f90
gcc/testsuite/gfortran.dg/vect/vect-4.f90
gcc/testsuite/gfortran.dg/vect/vect-5.f90
gcc/testsuite/lib/target-supports.exp

index a20a0098fd01d361c58275733450b6741a1e0ad0..48c2cf363d81ebb501f743cdd47797f714da9ea7 100644 (file)
@@ -1,3 +1,31 @@
+2007-08-07  Dorit Nuzman  <dorit@il.ibm.com>
+
+       * gcc.dg/vect/vect-28.c: Fix test to not expect peeling on 
+       !vector_alignment_reachable targets.
+       * gcc.dg/vect/vect-33.c: Likewise.
+       * gcc.dg/vect/vect-42.c: Likewise.
+       * gcc.dg/vect/vect-44.c: Likewise.
+       * gcc.dg/vect/vect-50.c: Likewise.
+       * gcc.dg/vect/vect-70.c: Likewise.
+       * gcc.dg/vect/vect-71.c: Likewise.
+       * gcc.dg/vect/vect-87.c: Likewise.
+       * gcc.dg/vect/vect-88.c: Likewise.
+       * gcc.dg/vect/vect-91.c: Likewise.
+       * gcc.dg/vect/vect-93.c: Likewise.
+       * gcc.dg/vect/vect-96.c: Likewise.
+       * gcc.dg/vect/no-section-anchors-69.c: Likewise.
+       * gcc.dg/vect/section-anchors-69.c: Likewise.
+       * gcc.dg/vect/pr25413.c: Likewise.
+       * gcc.dg/vect/costmodel/ppc/costmodel-33.c: Likewise.
+       * gcc.dg/vect/costmodel/ppc/costmodel-76b.c: Likewise.
+       * gfortran.dg/vect-2.f90: Likewise.
+       * gfortran.dg/vect-3.f90: Likewise.
+       * gfortran.dg/vect-4.f90: Likewise.
+       * gfortran.dg/vect-5.f90: Likewise.
+       * lib/target-supports.exp (check_effective_target_natural_alignment): 
+       Return false for darwin. 
+       (check_effective_target_vector_alignment_reachable_for_double): New.    
+
 2007-08-07  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * gcc.dg/multiword-1.c: New testcase.
index feaf58591300b775dbf5458cb6f38f51860e51d2..11036b0bced5b9050fbae6edf03c3481a72dd3d7 100644 (file)
@@ -35,5 +35,9 @@ int main (void)
   return main1 ();
 } 
 
-/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
+/* Peeling to align the store is used. Overhead of peeling is too high.  */
+/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" { target vector_alignment_reachable } } } */
+
+/* Versioning to align the store is used. Overhead of versioning is not too high.  */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target {! vector_alignment_reachable} } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 08b2239eb9fb940c8040727b8414ed92a7a9c6ac..8723d266f9d8b71ee25a207d1bb7e508be4a59c9 100644 (file)
@@ -42,6 +42,10 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
+/* Peeling to align the store is used. Overhead of peeling is too high.  */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" { target { vector_alignment_reachable && {! vect_no_align} } } } } */
+
+/* Versioning to align the store is used. Overhead of versioning is not too high.  */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_no_align || {! vector_alignment_reachable} } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 08ea7de124f77c44909a37c7cdd7b0e8fef63521..fd518470d6df09f6c2492b890380c3428ed2ba9d 100644 (file)
@@ -37,7 +37,7 @@ int main1 ()
 {  
   int i,j;
 
-  /* 1. unaligned */
+  /* 1. unaligned (known misalignment) */
   for (i = 0; i < N; i++)
     {
       tmp1[2].a.n[1][2][i] = 5;
@@ -82,7 +82,7 @@ int main1 ()
        }
     }
 
-  /* 4. unaligned */
+  /* 4. unaligned (unknown misalignment) */
   for (i = 0; i < N-4; i++)
     {
       for (j = 0; j < N-4; j++)
@@ -113,5 +113,7 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vector_alignment_reachable} } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {! vector_alignment_reachable} } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target {! vector_alignment_reachable} } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index e74093df15a95f47b18b51689d429f3dd4baf5c0..a4cb0b00317658ea7968a25c3158eb42f9e68d1c 100644 (file)
@@ -31,8 +31,8 @@ int main (void)
   return 0;
 } 
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vector_alignment_reachable } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vector_alignment_reachable } } } } */
-/* { dg-final { scan-tree-dump-times "vector alignment may not be reachable" 1 "vect" { target { ! vector_alignment_reachable } } } } */
-/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 1 "vect" { target { ! vector_alignment_reachable } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vector_alignment_reachable_for_double } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vector_alignment_reachable_for_double } } } } */
+/* { dg-final { scan-tree-dump-times "vector alignment may not be reachable" 1 "vect" { target { ! vector_alignment_reachable_for_double } } } } */
+/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 1 "vect" { target { ! vector_alignment_reachable_for_double } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index f33a37df027b51f3d59dd840d4769ae2ff625120..7b5ce734884fe253ca8b8246c0c7c9333a488af8 100644 (file)
@@ -115,5 +115,6 @@ int main (void)
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 /* Alignment forced using versioning until the pass that increases alignment
   is extended to handle structs.  */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 4 "vect" { target vect_int } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 4 "vect" { target {vect_int && vector_alignment_reachable } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target {vect_int && {! vector_alignment_reachable} } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 511089b17da9a06f3bec01669a25530b7b31fea2..474950d676b59fe20f55d0e6f3280c327f76fb9c 100644 (file)
@@ -39,5 +39,6 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { ! vector_alignment_reachable } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 40383cf8b78ce5634fe8a388c87311d38dadf036..3fd54fa75f1a0b67184b649b41972497e9c6ad89 100644 (file)
@@ -38,5 +38,6 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { ! vector_alignment_reachable } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index ca18bbdf28df0ae04c3d65654dbc2ed341b36860..59fe7da5578b87a36e4d7f97d49f1baa448dd9e5 100644 (file)
@@ -55,7 +55,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { vect_no_align || { ! vector_alignment_reachable } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail {vect_no_align || { ! vector_alignment_reachable } } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 78c7abd487551cf30963b55a38607d3fc1254e06..029475f43734532a39317deceb6b9eae4ce4f3a3 100644 (file)
@@ -65,6 +65,7 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {! vect_no_align} } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index aed2399046b140ddd3c9352d8fc4ffaee5ea6052..39438caf2804d922e9b8669d5db8b47544073acb 100644 (file)
@@ -61,6 +61,7 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {! vect_no_align} } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 4e209d4aecfeda494d540cae323fc19cb184e3e0..226ec12d5b042725cdad22a463d7831579702371 100644 (file)
@@ -63,5 +63,6 @@ int main (void)
           
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index d88bddea36e9bebdec16239f4f2ed22a17a750df..ac1b4d74be383fe20527a1616a5823f853a633d6 100644 (file)
@@ -5,7 +5,7 @@
 
 #define N 16
 
-/* unaligned load.  */
+/* indirect access.  */
 
 int main1 ()
 {
index 6b74a0d5109c67e769c41499152b7ea73ab739a6..f98ff1aa698a23139b75adc9403f1681b98c8c65 100644 (file)
@@ -50,5 +50,6 @@ int main (void)
 /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 478a142bfb067cad73b2dff3017ff8fc88af6f43..6c61c96c2cc425fb8dabe83c3c832782b9ccc1d5 100644 (file)
@@ -50,5 +50,6 @@ int main (void)
 /* Fails for targets that don't vectorize PLUS (e.g alpha).  */
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 6741519bcfa5dd9207a451fb098e85cd8938ea91..0eecdb42a5aa359fab91d22fa9fffc79041096d6 100644 (file)
@@ -58,7 +58,7 @@ main3 ()
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { xfail vect_no_int_add } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "accesses have the same alignment." 3 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" {target vector_alignment_reachable } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target {! vector_alignment_reachable} } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index 5c8b0d082f9c68a0c0b0ca8529c845fe996ab243..3277a7abcc34cf70c679df2f7c1e7d68a601f8a8 100644 (file)
@@ -67,12 +67,12 @@ int main (void)
 
 /* 2 loops vectorized in main1, 2 loops vectorized in main:
    the first loop in main requires vectorization of conversions,
-   the second loop in main requires vectorization of misaliged load.  */
+   the second loop in main requires vectorization of misaligned load.  */
 
 /* main && main1 together: */
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
 
 /* in main1: */
 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */
index ed463fb39dd046d46dcf36cb8f6abacd1a330b89..f186515af6801ee48672dece0c1673309004b625 100644 (file)
@@ -42,7 +42,7 @@ int main (void)
    For targets that don't support unaligned loads, version for the store.  */
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_no_align} && vector_alignment_reachable } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || {! vector_alignment_reachable} } } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index a881d9726d3c73fe6f18d9997299e7481cbdac51..53ee74ce461d22366e2b4b959eba6bec2be437e0 100644 (file)
@@ -15,8 +15,8 @@ END
 ! support unaligned loads).
 
 ! { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail vect_no_align } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target vect_no_align } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } }
 ! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target vect_no_align } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target { vect_no_align || {! vector_alignment_reachable} } } } }
 ! { dg-final { cleanup-tree-dump "vect" } }
index 734ed95080140a0ce060a989088831254c4f9eab..223d2dc175dc859297bbfc0259564cc9b13a07bf 100644 (file)
@@ -6,6 +6,13 @@ DIMENSION X(N), Y(N)
 Y = Y + A * X
 END
 
-! fail to vectorize due to failure to compute number of iterations (PR tree-optimization/18527)
-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail *-*-* } } } 
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target vect_no_align } } } 
+
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vect_no_align} && {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { {! vect_no_align} && {! vector_alignment_reachable} } } } }
+
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
+
 ! { dg-final { cleanup-tree-dump "vect" } }
index 22ab0d71bb8a978144063c1c55da8f468f87934a..5e514f6136c7b95ea32cb050fa2c40ff20c41fce 100644 (file)
@@ -10,7 +10,8 @@ Y = Y + A * X
 END
 
 ! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } 
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } }
-! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail vect_no_align } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
+! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target {! vector_alignment_reachable} } } }
 ! { dg-final { scan-tree-dump-times "accesses have the same alignment." 1 "vect" } }
 ! { dg-final { cleanup-tree-dump "vect" } }
index 551172af8a75a3d692468d330de01df706e66be2..acd13de16f72edec8cde9ee7746f7751d3803628 100644 (file)
         end
 
 ! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
 ! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } }
-! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { ilp32 && vect_no_align } } } }
-
-! We also expect to vectorize one loop for lp64 targets that support 
-! misaligned access:
-!   scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { lp64 && !vect_no_align } }
-!   scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { lp64 && !vect_no_align } }
-!   scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { lp64 && !vect_no_align } }
-! but we currently can't combine logical operators. (Could define 
-! a keyword for "not_vect_no_align" if desired). 
-
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align } } } }
+! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target {! vector_alignment_reachable} } } }
 ! { dg-final { cleanup-tree-dump "vect" } }
index e08675a6196933839d87bc976a384f748af49c46..373f4802785232cd6cdb615cde4e651d14286056 100644 (file)
@@ -2110,9 +2110,10 @@ proc check_effective_target_natural_alignment { } {
     if [info exists et_natural_alignment_saved] {
         verbose "check_effective_target_natural_alignment: using cached result" 2
     } else {
-        set et_natural_alignment_saved 0
-        if { [istarget spu-*-*] } {
-            set et_natural_alignment_saved 1
+       # FIXME: 32bit powerpc: guaranteed only if MASK_ALIGN_NATURAL/POWER.
+        set et_natural_alignment_saved 1
+        if { ([istarget *-*-darwin*] && [is-effective-target lp64]) } { 
+            set et_natural_alignment_saved 0
         }
     }
     verbose "check_effective_target_natural_alignment: returning $et_natural_alignment_saved" 2
@@ -2140,6 +2141,26 @@ proc check_effective_target_vector_alignment_reachable { } {
     return $et_vector_alignment_reachable_saved
 }
 
+# Return 1 if vector alignment for soubles  is reachable, 0 otherwise.
+#
+# This won't change for different subtargets so cache the result.
+
+proc check_effective_target_vector_alignment_reachable_for_double { } {
+    global et_vector_alignment_reachable_for_double
+
+    if [info exists et_vector_alignment_reachable_for_double_saved] {
+        verbose "check_effective_target_vector_alignment_reachable_for_double: using cached result" 2
+    } else {
+        if { [check_effective_target_vect_aligned_arrays] } {
+            set et_vector_alignment_reachable_for_double_saved 1
+        } else {
+            set et_vector_alignment_reachable_for_double_saved 0
+        }
+    }
+    verbose "check_effective_target_vector_alignment_reachable_for_double: returning $et_vector_alignment_reachable_for_double_saved" 2
+    return $et_vector_alignment_reachable_for_double_saved
+}
+
 # Return 1 if the target supports vector conditional operations, 0 otherwise.
 
 proc check_effective_target_vect_condition { } {