https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66873
--- Comment #2 from vries at gcc dot gnu.org --- Another obvious difference is that the fortran 2-dimensional array access is rewritten into a single dimension array access: ... <bb 3>: # ii_7 = PHI <0(2), ii_16(7)> pretmp_52 = (integer(kind=8)) ii_7; pretmp_53 = pretmp_52 * 500; <bb 4>: # jj_10 = PHI <0(3), jj_15(5)> _11 = (integer(kind=8)) jj_10; _12 = _11 + pretmp_53; _13 = ii_7 + jj_10; _14 = _13 + 3; x[_12] = _14; jj_15 = jj_10 + 1; if (jj_10 == 499) goto <bb 6>; else goto <bb 5>; ... While the outer-1.c 2-dimensional array access is still 2-dimensional: ... <bb 9>: # i_34 = PHI <0(3), i_15(8)> goto <bb 5>; <bb 5>: # j_36 = PHI <0(9), j_14(4)> _11 = i_34 + j_36; _12 = _11 + 3; x[i_34][j_36] = _12; j_14 = j_36 + 1; if (N_9(D) > j_14) goto <bb 4>; else goto <bb 6>; ... Which results in different access functions, and the dependence analysis succeeds: ... (Data Dep: #(Data Ref: # bb: 5 # stmt: x[i_34][j_36] = _12; # ref: x[i_34][j_36]; # base_object: x; # Access function 0: {0, +, 1}_4 # Access function 1: {0, +, 1}_1 #) #(Data Ref: # bb: 5 # stmt: x[i_34][j_36] = _12; # ref: x[i_34][j_36]; # base_object: x; # Access function 0: {0, +, 1}_4 # Access function 1: {0, +, 1}_1 #) access_fn_A: {0, +, 1}_4 access_fn_B: {0, +, 1}_4 (subscript iterations_that_access_an_element_twice_in_A: [0] last_conflict: scev_not_known iterations_that_access_an_element_twice_in_B: [0] last_conflict: scev_not_known (Subscript distance: 0 )) access_fn_A: {0, +, 1}_1 access_fn_B: {0, +, 1}_1 (subscript iterations_that_access_an_element_twice_in_A: [0] last_conflict: scev_not_known iterations_that_access_an_element_twice_in_B: [0] last_conflict: scev_not_known (Subscript distance: 0 )) inner loop index: 0 loop nest: (1 4 ) distance_vector: 0 0 direction_vector: = = ) SUCCESS: may be parallelized ...