[Bug tree-optimization/40074] [4.4/4.5 Regression] ICE in vect_get_vec_def_for_operand, at tree-vect-stmts.c:944
hjl dot tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun May 10 16:12:00 GMT 2009
------- Comment #15 from hjl dot tools at gmail dot com 2009-05-10 16:11 -------
(In reply to comment #14)
> I am testing:
>
> Index: tree-vect-data-refs.c
> ===================================================================
> --- tree-vect-data-refs.c (revision 147329)
> +++ tree-vect-data-refs.c (working copy)
> @@ -1424,7 +1424,7 @@ vect_analyze_group_access (struct data_r
> /* 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_r
> 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_r
> 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))
> {
>
> It fixes the reduced testcase, but I failed to compile the original one, so
> maybe someone could check that the above patch fixes the ICE for the original
> testcase?
>
It fixed the original testcase on 4.4 branch.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40074
More information about the Gcc-bugs
mailing list