r252288 - in /branches/range-gen2/gcc: hash-tra...
aldyh@gcc.gnu.org
aldyh@gcc.gnu.org
Wed Sep 13 16:28:00 GMT 2017
Author: aldyh
Date: Wed Sep 13 16:28:12 2017
New Revision: 252288
URL: https://gcc.gnu.org/viewcvs?rev=252288&root=gcc&view=rev
Log:
Use base inequality for some vector alias checks
This patch checks whether two data references x and y cannot
partially overlap and so are independent whenever &x != &y.
We can then use this in the vectoriser to optimise alias checks.
gcc/
2016-08-04 Richard Sandiford <richard.sandiford@linaro.org>
* hash-traits.h (pair_hash): New struct.
* tree-data-ref.h (data_dependence_relation): Add object_a and
object_b fields.
(DDR_OBJECT_A, DDR_OBJECT_B): New macros.
* tree-data-ref.c (initialize_data_dependence_relation): Initialize
DDR_OBJECT_A and DDR_OBJECT_B.
* tree-vectorizer.h (vec_object_pair): New type.
(_loop_vec_info): Add a check_unequal_addrs field.
(LOOP_VINFO_CHECK_UNEQUAL_ADDRS): New macro.
(LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Return true if there is an
entry in check_unequal_addrs. Check comp_alias_ddrs instead of
may_alias_ddrs.
* tree-vect-loop.c (destroy_loop_vec_info): Release
LOOP_VINFO_CHECK_UNEQUAL_ADDRS.
(vect_analyze_loop_2): Likewise, when restarting.
(vect_estimate_min_profitable_iters): Estimate the cost of
LOOP_VINFO_CHECK_UNEQUAL_ADDRS.
* tree-vect-data-refs.c: Include tree-hash-traits.h.
(vect_prune_runtime_alias_test_list): Try to handle conflicts
using LOOP_VINFO_CHECK_UNEQUAL_ADDRS, if the data dependence allows.
Count such tests in the final summary.
* tree-vect-loop-manip.c (chain_cond_expr): New function.
(vect_create_cond_for_align_checks): Use it.
(vect_create_cond_for_unequal_addrs): New function.
(vect_loop_versioning): Call it.
gcc/testsuite/
* gcc.dg/vect/vect-alias-check-6.c: New test.
Added:
branches/range-gen2/gcc/testsuite/gcc.dg/vect/vect-alias-check-6.c
Modified:
branches/range-gen2/gcc/hash-traits.h
branches/range-gen2/gcc/tree-data-ref.c
branches/range-gen2/gcc/tree-data-ref.h
branches/range-gen2/gcc/tree-vect-data-refs.c
branches/range-gen2/gcc/tree-vect-loop-manip.c
branches/range-gen2/gcc/tree-vect-loop.c
branches/range-gen2/gcc/tree-vectorizer.h
More information about the Gcc-cvs
mailing list