tree-vect-loop-manip.c (create_intersect_range_checks_index): Pass in parameter loop, rather than loop_vinfo.

* tree-vect-loop-manip.c (create_intersect_range_checks_index): Pass
	in parameter loop, rather than loop_vinfo.
	(create_intersect_range_checks): Ditto.
	(vect_create_cond_for_alias_checks): Update call to above functions.

From-SVN: r248513
This commit is contained in:
Bin Cheng 2017-05-26 14:21:29 +00:00 committed by Bin Cheng
parent cb4fe40136
commit f8d0706b24
2 changed files with 17 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2017-05-26 Bin Cheng <bin.cheng@arm.com>
* tree-vect-loop-manip.c (create_intersect_range_checks_index): Pass
in parameter loop, rather than loop_vinfo.
(create_intersect_range_checks): Ditto.
(vect_create_cond_for_alias_checks): Update call to above functions.
2017-05-26 Bin Cheng <bin.cheng@arm.com> 2017-05-26 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/80815 PR tree-optimization/80815

View File

@ -2044,11 +2044,11 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
*cond_expr = part_cond_expr; *cond_expr = part_cond_expr;
} }
/* Given two data references and segment lengths described by DR_A and DR_B, /* Given LOOP's two data references and segment lengths described by DR_A
create expression checking if the two addresses ranges intersect with and DR_B, create expression checking if the two addresses ranges intersect
each other based on index of the two addresses. This can only be done with each other based on index of the two addresses. This can only be
if DR_A and DR_B referring to the same (array) object and the index is done if DR_A and DR_B referring to the same (array) object and the index
the only difference. For example: is the only difference. For example:
DR_A DR_B DR_A DR_B
data-ref arr[i] arr[j] data-ref arr[i] arr[j]
@ -2070,7 +2070,7 @@ vect_create_cond_for_align_checks (loop_vec_info loop_vinfo,
Note evolution step of index needs to be considered in comparison. */ Note evolution step of index needs to be considered in comparison. */
static bool static bool
create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr, create_intersect_range_checks_index (struct loop *loop, tree *cond_expr,
const dr_with_seg_len& dr_a, const dr_with_seg_len& dr_a,
const dr_with_seg_len& dr_b) const dr_with_seg_len& dr_b)
{ {
@ -2109,7 +2109,6 @@ create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr,
unsigned HOST_WIDE_INT niter_len2 = (seg_len2 + abs_step - 1) / abs_step; unsigned HOST_WIDE_INT niter_len2 = (seg_len2 + abs_step - 1) / abs_step;
unsigned int i; unsigned int i;
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
for (i = 0; i < DR_NUM_DIMENSIONS (dr_a.dr); i++) for (i = 0; i < DR_NUM_DIMENSIONS (dr_a.dr); i++)
{ {
tree access1 = DR_ACCESS_FN (dr_a.dr, i); tree access1 = DR_ACCESS_FN (dr_a.dr, i);
@ -2186,12 +2185,12 @@ create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr,
|| (DR_B_addr_0 + DER_B_segment_length_0) <= DR_A_addr_0)) */ || (DR_B_addr_0 + DER_B_segment_length_0) <= DR_A_addr_0)) */
static void static void
create_intersect_range_checks (loop_vec_info loop_vinfo, tree *cond_expr, create_intersect_range_checks (struct loop *loop, tree *cond_expr,
const dr_with_seg_len& dr_a, const dr_with_seg_len& dr_a,
const dr_with_seg_len& dr_b) const dr_with_seg_len& dr_b)
{ {
*cond_expr = NULL_TREE; *cond_expr = NULL_TREE;
if (create_intersect_range_checks_index (loop_vinfo, cond_expr, dr_a, dr_b)) if (create_intersect_range_checks_index (loop, cond_expr, dr_a, dr_b))
return; return;
tree segment_length_a = dr_a.seg_len; tree segment_length_a = dr_a.seg_len;
@ -2263,6 +2262,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr)
if (comp_alias_ddrs.is_empty ()) if (comp_alias_ddrs.is_empty ())
return; return;
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
for (size_t i = 0, s = comp_alias_ddrs.length (); i < s; ++i) for (size_t i = 0, s = comp_alias_ddrs.length (); i < s; ++i)
{ {
const dr_with_seg_len& dr_a = comp_alias_ddrs[i].first; const dr_with_seg_len& dr_a = comp_alias_ddrs[i].first;
@ -2279,7 +2279,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr)
} }
/* Create condition expression for each pair data references. */ /* Create condition expression for each pair data references. */
create_intersect_range_checks (loop_vinfo, &part_cond_expr, dr_a, dr_b); create_intersect_range_checks (loop, &part_cond_expr, dr_a, dr_b);
if (*cond_expr) if (*cond_expr)
*cond_expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, *cond_expr = fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
*cond_expr, part_cond_expr); *cond_expr, part_cond_expr);