http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48172
--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-03-18 09:48:39 UTC --- (compute_affine_dependence (stmt_a = D.3677_12 = array[D.3676_11]; ) (stmt_b = array[D.3675_10] = D.3680_16; ) (subscript_dependence_tester (analyze_overlapping_iterations (chrec_a = {0, +, 2}_2) (chrec_b = {514, +, 1}_2) (analyze_siv_subscript (analyze_subscript_affine_affine (overlaps_a = [257 + 1 * x_1] ) (overlaps_b = [0 + 2 * x_1] ) ) ) (overlap_iterations_a = [257 + 1 * x_1] ) (overlap_iterations_b = [0 + 2 * x_1] ) ) (Dependence relation cannot be represented by distance vector.) ) (compute_affine_dependence (stmt_a = D.3679_15 = array[D.3678_14]; ) (stmt_b = array[D.3675_10] = D.3680_16; ) (subscript_dependence_tester (analyze_overlapping_iterations (chrec_a = {1, +, 2}_2) (chrec_b = {514, +, 1}_2) (analyze_siv_subscript (analyze_subscript_affine_affine (overlaps_a = [257 + 1 * x_1] ) (overlaps_b = [1 + 2 * x_1] ) ) ) (overlap_iterations_a = [257 + 1 * x_1] ) (overlap_iterations_b = [1 + 2 * x_1] (overlap_iterations_b = [1 + 2 * x_1] ) ) (Dependence relation cannot be represented by distance vector.) ) ) ... t.c:23: note: versioning for alias required: bad dist vector for array[D.3676_11] and array[D.3675_10] t.c:23: note: mark for run-time aliasing test between array[D.3676_11] and array[D.3675_10] t.c:23: note: versioning for alias required: bad dist vector for array[D.3678_14] and array[D.3675_10] t.c:23: note: mark for run-time aliasing test between array[D.3678_14] and array[D.3675_10] and the alias check looks like vect_parray.14_32 = &array; vect_parray.17_31 = &array[514]; D.3707_29 = vect_parray.14_32 + 32; D.3708_28 = D.3707_29 < vect_parray.17_31; D.3709_63 = vect_parray.17_31 + 16; D.3710_64 = D.3709_63 < vect_parray.14_32; D.3711_65 = D.3708_28 || D.3710_64; D.3713_78 = !D.3711_65; if (D.3713_78 != 0) goto <bb 12>; else goto <bb 9>; which doesn't at all test something sensible. Shortened non-runtime testcase: #define ASIZE 1028 #define HALF (ASIZE/2) unsigned int array[ASIZE]; void foo(void) { int i; for (i = 0; i < HALF-1; i++) array[HALF+i] = array[2*i] + array[2*i + 1]; }