Commit 23a37229 by Richard Biener Committed by Richard Biener

re PR tree-optimization/68104 (ice in vect_update_misalignment_for_peel with -O3)

2015-10-27  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/68104
	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Move
	strided access check ...
	(vect_compute_data_refs_alignment): ... here.

	* gcc.dg/torture/pr68104.c: New testcase.

From-SVN: r229440
parent 1e44e857
2015-10-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/68104
* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Move
strided access check ...
(vect_compute_data_refs_alignment): ... here.
2015-10-27 Daniel Jacobowitz <dan@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
Mark Shinwell <shinwell@codesourcery.com>
2015-10-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/68104
* gcc.dg/torture/pr68104.c: New testcase.
2015-10-27 Alan Lawrence <alan.lawrence@arm.com>
* gcc.dg/vect/vect-strided-shift-1.c: New.
......
/* { dg-do compile } */
typedef struct
{
char vl;
char weight;
} ib_vl_arb_element_t;
typedef struct { ib_vl_arb_element_t vl_entry[32]; } ib_vl_arb_table_t;
typedef enum { IB_SUCCESS } ib_api_status_t;
int a, b, d;
char c;
void fn1();
ib_api_status_t fn2()
{
int e = b;
ib_vl_arb_table_t f;
if (e)
for (a = 0; a < d; a++)
f.vl_entry[a].vl &= c;
fn1(f);
return IB_SUCCESS;
}
......@@ -629,12 +629,6 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
/* Initialize misalignment to unknown. */
SET_DR_MISALIGNMENT (dr, -1);
/* Strided accesses perform only component accesses, misalignment information
is irrelevant for them. */
if (STMT_VINFO_STRIDED_P (stmt_info)
&& !STMT_VINFO_GROUPED_ACCESS (stmt_info))
return true;
if (tree_fits_shwi_p (DR_STEP (dr)))
misalign = DR_INIT (dr);
aligned_to = DR_ALIGNED_TO (dr);
......@@ -794,18 +788,27 @@ vect_compute_data_refs_alignment (vec_info *vinfo)
unsigned int i;
FOR_EACH_VEC_ELT (datarefs, i, dr)
if (STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr)))
&& !vect_compute_data_ref_alignment (dr))
{
if (is_a <bb_vec_info> (vinfo))
{
/* Mark unsupported statement as unvectorizable. */
STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) = false;
continue;
}
else
return false;
}
{
stmt_vec_info stmt_info = vinfo_for_stmt (DR_STMT (dr));
if (STMT_VINFO_VECTORIZABLE (stmt_info)
&& !vect_compute_data_ref_alignment (dr))
{
/* Strided accesses perform only component accesses, misalignment
information is irrelevant for them. */
if (STMT_VINFO_STRIDED_P (stmt_info)
&& !STMT_VINFO_GROUPED_ACCESS (stmt_info))
continue;
if (is_a <bb_vec_info> (vinfo))
{
/* Mark unsupported statement as unvectorizable. */
STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) = false;
continue;
}
else
return false;
}
}
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment