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] [4.3 projects] Verctorizer - versioning for alias


Often it is impossible to alias analysis to prove dependency or
independency.  In such cases vectorizer is bound to be conservative.
However in many cases at run-time we can validate the independence
by testing that data reference ranges are not overlapped.

This patch enhances the vectorizer by introducing run-time checks
and loop versioning to take advantage of vectorized loop in case when
data reference independence can be proved at run-time.  The number
of added data reference test can be controlled by
"vect-max-version-for-alias-checks" parameter.  The value of 0 will
disable the versioning for alias.  Then maximum number of checks
produced for versioning for alignment can now be controlled by
"vect-max-version-for-alignment-checks".

Bootstrapped and regtested on ppc64 and x86_64.
Bootstrapped with vectorization enabled on x86_64.
Okay for mainline?

2007-08-14  Victor Kaplansky <victork@il.ibm.com>

ChangeLog:

             * tree-vectorizer.c (new_loop_vec_info): Initialize new
             field.
             (destroy_loop_vec_info): Add call to VEC_free.
             * tree-vectorizer.h (may_alias_ddrs): Define.
             (LOOP_VINFO_MAY_ALIAS_DDRS): Define.
             * tree-vect-analyze.c (vect_analyze_data_ref_dependence):
             Change reporting to dump.
             (vect_is_duplicate_ddr): New.
             (vect_mark_for_runtime_alias_test): New.
             (vect_analyze_data_ref_dependences) Add call to
             vect_mark_for_runtime_alias_test.
             (vect_enhance_data_refs_alignment): Define local variable
             vect_versioning_for_alias_required, don't perform
             versioning for alignment if versioning for alias is
             required.
             (vect_enhance_data_refs_alignment): Use
             PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS instead of
             PARAM_VECT_MAX_VERSION_CHECKS.
             * tree-vect-transform.c (vect_create_cond_for_alias_checks):
             New.
             (vect_transform_loop): Add call to
             vect_create_cond_for_alias_checks.
             * params.def (PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS):
             Rename.
             (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS): Define.

testsuite/ChangeLog:

            * gcc.dg/vect/vect-vfa-01.c: New.
            * gcc.dg/vect/vect-vfa-02.c: New.
            * gcc.dg/vect/vect-vfa-03.c: New.
            * gcc.dg/vect/vect-102a.c, gcc.dg/vect/vect-51.c,
            gcc.dg/vect/pr29145.c, gcc.dg/vect/vect-43.c,
            gcc.dg/vect/vect-61.c, gcc.dg/vect/vect-53.c,
            gcc.dg/vect/vect-45.c, gcc.dg/vect/vect-101.c,
            gcc.dg/vect/vect-37.c, gcc.dg/vect/vect-79.c,
            gcc.dg/vect/vect-102.c, gcc.dg/vect/vect-dv-2.c,
            gcc.dg/vect/vect-57.c, gcc.dg/vect/vect-49.c,
            gfortran.dg/vect/pr19049.f90: Rename to start with
            prefix no-vfa-.
            * gcc.dg/vect/vect.exp: Disable versioning for alias
            when test starts with no-vfa-.
            * gfortran.dg/vect/vect.exp: Likewise.

(See attached file: vfa.txt)

Attachment: vfa.txt
Description: Text document


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