https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121664

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> ---
(In reply to Paul-Antoine Arras from comment #1)
> The first pass exhibiting a difference in the dumps is lim2

Namely, with -fstrict-aliasing, there is at the beginning of
the parallel region (MAIN__._omp_fn.1):

  _76 = *.omp_data_i_28(D).a1;
  _77 = *_76.data;
  _78 = *_76.offset;
  _80 = *_76.dim[2].stride;
  _84 = *_76.dim[1].stride;
  _90 = *.omp_data_i_28(D).a2;
  _91 = *_90.data;
  _92 = *_90.offset;
  _93 = *_90.dim[2].stride;
  _96 = *_90.dim[1].stride;

While with -fno-strict-aliasing, the access to data/offset/stride
moves down in that function to be then inside the loop - and only
the _.. = *.omp_data_i_... assignment remains at the top of
the parallel region.

Inside the parallel region, the only memory access is of the type
  MEM <real(kind=8)[0:]> [(real(kind=8)[0:] *)_77][_88] = 0.0
with _77 as above and _88 is depends on (i,j,k) and the array's stride +
offset.

Reply via email to