mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
cb4fe40136
commit
f8d0706b24
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue