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.