aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@linaro.org>2012-07-30 14:39:32 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2012-07-30 14:39:32 +0000
commit5aea1e76a80c9c5770692ece18100b9383cbab3a (patch)
treedc5799dbc1af4d3d79e2dbe5b4f3915b5afa6052 /gcc/testsuite
parent4c340b5dfa736102f1fc50f3a4f2ba685708c7ff (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/testsuite/gcc.dg/align-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-25.c2
-rw-r--r--gcc/testsuite/lib/target-supports.exp20
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.