aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-data-ref.h
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-11-16 11:41:16 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-11-16 11:41:16 +0000
commit52c29905259363ce2b78dd7aa8a25cf531cddb3a (patch)
tree8bf16421dbe2ab49c76b7329d45d58f6e510114f /gcc/tree-data-ref.h
parente9acf80c96d681917d930869b7cbfb7d2fa54d51 (diff)
downloadgcc-52c29905259363ce2b78dd7aa8a25cf531cddb3a.zip
gcc-52c29905259363ce2b78dd7aa8a25cf531cddb3a.tar.gz
gcc-52c29905259363ce2b78dd7aa8a25cf531cddb3a.tar.bz2
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
Diffstat (limited to 'gcc/tree-data-ref.h')
-rw-r--r--gcc/tree-data-ref.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index 2846724..e4f71ca 100644
--- a/gcc/tree-data-ref.h
+++ b/gcc/tree-data-ref.h
@@ -250,6 +250,12 @@ public:
Temporary flags that indicate whether there is a pair P whose
DRs have or haven't been swapped around.
+ DR_ALIAS_MIXED_STEPS:
+ The DR_STEP for one of the data references in the pair does not
+ accurately describe that reference for all members of P. (Note
+ that the flag does not say anything about whether the DR_STEPs
+ of the two references in the pair are the same.)
+
The ordering assumption mentioned above is that for every pair
(DR_A, DR_B) in P:
@@ -287,6 +293,7 @@ const unsigned int DR_ALIAS_WAW = 1U << 2;
const unsigned int DR_ALIAS_ARBITRARY = 1U << 3;
const unsigned int DR_ALIAS_SWAPPED = 1U << 4;
const unsigned int DR_ALIAS_UNSWAPPED = 1U << 5;
+const unsigned int DR_ALIAS_MIXED_STEPS = 1U << 6;
/* This struct contains two dr_with_seg_len objects with aliasing data
refs. Two comparisons are generated from them. */