diff options
author | Ira Rosen <irar@il.ibm.com> | 2007-10-21 10:01:16 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2007-10-21 10:01:16 +0000 |
commit | 8d0e5316e7e054e85102d36b96d24cce21b26bcd (patch) | |
tree | 3c6ae7f6a879a287a20effa9e27ce095fd6d997d /gcc | |
parent | 43029c1033d4e420ff02f1529fa9f99616a20021 (diff) | |
download | gcc-8d0e5316e7e054e85102d36b96d24cce21b26bcd.zip gcc-8d0e5316e7e054e85102d36b96d24cce21b26bcd.tar.gz gcc-8d0e5316e7e054e85102d36b96d24cce21b26bcd.tar.bz2 |
vect-ifcvt-5.c: Require vect_int.
* gcc.dg/vect/vect-ifcvt-5.c: Require vect_int.
* gcc.dg/vect/vect-16.c: Fix comment.
* gcc.dg/vect/pr33369.c: Require vect_int.
* gcc.dg/vect/slp-33.c: Add spaces.
* gcc.dg/vect/no-scevccp-outer-18.c: Enable only for vect_interleave
targets.
* gcc.dg/vect/vect-ifcvt-6.c: Require vect_int.
* gcc.dg/vect/no-scevccp-outer-19.c: Enable only for vect_unpack
targets.
* gcc.dg/vect/vect-ifcvt-7.c: Require vect_int.
* gcc.dg/vect/vect-strided-store-u16-i4.c: Add vect_unpack to
targets.
* gcc.dg/vect/slp-10.c: Add spaces.
* gcc.dg/vect/no-scevccp-outer-21.c: Enable only for vect_pack_trunc
targets.
* gcc.dg/vect/slp-36.c: Require vect_int.
* gcc.dg/vect/vect-ifcvt-9.c, gcc.dg/vect/vect-strided-store-u32-i2.c,
gcc.dg/vect/vect-ifcvt-2.c, gcc.dg/vect/vect-ifcvt-3.c,
gcc.dg/vect/vect-82.c, gcc.dg/vect/vect-83.c: Likewise.
* gcc.dg/vect/no-scevccp-outer-16.c: Enable only for vect_unpack
targets.
* gcc.dg/vect/no-scevccp-outer-17.c: Likewise.
* gcc.dg/vect/pr25413.c: Use vector alignment_reachable_for_64bit
instead of vector_alignment_reachable_for_double.
* lib/target-supports.exp (vect_aligned_arrays): Add spu-*-*.
(natural_alignment): Split into...
(natural_alignment_32, natural_alignment_64): New.
(vector_alignment_reachable): Depend on natural_alignment_32.
(vector_alignment_reachable_for_double): Rename to ...
(vector_alignment_reachable_for_64bit): And depend on
natural_alignment_64.
Co-Authored-By: Revital Eres <eres@il.ibm.com>
From-SVN: r129529
Diffstat (limited to 'gcc')
23 files changed, 111 insertions, 44 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64375dc..4ed9bce 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,38 @@ +2007-10-21 Ira Rosen <irar@il.ibm.com> + Revital Eres <eres@il.ibm.com> + + * gcc.dg/vect/vect-ifcvt-5.c: Require vect_int. + * gcc.dg/vect/vect-16.c: Fix comment. + * gcc.dg/vect/pr33369.c: Require vect_int. + * gcc.dg/vect/slp-33.c: Add spaces. + * gcc.dg/vect/no-scevccp-outer-18.c: Enable only for vect_interleave + targets. + * gcc.dg/vect/vect-ifcvt-6.c: Require vect_int. + * gcc.dg/vect/no-scevccp-outer-19.c: Enable only for vect_unpack + targets. + * gcc.dg/vect/vect-ifcvt-7.c: Require vect_int. + * gcc.dg/vect/vect-strided-store-u16-i4.c: Add vect_unpack to + targets. + * gcc.dg/vect/slp-10.c: Add spaces. + * gcc.dg/vect/no-scevccp-outer-21.c: Enable only for vect_pack_trunc + targets. + * gcc.dg/vect/slp-36.c: Require vect_int. + * gcc.dg/vect/vect-ifcvt-9.c, gcc.dg/vect/vect-strided-store-u32-i2.c, + gcc.dg/vect/vect-ifcvt-2.c, gcc.dg/vect/vect-ifcvt-3.c, + gcc.dg/vect/vect-82.c, gcc.dg/vect/vect-83.c: Likewise. + * gcc.dg/vect/no-scevccp-outer-16.c: Enable only for vect_unpack + targets. + * gcc.dg/vect/no-scevccp-outer-17.c: Likewise. + * gcc.dg/vect/pr25413.c: Use vector alignment_reachable_for_64bit + instead of vector_alignment_reachable_for_double. + * lib/target-supports.exp (vect_aligned_arrays): Add spu-*-*. + (natural_alignment): Split into... + (natural_alignment_32, natural_alignment_64): New. + (vector_alignment_reachable): Depend on natural_alignment_32. + (vector_alignment_reachable_for_double): Rename to ... + (vector_alignment_reachable_for_64bit): And depend on + natural_alignment_64. + 2007-10-21 Richard Sandiford <rsandifo@nildram.co.uk> * gcc.dg/vect/vect.exp: Extend -mpaired-single handling to all diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c index bdad0a0..ea58d39 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-16.c @@ -58,5 +58,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { ! {vect_unpack } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-17.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-17.c index e40a206..c11a1aa 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-17.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-17.c @@ -64,5 +64,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { ! {vect_unpack } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c index a584828..7a6788a 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-18.c @@ -47,5 +47,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { target vect_interleave } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-19.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-19.c index f3acb4a..58bcf08 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-19.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-19.c @@ -48,5 +48,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { ! {vect_unpack } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-21.c b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-21.c index 2338de0..f955e4a 100644 --- a/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-21.c +++ b/gcc/testsuite/gcc.dg/vect/no-scevccp-outer-21.c @@ -58,5 +58,5 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" } } */ +/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail { ! { vect_pack_trunc } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr25413.c b/gcc/testsuite/gcc.dg/vect/pr25413.c index 7f54889..1cb33e3 100644 --- a/gcc/testsuite/gcc.dg/vect/pr25413.c +++ b/gcc/testsuite/gcc.dg/vect/pr25413.c @@ -32,8 +32,8 @@ int main (void) return 0; } -/* { 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 { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vector_alignment_reachable_for_64bit } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" { target { ! vector_alignment_reachable_for_64bit } } } } */ +/* { dg-final { scan-tree-dump-times "vector alignment may not be reachable" 1 "vect" { target { ! vector_alignment_reachable_for_64bit } } } } */ +/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 1 "vect" { target { ! vector_alignment_reachable_for_64bit } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr33369.c b/gcc/testsuite/gcc.dg/vect/pr33369.c index 9979cbd..1aaf4e3 100644 --- a/gcc/testsuite/gcc.dg/vect/pr33369.c +++ b/gcc/testsuite/gcc.dg/vect/pr33369.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_shift } */ typedef struct tagPOINT diff --git a/gcc/testsuite/gcc.dg/vect/slp-10.c b/gcc/testsuite/gcc.dg/vect/slp-10.c index 737e1e7..36dc0cc 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-10.c +++ b/gcc/testsuite/gcc.dg/vect/slp-10.c @@ -106,9 +106,9 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {target {vect_intfloat_cvt && vect_int_mult} } } } */ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" {target {{! { vect_intfloat_cvt}} && vect_int_mult} } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target {{! { vect_intfloat_cvt}} && {!{vect_int_mult}}} } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target {{! { vect_intfloat_cvt}} && { ! {vect_int_mult}}} } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" {target {vect_intfloat_cvt && vect_int_mult} } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" {target {{! { vect_intfloat_cvt}} && vect_int_mult} } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target {{! { vect_intfloat_cvt}} && {!{vect_int_mult}}} } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target {{! { vect_intfloat_cvt}} && { ! {vect_int_mult}}} } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-33.c b/gcc/testsuite/gcc.dg/vect/slp-33.c index 86a641c..7ee7a0b 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-33.c +++ b/gcc/testsuite/gcc.dg/vect/slp-33.c @@ -104,9 +104,9 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" {target {vect_intfloat_cvt && vect_int_mult} } } } */ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" {target {{! { vect_intfloat_cvt}} && vect_int_mult} } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target {{! { vect_intfloat_cvt}} && {!{vect_int_mult}}} } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" {target {{! { vect_intfloat_cvt}} && {! {vect_int_mult}}} } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" {target {vect_intfloat_cvt && vect_int_mult} } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" {target {{! { vect_intfloat_cvt}} && vect_int_mult} } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target {{! { vect_intfloat_cvt}} && {!{vect_int_mult}}} } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" {target {{! { vect_intfloat_cvt}} && {! {vect_int_mult}}} } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-36.c b/gcc/testsuite/gcc.dg/vect/slp-36.c index 98d1473..8480c4a 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-36.c +++ b/gcc/testsuite/gcc.dg/vect/slp-36.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target vect_shift } */ #define N 32 diff --git a/gcc/testsuite/gcc.dg/vect/vect-16.c b/gcc/testsuite/gcc.dg/vect/vect-16.c index 889fb7f..6983705 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-16.c +++ b/gcc/testsuite/gcc.dg/vect/vect-16.c @@ -14,7 +14,6 @@ int main1 () float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; float diff; - /* Not vectorizable yet (reduction). */ diff = 0; for (i = 0; i < N; i++) { diff += (b[i] - c[i]); @@ -34,5 +33,6 @@ int main (void) return main1 (); } +/* Requires fast-math. */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-82.c b/gcc/testsuite/gcc.dg/vect/vect-82.c index 9cc63ff..e962f8f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-82.c +++ b/gcc/testsuite/gcc.dg/vect/vect-82.c @@ -1,4 +1,5 @@ /* { dg-do run { target powerpc*-*-* } } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/vect-83.c b/gcc/testsuite/gcc.dg/vect/vect-83.c index 7c46ed9..4cebd7f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-83.c +++ b/gcc/testsuite/gcc.dg/vect/vect-83.c @@ -1,4 +1,5 @@ /* { dg-do run { target powerpc*-*-* } } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-2.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-2.c index 74f6b93..a89bd8f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-2.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_condition } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <signal.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-3.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-3.c index 3f591d9..902b154 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-3.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_condition } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <signal.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-5.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-5.c index 5ee9ba6..8797410 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-5.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-5.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_condition } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <signal.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-6.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-6.c index 6d01803..f2330bd 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-6.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-6.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_condition } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <signal.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-7.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-7.c index 81b225b..fa89d83 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-7.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-7.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_condition } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <signal.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c index 75941d7..f9a92b8 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-9.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_condition } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <signal.h> diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c index 1eb848e..5c02c0d 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u16-i4.c @@ -65,8 +65,8 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_interleave } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! { vect_interleave } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { vect_interleave && vect_pack_trunc } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { { ! { vect_interleave } } && { vect_pack_trunc } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c index 2c5a999..ecc567c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-strided-store-u32-i2.c @@ -1,4 +1,4 @@ -/* { dg-require-effective-target vect_float } */ +/* { dg-require-effective-target vect_int } */ #include <stdarg.h> #include <stdio.h> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ac53b655..e4e9c58 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1507,7 +1507,6 @@ proc check_effective_target_vect_floatint_cvt { } { return $et_vect_floatint_cvt_saved } - # Return 1 is this is an arm target using 32-bit instructions proc check_effective_target_arm32 { } { return [check_no_compiler_messages arm32 assembly { @@ -2144,8 +2143,9 @@ proc check_effective_target_vect_aligned_arrays { } { verbose "check_effective_target_vect_aligned_arrays: using cached result" 2 } else { set et_vect_aligned_arrays_saved 0 - if { ([istarget x86_64-*-*] - || [istarget i?86-*-*]) && [is-effective-target lp64] } { + if { (([istarget x86_64-*-*] + || [istarget i?86-*-*]) && [is-effective-target lp64]) + || [istarget spu-*-*] } { set et_vect_aligned_arrays_saved 1 } } @@ -2153,28 +2153,49 @@ proc check_effective_target_vect_aligned_arrays { } { return $et_vect_aligned_arrays_saved } -# Return 1 if types are naturally aligned (aligned to their type-size), -# 0 otherwise. +# Return 1 if types of size 32 bit or less are naturally aligned +# (aligned to their type-size), 0 otherwise. +# +# This won't change for different subtargets so cache the result. + +proc check_effective_target_natural_alignment_32 { } { + global et_natural_alignment_32 + + if [info exists et_natural_alignment_32_saved] { + verbose "check_effective_target_natural_alignment_32: using cached result" 2 + } else { + # FIXME: 32bit powerpc: guaranteed only if MASK_ALIGN_NATURAL/POWER. + set et_natural_alignment_32_saved 1 + if { ([istarget *-*-darwin*] && [is-effective-target lp64]) } { + set et_natural_alignment_32_saved 0 + } + } + verbose "check_effective_target_natural_alignment_32: returning $et_natural_alignment_32_saved" 2 + return $et_natural_alignment_32_saved +} + +# Return 1 if types of size 64 bit or less are naturally aligned (aligned to their +# type-size), 0 otherwise. # # This won't change for different subtargets so cache the result. -proc check_effective_target_natural_alignment { } { - global et_natural_alignment +proc check_effective_target_natural_alignment_64 { } { + global et_natural_alignment_64 - if [info exists et_natural_alignment_saved] { - verbose "check_effective_target_natural_alignment: using cached result" 2 + if [info exists et_natural_alignment_64_saved] { + verbose "check_effective_target_natural_alignment_64: using cached result" 2 } else { - # 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 + set et_natural_alignment_64_saved 0 + if { ([is-effective-target lp64] && ![istarget *-*-darwin*]) + || [istarget spu-*-*] } { + set et_natural_alignment_64_saved 1 } } - verbose "check_effective_target_natural_alignment: returning $et_natural_alignment_saved" 2 - return $et_natural_alignment_saved + verbose "check_effective_target_natural_alignment_64: returning $et_natural_alignment_64_saved" 2 + return $et_natural_alignment_64_saved } -# Return 1 if vector alignment is reachable, 0 otherwise. +# Return 1 if vector alignment (for types of size 32 bit or less) is reachable, 0 otherwise. # # This won't change for different subtargets so cache the result. @@ -2185,7 +2206,7 @@ proc check_effective_target_vector_alignment_reachable { } { verbose "check_effective_target_vector_alignment_reachable: using cached result" 2 } else { if { [check_effective_target_vect_aligned_arrays] - || [check_effective_target_natural_alignment] } { + || [check_effective_target_natural_alignment_32] } { set et_vector_alignment_reachable_saved 1 } else { set et_vector_alignment_reachable_saved 0 @@ -2195,24 +2216,25 @@ proc check_effective_target_vector_alignment_reachable { } { return $et_vector_alignment_reachable_saved } -# Return 1 if vector alignment for soubles is reachable, 0 otherwise. +# Return 1 if vector alignment for 64 bit 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 +proc check_effective_target_vector_alignment_reachable_for_64bit { } { + global et_vector_alignment_reachable_for_64bit - if [info exists et_vector_alignment_reachable_for_double_saved] { - verbose "check_effective_target_vector_alignment_reachable_for_double: using cached result" 2 + if [info exists et_vector_alignment_reachable_for_64bit_saved] { + verbose "check_effective_target_vector_alignment_reachable_for_64bit: using cached result" 2 } else { - if { [check_effective_target_vect_aligned_arrays] } { - set et_vector_alignment_reachable_for_double_saved 1 + if { [check_effective_target_vect_aligned_arrays] + || [check_effective_target_natural_alignment_64] } { + set et_vector_alignment_reachable_for_64bit_saved 1 } else { - set et_vector_alignment_reachable_for_double_saved 0 + set et_vector_alignment_reachable_for_64bit_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 + verbose "check_effective_target_vector_alignment_reachable_for_64bit: returning $et_vector_alignment_reachable_for_64bit_saved" 2 + return $et_vector_alignment_reachable_for_64bit_saved } # Return 1 if the target supports vector conditional operations, 0 otherwise. |