------- 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

Reply via email to