re PR tree-optimization/68306 (ICE: in vectorizable_store, at tree-vect-stmts.c:5651)

2015-11-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/68306
	* tree-vect-data-refs.c (verify_data_ref_alignment): Remove
	relevant and vectorizable checks here.
	(vect_verify_datarefs_alignment): Add relevant check here.

	* gcc.dg/pr68306.c: New testcase.

From-SVN: r230260
This commit is contained in:
Richard Biener 2015-11-12 14:02:44 +00:00 committed by Richard Biener
parent c3a6648b1c
commit 31271e9129
4 changed files with 34 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2015-11-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/68306
* tree-vect-data-refs.c (verify_data_ref_alignment): Remove
relevant and vectorizable checks here.
(vect_verify_datarefs_alignment): Add relevant check here.
2015-11-12 Nathan Sidwell <nathan@codesourcery.com>
gcc/

View File

@ -1,3 +1,8 @@
2015-11-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/68306
* gcc.dg/pr68306.c: New testcase.
2015-11-12 Ville Voutilainen <ville.voutilainen@gmail.com>
Implement D0013R2, logical type traits.

View File

@ -0,0 +1,10 @@
/* { dg-do compile } */
/* { dg-options "-O3" } */
enum powerpc_pmc_type { PPC_PMC_IBM };
struct {
unsigned num_pmcs;
enum powerpc_pmc_type pmc_type;
} a;
enum powerpc_pmc_type b;
void fn1() { a.num_pmcs = a.pmc_type = b; }

View File

@ -909,14 +909,9 @@ verify_data_ref_alignment (data_reference_p dr)
gimple *stmt = DR_STMT (dr);
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
if (!STMT_VINFO_RELEVANT_P (stmt_info))
return true;
/* For interleaving, only the alignment of the first access matters.
Skip statements marked as not vectorizable. */
if ((STMT_VINFO_GROUPED_ACCESS (stmt_info)
&& GROUP_FIRST_ELEMENT (stmt_info) != stmt)
|| !STMT_VINFO_VECTORIZABLE (stmt_info))
/* For interleaving, only the alignment of the first access matters. */
if (STMT_VINFO_GROUPED_ACCESS (stmt_info)
&& GROUP_FIRST_ELEMENT (stmt_info) != stmt)
return true;
/* Strided accesses perform only component accesses, alignment is
@ -965,8 +960,15 @@ vect_verify_datarefs_alignment (loop_vec_info vinfo)
unsigned int i;
FOR_EACH_VEC_ELT (datarefs, i, dr)
if (! verify_data_ref_alignment (dr))
return false;
{
gimple *stmt = DR_STMT (dr);
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
if (!STMT_VINFO_RELEVANT_P (stmt_info))
continue;
if (! verify_data_ref_alignment (dr))
return false;
}
return true;
}