diff options
author | Ulrich Weigand <ulrich.weigand@linaro.org> | 2012-07-30 14:39:32 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@gcc.gnu.org> | 2012-07-30 14:39:32 +0000 |
commit | 5aea1e76a80c9c5770692ece18100b9383cbab3a (patch) | |
tree | dc5799dbc1af4d3d79e2dbe5b4f3915b5afa6052 /gcc/testsuite | |
parent | 4c340b5dfa736102f1fc50f3a4f2ba685708c7ff (diff) | |
download | gcc-5aea1e76a80c9c5770692ece18100b9383cbab3a.zip gcc-5aea1e76a80c9c5770692ece18100b9383cbab3a.tar.gz gcc-5aea1e76a80c9c5770692ece18100b9383cbab3a.tar.bz2 |
target.def (vector_alignment): New target hook.
ChangeLog:
* target.def (vector_alignment): New target hook.
* doc/tm.texi.in (TARGET_VECTOR_ALIGNMENT): Document new hook.
* doc/tm.texi: Regenerate.
* targhooks.c (default_vector_alignment): New function.
* targhooks.h (default_vector_alignment): Add prototype.
* stor-layout.c (layout_type): Use targetm.vector_alignment.
* config/arm/arm.c (arm_vector_alignment): New function.
(TARGET_VECTOR_ALIGNMENT): Define.
* tree-vect-data-refs.c (vect_update_misalignment_for_peel): Use
vector type alignment instead of size.
* tree-vect-loop-manip.c (vect_do_peeling_for_loop_bound): Use
element type size directly instead of computing it from alignment.
Fix variable naming and comment.
testsuite/ChangeLog:
* lib/target-supports.exp
(check_effective_target_vect_natural_alignment): New function.
* gcc.dg/align-2.c: Only run on targets with natural alignment
of vector types.
* gcc.dg/vect/slp-25.c: Adjust tests for targets without natural
alignment of vector types.
Co-Authored-By: Richard Earnshaw <rearnsha@arm.com>
From-SVN: r189974
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/align-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/slp-25.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 20 |
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f593cf0..442aa3f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2012-07-30 Ulrich Weigand <ulrich.weigand@linaro.org> + + * lib/target-supports.exp + (check_effective_target_vect_natural_alignment): New function. + * gcc.dg/align-2.c: Only run on targets with natural alignment + of vector types. + * gcc.dg/vect/slp-25.c: Adjust tests for targets without natural + alignment of vector types. + 2012-07-30 Kirill Yukhin <kirill.yukhin@intel.com> Michael Zolotukhin <michael.v.zolotukhin@intel.com> diff --git a/gcc/testsuite/gcc.dg/align-2.c b/gcc/testsuite/gcc.dg/align-2.c index f5c00fd..2001a15 100644 --- a/gcc/testsuite/gcc.dg/align-2.c +++ b/gcc/testsuite/gcc.dg/align-2.c @@ -1,5 +1,5 @@ /* PR 17962 */ -/* { dg-do compile } */ +/* { dg-do compile { target vect_natural_alignment } } */ /* { dg-options "" } */ typedef float v4 __attribute__((vector_size(sizeof(float)*4))); diff --git a/gcc/testsuite/gcc.dg/vect/slp-25.c b/gcc/testsuite/gcc.dg/vect/slp-25.c index 0dec2f1..e5e5e3b 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-25.c +++ b/gcc/testsuite/gcc.dg/vect/slp-25.c @@ -56,5 +56,5 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 2 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" { xfail { vect_no_align } } } } */ +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align || { ! vect_natural_alignment } } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 6640ef2..0dc5815 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3387,6 +3387,26 @@ proc check_effective_target_natural_alignment_64 { } { return $et_natural_alignment_64_saved } +# Return 1 if all vector types 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_vect_natural_alignment { } { + global et_vect_natural_alignment + + if [info exists et_vect_natural_alignment_saved] { + verbose "check_effective_target_vect_natural_alignment: using cached result" 2 + } else { + set et_vect_natural_alignment_saved 1 + if { [check_effective_target_arm_eabi] } { + set et_vect_natural_alignment_saved 0 + } + } + verbose "check_effective_target_vect_natural_alignment: returning $et_vect_natural_alignment_saved" 2 + return $et_vect_natural_alignment_saved +} + # 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. |