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

Roger Sayle <roger at nextmovesoftware dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |14.1.0
                 CC|                            |roger at nextmovesoftware dot 
com
         Resolution|---                         |FIXED
      Known to fail|                            |13.4.0
             Status|NEW                         |RESOLVED

--- Comment #2 from Roger Sayle <roger at nextmovesoftware dot com> ---
It looks like the loop is now is being eliminated (completely unrolled) with
mainline gfortran.  According to godbolt.org this was fixed/resolved between
GCC 13.4 and GCC 14.1.

The -fdump-tree-optimized with -Os now shows a single basic block:

void MAIN__ ()
{
  struct __st_parameter_dt dt_parm.0;
  integer(kind=4) i;

  <bb 2> [local count: 118111600]:
  i = 1;
  dt_parm.0.common.filename = &"pr80980.f90"[1]{lb: 1 sz: 1};
  dt_parm.0.common.line = 4;
  MEM <unsigned long> [(integer(kind=4) *)&dt_parm.0] = 25769803904;
  _gfortran_st_write (&dt_parm.0);
  _gfortran_transfer_integer_write (&dt_parm.0, &i, 4);
  _gfortran_st_write_done (&dt_parm.0);
  dt_parm.0 ={v} {CLOBBER(eos)};
  i ={v} {CLOBBER(eos)};
  return;
}


With current mainline I see (on x86_64):
size o1.o = 264 bytes
size os.o = 244 bytes
size oz.o = 240 bytes
So -Os is smaller (no larger) than -O1, as expected.
Likewise, -Oz is smaller (no larger) than -Os, as expected.

Reply via email to