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.
