PR tree-optimization/53636
* tree-vect-slp.c (vect_slp_analyze_bb_1): Delay call to
vect_verify_datarefs_alignment until after statements have
been marked as relevant/irrelevant.
* tree-vect-data-refs.c (vect_verify_datarefs_alignment):
Skip irrelevant statements.
(vect_enhance_data_refs_alignment): Use STMT_VINFO_RELEVANT_P
instead of STMT_VINFO_RELEVANT.
(vect_get_data_access_cost): Do not check for supportable
alignment before calling vect_get_load_cost/vect_get_store_cost.
* tree-vect-stmts.c (vect_get_store_cost): Do not abort when
handling unsupported alignment.
(vect_get_load_cost): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@188979
138bc75d-0d04-0410-961f-
82ee72b054a4
+2012-06-26 Ulrich Weigand <ulrich.weigand@linaro.org>
+
+ PR tree-optimization/53729
+ PR tree-optimization/53636
+ * tree-vect-slp.c (vect_slp_analyze_bb_1): Delay call to
+ vect_verify_datarefs_alignment until after statements have
+ been marked as relevant/irrelevant.
+ * tree-vect-data-refs.c (vect_verify_datarefs_alignment):
+ Skip irrelevant statements.
+ (vect_enhance_data_refs_alignment): Use STMT_VINFO_RELEVANT_P
+ instead of STMT_VINFO_RELEVANT.
+ (vect_get_data_access_cost): Do not check for supportable
+ alignment before calling vect_get_load_cost/vect_get_store_cost.
+ * tree-vect-stmts.c (vect_get_store_cost): Do not abort when
+ handling unsupported alignment.
+ (vect_get_load_cost): Likewise.
+
2012-06-25 Steven Bosscher <steven@gcc.gnu.org>
* config/rl78/rl78.h: Do not undefine DONT_USE_BUILTIN_SETJMP.
gimple stmt = DR_STMT (dr);
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
+ if (!STMT_VINFO_RELEVANT_P (stmt_info))
+ continue;
+
/* For interleaving, only the alignment of the first access matters.
Skip statements marked as not vectorizable. */
if ((STMT_VINFO_GROUPED_ACCESS (stmt_info)
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
int ncopies = vf / nunits;
- bool supportable_dr_alignment = vect_supportable_dr_alignment (dr, true);
- if (!supportable_dr_alignment)
- *inside_cost = VECT_MAX_COST;
+ if (DR_IS_READ (dr))
+ vect_get_load_cost (dr, ncopies, true, inside_cost, outside_cost);
else
- {
- if (DR_IS_READ (dr))
- vect_get_load_cost (dr, ncopies, true, inside_cost, outside_cost);
- else
- vect_get_store_cost (dr, ncopies, inside_cost);
- }
+ vect_get_store_cost (dr, ncopies, inside_cost);
if (vect_print_dump_info (REPORT_COST))
fprintf (vect_dump, "vect_get_data_access_cost: inside_cost = %d, "
stmt = DR_STMT (dr);
stmt_info = vinfo_for_stmt (stmt);
- if (!STMT_VINFO_RELEVANT (stmt_info))
+ if (!STMT_VINFO_RELEVANT_P (stmt_info))
continue;
/* For interleaving, only the alignment of the first access
return NULL;
}
- if (!vect_verify_datarefs_alignment (NULL, bb_vinfo))
- {
- if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
- fprintf (vect_dump, "not vectorized: unsupported alignment in basic "
- "block.\n");
-
- destroy_bb_vec_info (bb_vinfo);
- return NULL;
- }
-
/* Check the SLP opportunities in the basic block, analyze and build SLP
trees. */
if (!vect_analyze_slp (NULL, bb_vinfo))
vect_mark_slp_stmts_relevant (SLP_INSTANCE_TREE (instance));
}
+ if (!vect_verify_datarefs_alignment (NULL, bb_vinfo))
+ {
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
+ fprintf (vect_dump, "not vectorized: unsupported alignment in basic "
+ "block.\n");
+
+ destroy_bb_vec_info (bb_vinfo);
+ return NULL;
+ }
+
if (!vect_slp_analyze_operations (bb_vinfo))
{
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
break;
}
+ case dr_unaligned_unsupported:
+ {
+ *inside_cost = VECT_MAX_COST;
+
+ if (vect_print_dump_info (REPORT_COST))
+ fprintf (vect_dump, "vect_model_store_cost: unsupported access.");
+
+ break;
+ }
+
default:
gcc_unreachable ();
}
break;
}
+ case dr_unaligned_unsupported:
+ {
+ *inside_cost = VECT_MAX_COST;
+
+ if (vect_print_dump_info (REPORT_COST))
+ fprintf (vect_dump, "vect_model_load_cost: unsupported access.");
+
+ break;
+ }
+
default:
gcc_unreachable ();
}