http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59984
--- Comment #4 from Igor Zamyatin <izamyatin at gmail dot com> --- vect details show that v1.0_14 = v1 and v2.1_15 = v2 are treated as invariants: test.c:24:14: note: ------>vectorizing statement: v1.0_14 = v1; test.c:24:14: note: transform statement. test.c:24:14: note: transform load. ncopies = 1 test.c:24:14: note: create vector_type-pointer variable to type: vector(4) int vectorizing a pointer ref: v1 test.c:24:14: note: created vectp_v1.11_40 test.c:24:14: note: add new stmt: vect_v1.12_37 = MEM[(int *)vectp_v1.10_39]; test.c:24:14: note: hoisting out of the vectorized loop: v1.0_14 = v1; test.c:24:14: note: created new init_stmt: vect_cst_.13_7 = {v1.0_8, v1.0_8, v1.0_8, v1.0_8}; test.c:24:14: note: ------>vectorizing statement: v2.1_15 = v2; test.c:24:14: note: transform statement. test.c:24:14: note: transform load. ncopies = 1 test.c:24:14: note: create vector_type-pointer variable to type: vector(4) int vectorizing a pointer ref: v2 test.c:24:14: note: created vectp_v2.15_1 test.c:24:14: note: add new stmt: vect_v2.16_60 = MEM[(int *)vectp_v2.14_58]; test.c:24:14: note: hoisting out of the vectorized loop: v2.1_15 = v2; test.c:24:14: note: created new init_stmt: vect_cst_.17_62 = {v2.1_61, v2.1_61, v2.1_61, v2.1_61}; Step for both loads determined as 0. Seems support for such case should be explicitly added