Record whether a dr_with_seg_len contains mixed steps
authorRichard Sandiford <richard.sandiford@arm.com>
Sat, 16 Nov 2019 11:41:16 +0000 (11:41 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sat, 16 Nov 2019 11:41:16 +0000 (11:41 +0000)
commit52c29905259363ce2b78dd7aa8a25cf531cddb3a
tree8bf16421dbe2ab49c76b7329d45d58f6e510114f
parente9acf80c96d681917d930869b7cbfb7d2fa54d51
Record whether a dr_with_seg_len contains mixed steps

prune_runtime_alias_test_list can merge dr_with_seg_len_pair_ts that
have different steps for the first reference or different steps for the
second reference.  This patch adds a flag to record that.

I don't know whether the change to create_intersect_range_checks_index
fixes anything in practice.  It would have to be a corner case if so,
since at present we only merge two alias pairs if either the first or
the second references are identical and only the other references differ.
And the vectoriser uses VF-based segment lengths only if both references
in a pair have the same step.  Either way, it still seems wrong to use
DR_STEP when it doesn't represent all checks that have been merged into
the pair.

2019-11-16  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* tree-data-ref.h (DR_ALIAS_MIXED_STEPS): New flag.
* tree-data-ref.c (prune_runtime_alias_test_list): Set it when
merging data references with different steps.
(create_intersect_range_checks_index): Take a
dr_with_seg_len_pair_t instead of two dr_with_seg_lens.
Bail out if DR_ALIAS_MIXED_STEPS is set.
(create_intersect_range_checks): Take a dr_with_seg_len_pair_t
instead of two dr_with_seg_lens.  Update call to
create_intersect_range_checks_index.
(create_runtime_alias_checks): Update call accordingly.

From-SVN: r278351
gcc/ChangeLog
gcc/tree-data-ref.c
gcc/tree-data-ref.h