This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] vectorizer testsuite: add alignment checks





This patch adds checks to the vectorizer testcases to verify alignment
handling.

We check that the number of accesses that require misalignment support is
as expected, by matching the pattern "Vectorizing an unaligned access"
using scan-tree-dump-times.

Sometimes when an access is not guaranteed to be aligned the vectorizer
performs loop peeling to force the alignment of the access. Vectorization
of such accesses therefore does not require misalignment support, so these
are not reported along with the above. To detect these we match the pattern
"Alignment of access forced using peeling". This check was not added to
testcases in which accesses are trivially aligned (e.g. in which all
accesses are of user-defined types with sufficient alignment attribute).

These new checks verify the vectorizer's behavior for loops that succeed to
get vectorized. We can also add checks to verify that when a loop was not
vectorized it was for the right reason. We plan to submit some cleanups to
the vectorizer reports, so we'll postpone adding more testsuite checks till
after that.

I wasn't sure about the following testcases:

1) vect-[8,30,38]: these have global statically-initialized arrays that are
assembled early. On powerpc platforms the alignment of these
statically-initialized arrays is not sufficient and therefore requires
misalignment support. On i686-pc-linux-gnu their alignment is 256 bytes,
which is more than what is required, so they don't require misalignment
support. Also, currently vect-[8,30] are marked as xfail for vect_no_align
targets, but vect-38 isn't. It looks like we can't generalize the alignment
expectations for these arrays, so for now I left these testcases unchanged.
Could add target specific checks. Open for suggestions.

2) vect-36: is it safe to assume that the field 'cb' is sufficiently
aligned for any platform? (this seems to be true for the platforms it's
enabled on now):
  struct {
    char ca[N];
    char cb[N];
  } s;


Bootstrapped and tested on powerpc-darwin, powerpc-suse, powerpc64-suse,
and i686-pc-linux-gnu.
(testing on other platforms would be appreciated).

ok for mainline?

thanks,
dorit

Changelog:
        * tree-vectorizer.c (vect_enhance_data_refs_alignment): Add dump
prints.
        (vect_analyze_data_refs_alignment): Add dump prints.

        * gcc.dg/vect/pr18400.c: Add checks for alignment prints.
        * gcc.dg/vect/pr18425.c: Add checks for alignment prints.
        * gcc.dg/vect/pr18536.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-1.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-2.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-3.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-4.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-5.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-6.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-7.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-13.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-17.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-18.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-19.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-20.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-21.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-22.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-23.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-24.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-25.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-26.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-27.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-28.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-29.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-31.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-32.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-33.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-34.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-35.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-36.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-37.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-40.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-41.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-42.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-43.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-44.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-46.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-47.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-48.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-50.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-52.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-53.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-56.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-58.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-60.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-62.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-64.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-65.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-66.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-67.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-68.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-69.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-72.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-73.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-74.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-75.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-76.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-77.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-78.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-80.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-86.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-87.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-88.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-89.c: Add checks for alignment prints.
        * gcc.dg/vect/vect-all.c: Add checks for alignment prints.

        * gcc.dg/vect/vect-1.c: Fix spelling.
        * gcc.dg/vect/vect-10.c: Fix spelling.
        * gcc.dg/vect/vect-11.c: Fix spelling.
        * gcc.dg/vect/vect-12.c: Fix spelling.
        * gcc.dg/vect/vect-14.c: Fix spelling.
        * gcc.dg/vect/vect-15.c: Fix spelling.
        * gcc.dg/vect/vect-16.c: Fix spelling.
        * gcc.dg/vect/vect-46.c: Remove obsolete comment.
        * gcc.dg/vect/vect-64.c: Fix comments.
        * gcc.dg/vect/vect-none.c: Remove vectorizable loop.

Patch:

(See attached file: align_testuite_checks.jan7)

Attachment: align_testuite_checks.jan7
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]