https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106353
Bug ID: 106353
Summary: [suboptimal] Why is a 3D array initialized, use case 2
two-layer loop?
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: zhongyunde at huawei dot com
Target Milestone: ---
We can see that, the icc use a two-layer loop to initialize a 3D array, and the
inner loop initialize the low 2D of the array (48552 = 1156 * 42);
while the gfortran use 2 two-layer loop, it is obviously not efficient,
although I don't understand this logic.
test case, see detail in https://godbolt.org/z/nqKansKan
```
program small
implicit none
integer, parameter :: ADM_gall = 1156
integer, parameter :: ADM_kall = 42
integer, parameter :: ADM_lall = 2
integer, parameter :: ADM_gall_pl = 6
integer, parameter :: ADM_lall_pl = 2
real(8) :: rhogvx (ADM_gall, ADM_kall,ADM_lall ) ! rho*Vx ( gam2 X
G^{1/2} )
real(8) :: rhogvx_pl(ADM_gall_pl,ADM_kall,ADM_lall_pl)
rhogvx=2
!rhogvx_pl=2
call src_flux_convergence(rhogvx, rhogvx_pl)
endprogram small
```