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

Reply via email to