This happens in gcc.dg/vect/vect-42.c: On the alias branch we can't tell that a write through a restrict pointer (which is a function argument) does not overlap with reads from local arrays. As a result we vectorize using loop-versioning controled by a run-time aliasing test. This in turn forces us to handle misalignment using loop-versioning (rather than peeling, cause right now we don't support peeling combined with versioning, and these are the only ways we currently support misaligned stores). Without the aliasing problem, the loop is vectorized using peeling to align the store. > " > === vect_analyze_dependences === > vect-42.c:36: note: versioning for alias required: can't determine > dependence between pb[i_59] and *D.2074_6 > vect-42.c:36: note: mark for run-time aliasing test between pb[i_59] and > *D.2074_6 > vect-42.c:36: note: versioning for alias required: can't determine > dependence between pc[i_59] and *D.2074_6 > vect-42.c:36: note: mark for run-time aliasing test between pc[i_59] and > *D.2074_6 > ... > vect-42.c:36: note: === vect_enhance_data_refs_alignment === > vect-42.c:36: note: Unknown misalignment, is_packed = 0 > vect-42.c:36: note: Alignment of access forced using versioning. > vect-42.c:36: note: Versioning for alignment will be applied. > "
-- Summary: [alias-improvements-branch] can't alias a restrict pointer write and a local array read Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dorit at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37695