triggered by some discussion in PR41113 SUBROUTINE S(a,n) INTEGER :: n REAL :: a(n,n,n,n) a(:,:,:,:)=0.0 END SUBROUTINE
generates a four-fold look to do the zeroing, while it would be more efficient to zero n**4 elements starting from a(1,1,1,1). I.e. since a is contiguous in memory a memset or similar can be done (properly guarded for zero-sized arrays). Note that the case with compile time constant bounds is already captured i.e. .LFB2: movl $40000, %edx xorl %esi, %esi jmp memset .LFE2: is generated for SUBROUTINE S(a) REAL :: a(10,10,10,10) a(:,:,:,:)=0.0 END SUBROUTINE -- Summary: inefficient zeroing of an array Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jv244 at cam dot ac dot uk http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41137