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

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tkoenig at gcc dot gnu.org
          Component|fortran                     |middle-end
   Target Milestone|---                         |7.3

--- Comment #3 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Some time reports:

$ gfortran -ffrontend-optimize -ftime-report pr82567.f90

Execution times (seconds)
 phase parsing           :   0.18 ( 5%) usr   0.01 ( 8%) sys   0.19 ( 5%) wall 
  5542 kB (11%) ggc
 phase opt and generate  :   3.55 (95%) usr   0.10 (83%) sys   3.66 (95%) wall 
 43204 kB (88%) ggc


$ gfortran -O -ftime-report pr82567.f90

Execution times (seconds)
 phase parsing           :   0.20 ( 1%) usr   0.01 (11%) sys   0.21 ( 1%) wall 
  5543 kB (15%) ggc
 phase opt and generate  :  26.96 (99%) usr   0.08 (89%) sys  27.07 (99%) wall 
 30881 kB (84%) ggc

The problem seems to be that we generate a load of statements like

          (*(real(kind=4)[10000] * restrict) atmp.1.data)[0] = NON_LVALUE_EXPR
<__var_1_constr>;
          (*(real(kind=4)[10000] * restrict) atmp.1.data)[1] = __var_1_constr *
2.0e+0;
          (*(real(kind=4)[10000] * restrict) atmp.1.data)[2] = __var_1_constr *
3.0e+0;
          (*(real(kind=4)[10000] * restrict) atmp.1.data)[3] = __var_1_constr *
4.0e+0;

for the test case as written below.

For the other versions, we actually do not convert the array descriptor.

Reply via email to