https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65546

--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
It's not clear to me if this should be considered a regression.  The test
passes with 4.9.2, but neither it nor 5.0 vectorizes the loop.  The difference
and the cause of the test failure appears to be in that 4.9.2 applies loop
peeling to align the access but in the end also decides not to vectorize
because doing so would not match the profitability criteria, while 5.0 doesn't
get that far because it doesn't peel the loop so it gives up earlier (and for a
different reason).  Here's the relevant portion of the .vect dump with 4.9.2:

costmodel-vect-31a.c:27:3: note: === vect_analyze_data_refs_alignment ===
costmodel-vect-31a.c:27:3: note: vect_compute_data_ref_alignment:
costmodel-vect-31a.c:27:3: note: force alignment of tmp.b[i_15]
costmodel-vect-31a.c:27:3: note: misalign = 1 bytes of ref tmp.b[i_15]
costmodel-vect-31a.c:27:3: note: === vect_prune_runtime_alias_test_list ===
costmodel-vect-31a.c:27:3: note: === vect_enhance_data_refs_alignment ===
costmodel-vect-31a.c:27:3: note: data size =1. misalignment = 1.
costmodel-vect-31a.c:27:3: note: vect_can_advance_ivs_p:
costmodel-vect-31a.c:27:3: note: Analyze phi: i_15 = PHI <i_6(4), 0(2)>

costmodel-vect-31a.c:27:3: note: Analyze phi: .MEM_17 = PHI <.MEM_5(4),
.MEM_4(D)(2)>

costmodel-vect-31a.c:27:3: note: virtual phi. skip.
costmodel-vect-31a.c:27:3: note: Analyze phi: ivtmp_1 = PHI <ivtmp_12(4),
16(2)>

costmodel-vect-31a.c:27:3: note: vect_model_store_cost: aligned.
costmodel-vect-31a.c:27:3: note: vect_get_data_access_cost: inside_cost = 1,
outside_cost = 0.
costmodel-vect-31a.c:27:3: note: Try peeling by 15
costmodel-vect-31a.c:27:3: note: Alignment of access forced using peeling.
costmodel-vect-31a.c:27:3: note: Peeling for alignment will be applied.

Reply via email to