https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70103
Bug ID: 70103 Summary: gcc reports bad dependence and bails out of vectorization for one of the bwaves loops. Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: vekumar at gcc dot gnu.org Target Milestone: --- flux_lam.f:68:0: note: dependence distance = 0. flux_lam.f:68:0: note: dependence distance == 0 between MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_244] and MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_244] flux_lam.f:68:0: note: READ_WRITE dependence in interleaving. flux_lam.f:68:0: note: bad data dependence. Looking at vector dumps, if we have CSEd the load, then there is no dependency issue here. MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_244] = _272 _323 = MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_244]; ---snip--- MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_244] = _272; # VUSE <.MEM_273> _274 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_219]; # VUSE <.MEM_273> _275 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_224]; _276 = _274 - _275; _277 = ((_276)); t1_278 = _277 / dy2_68; _279 = _195 + 3; # VUSE <.MEM_273> _280 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_252]; # VUSE <.MEM_273> _281 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_254]; _282 = _280 - _281; _283 = ((_282)); _284 = _283 / dy2_68; _285 = t1_278 + _284; _286 = ((_285)); _287 = _286 * 5.0e-1; # VUSE <.MEM_273> _288 = MEM[(real(kind=8)D.18[0:D.3601] *)v.107_60][_206]; # VUSE <.MEM_273> _289 = MEM[(real(kind=8)D.18[0:D.3601] *)v.107_60][_203]; _290 = _288 - _289; _291 = ((_290)); _292 = _291 / _64; _293 = _287 + _292; _294 = ((_293)); _295 = t0_210 * _294; # .MEM_296 = VDEF <.MEM_273> MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_279] = _295; # VUSE <.MEM_296> _297 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_233]; # VUSE <.MEM_296> _298 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_239]; _299 = _297 - _298; _300 = ((_299)); t2_301 = _300 / dz2_71; _302 = _195 + 4; # VUSE <.MEM_296> _303 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_261]; # VUSE <.MEM_296> _304 = MEM[(real(kind=8)D.18[0:D.3605] *)u.105_58][_263]; _305 = _303 - _304; _306 = ((_305)); _307 = _306 / dz2_71; _308 = t2_301 + _307; _309 = ((_308)); _310 = _309 * 5.0e-1; # VUSE <.MEM_296> _311 = MEM[(real(kind=8)D.18[0:D.3597] *)w.109_62][_206]; # VUSE <.MEM_296> _312 = MEM[(real(kind=8)D.18[0:D.3597] *)w.109_62][_203]; _313 = _311 - _312; _314 = ((_313)); _315 = _314 / _64; _316 = _310 + _315; _317 = ((_316)); _318 = t0_210 * _317; # .MEM_319 = VDEF <.MEM_296> MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_302] = _318; _320 = _195 + 5; _321 = _246 + _247; _322 = ((_321)); # VUSE <.MEM_319> _323 = MEM[(real(kind=8)D.18[0:D.3627] *)ev_197(D) clique 1 base 12][_244]; ---snip---