summaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>2009-05-11 12:33:13 +0000
committerirar <irar@138bc75d-0d04-0410-961f-82ee72b054a4>2009-05-11 12:33:13 +0000
commitb11576bf2e6150c6575faf519d842c2ce1dd4aed (patch)
tree8e88e1d02b9765f0c7c8d49664f5a03d1d46f536 /gcc/tree-vect-data-refs.c
parent2f8eb9091b18ca1a7b6868980a41678f6d93b9ed (diff)
downloadgcc-b11576bf2e6150c6575faf519d842c2ce1dd4aed.tar.gz
PR tree-optimization/40074
* tree-vect-data-refs.c (vect_analyze_group_access): Take gaps into account in group size and step comparison. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147372 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index a117898e146..42854a06631 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -1424,7 +1424,7 @@ vect_analyze_group_access (struct data_reference *dr)
/* First stmt in the interleaving chain. Check the chain. */
gimple next = DR_GROUP_NEXT_DR (vinfo_for_stmt (stmt));
struct data_reference *data_ref = dr;
- unsigned int count = 1;
+ unsigned int count = 1, gaps = 0;
tree next_step;
tree prev_init = DR_INIT (data_ref);
gimple prev = stmt;
@@ -1490,6 +1490,8 @@ vect_analyze_group_access (struct data_reference *dr)
fprintf (vect_dump, "interleaved store with gaps");
return false;
}
+
+ gaps += diff - 1;
}
/* Store the gap from the previous member of the group. If there is no
@@ -1506,8 +1508,9 @@ vect_analyze_group_access (struct data_reference *dr)
the type to get COUNT_IN_BYTES. */
count_in_bytes = type_size * count;
- /* Check that the size of the interleaving is not greater than STEP. */
- if (dr_step < count_in_bytes)
+ /* Check that the size of the interleaving (including gaps) is not greater
+ than STEP. */
+ if (dr_step && dr_step < count_in_bytes + gaps * type_size)
{
if (vect_print_dump_info (REPORT_DETAILS))
{