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