------- Comment #6 from victork at gcc dot gnu dot org 2008-04-10 10:36 ------- The problem in reduced testcase is that loop gets vectorized by gcc 4.2 despite a dependency between iterations with distance 1. compute_data_dependences_for_loop () returns "chrec_known" for DDR { ivec(iclass), ivec(iclass-1) }.
Here is part of dump produced by scev in 4.2: (compute_affine_dependence (stmt_a = D.1282_9 = (*ivec_8)[D.1281_7]) (stmt_b = (*ivec_8)[D.1280_6] = D.1284_13) (subscript_dependence_tester (analyze_overlapping_iterations (chrec_a = {0, +, 1}_1) (chrec_b = {1, +, 1}_1) (analyze_siv_subscript (analyze_subscript_affine_affine (overlaps_a = scev_known) (overlaps_b = scev_known) ) ) (overlap_iterations_a = scev_known) (overlap_iterations_b = scev_known) ) (dependence classified: scev_known) ) ) While in gcc 4.3 the scev produces the following dump for same DDR: (compute_affine_dependence (stmt_a = D.970_9 = (*ivec_8(D))[D.969_7]) (stmt_b = (*ivec_8(D))[D.968_6] = D.972_13) (subscript_dependence_tester (analyze_overlapping_iterations (chrec_a = {0, +, 1}_1) (chrec_b = {1, +, 1}_1) (analyze_siv_subscript (analyze_subscript_affine_affine (overlaps_a = [1 + 1 * x_1] ) (overlaps_b = [0 + 1 * x_1] ) ) ) (overlap_iterations_a = [1 + 1 * x_1] ) (overlap_iterations_b = [0 + 1 * x_1] ) ) (analyze_overlapping_iterations (chrec_a = 0B) (chrec_b = 0B) (analyze_ziv_subscript ) (overlap_iterations_a = [0] ) (overlap_iterations_b = [0] ) ) (build_classic_dist_vector dist_vector = ( 1 ) ) ) ) Sebastian, can you take a look? Thanks. -- victork at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |spop at gcc dot gnu dot org AssignedTo|victork at gcc dot gnu dot |spop at gcc dot gnu dot org |org | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34006