From: Paul Brook Date: Tue, 21 Jul 2009 12:35:38 +0000 (+0000) Subject: tree-vectorizer.c (increase_alignment): Handle nested arrays. X-Git-Tag: releases/gcc-4.5.0~4471 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cba146eb32a3ba66e1fbe1c9da7fb68788ca5b06;p=thirdparty%2Fgcc.git tree-vectorizer.c (increase_alignment): Handle nested arrays. 2009-07-21 Paul Brook gcc/ * tree-vectorizer.c (increase_alignment): Handle nested arrays. Terminate debug dump with newline. gcc/testsuite/ * gcc.dg/vect/section-anchors-nest-1.c: New test. * lib/target-supports.exp (check_effective_target_section_anchors): Add arm*-*-*. From-SVN: r149853 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c348015c9d46..c189dda3f503 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-07-21 Paul Brook + + * tree-vectorizer.c (increase_alignment): Handle nested arrays. + Terminate debug dump with newline. + 2009-07-20 John David Anglin * pa.c (compute_zdepwi_operands): Limit deposit length to 32 - lsb. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5faeb99bf237..a50af8678fbd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-07-21 Paul Brook + + * gcc.dg/vect/section-anchors-nest-1.c: New test. + * lib/target-supports.exp (check_effective_target_section_anchors): + Add arm*-*-*. + 2009-07-20 Olatunji Ruwase * gcc.dg/plugin/finish_unit_plugin.c: New test. diff --git a/gcc/testsuite/gcc.dg/vect/section-anchors-nest-1.c b/gcc/testsuite/gcc.dg/vect/section-anchors-nest-1.c new file mode 100644 index 000000000000..39a24ccaf222 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/section-anchors-nest-1.c @@ -0,0 +1,35 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target section_anchors } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-options "-O2 -ftree-vectorize -fsection-anchors -fno-vect-cost-model -fdump-ipa-increase_alignment" } */ + +#include +#include "tree-vect.h" + +#define N 32 + +static int a[N][N]; +static int b[N][N]; +static int c[N][N]; + +void clobber(int *); + +int *foo(void) +{ + int i; + int j; + + clobber (&a[0][0]); + clobber (&b[0][0]); + clobber (&c[0][0]); + + for (i = 0; i < N; i++) { + for (j = 0; j < N; j++) { + c[j][i] += a[j][i] + c[j][i]; + } + } + return &c[0][0]; +} + +/* { dg-final { scan-ipa-dump-times "Increasing alignment of decl" 3 "increase_alignment" } } */ +/* { dg -finalfoo { cleanup-ipa-dump "increase_alignment" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 306e78fcbb16..f007e04e5983 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2553,7 +2553,8 @@ proc check_effective_target_section_anchors { } { verbose "check_effective_target_section_anchors: using cached result" 2 } else { set et_section_anchors_saved 0 - if { [istarget powerpc*-*-*] } { + if { [istarget powerpc*-*-*] + || [istarget arm*-*-*] } { set et_section_anchors_saved 1 } } diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index 2c2103eda0a6..90abbd76665c 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -337,11 +337,13 @@ increase_alignment (void) vnode = vnode->next_needed) { tree vectype, decl = vnode->decl; + tree t; unsigned int alignment; - if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE) + t = TREE_TYPE(decl); + if (TREE_CODE (t) != ARRAY_TYPE) continue; - vectype = get_vectype_for_scalar_type (TREE_TYPE (TREE_TYPE (decl))); + vectype = get_vectype_for_scalar_type (strip_array_types (t)); if (!vectype) continue; alignment = TYPE_ALIGN (vectype); @@ -356,6 +358,7 @@ increase_alignment (void) { fprintf (dump_file, "Increasing alignment of decl: "); print_generic_expr (dump_file, decl, TDF_SLIM); + fprintf (dump_file, "\n"); } } }