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

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2021-12-07
             Status|UNCONFIRMED                 |NEW

--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
perdida modref summary is:
  loads:                                                                        
    Every base                                                                  
  stores:                                                                       
    Every base                                                                  
  Side effects                                                                  
  Nondeterministic                                                              
  Global memory read                                                            
  Global memory written                                                         
  parm 0 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 1 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 2 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 3 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 4 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 5 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 6 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 7 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 8 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 9 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape no_indirect_read
  parm 10 flags: no_direct_clobber no_direct_escape no_indirect_escape          
  parm 11 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 12 flags: no_direct_clobber no_direct_escape no_indirect_escape          
  parm 13 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
  parm 14 flags: no_direct_escape no_indirect_escape                            
  parm 15 flags: no_direct_clobber no_direct_escape no_indirect_escape          
  parm 16 flags: no_direct_escape no_indirect_escape                            
  parm 17 flags: no_direct_escape no_indirect_escape                            
  parm 18 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape no_indirect_read
  parm 19 flags: no_direct_clobber no_indirect_clobber no_direct_escape
no_indirect_escape
__attribute__((fn spec (". r r r r r r r r r r w r w r w w w w r r ")))         

So we do can not use it to optimize out the dead parameters. The reason is that
it calls to 
  dt_parm.237.common.filename = &"fatigue2.f90"[1]{lb: 1 sz: 1};                
  dt_parm.237.common.line = 1010;                                               
  MEM <vector(2) integer(kind=4)> [(integer(kind=4) *)&dt_parm.237] = { 128, 6
};
  _gfortran_st_write (&dt_parm.237);                                            
  _gfortran_transfer_character_write (&dt_parm.237, &"discriminant is negative
in perdida, abort."[1]{lb: 1 sz: 1}, 43);
  _gfortran_st_write_done (&dt_parm.237);                                       
  dt_parm.237 ={v} {CLOBBER};                                                   
  _gfortran_stop_string (0B, 0, 0);                                             

and fortran i/o has no useful fnspec on it so we think it access everything.

To optimize out the initializer we could (I guess)
 1) teach ipa-cp to turn the one remaining field to scalar and then we will
detect the descriptor as non-escaping from MAIN and optimize it out
 2) teach PTA summary of ipa-modref to be expressive enough to make PTA to work
this out.

-fipa-pta does not help (but I think it could if it worked well). We get:

  <bb 69> [local count: 109362591]:                                             
  _1895 = (unsigned long) _44;                                                  
  _1894 = _1895 + ivtmp.1050_1911;                                              
  _246 = (real(kind=8) *) _1894;                                                
  parm.326.data = _246;                                                         
  parm.326.offset = -4;                                                         
  parm.326.dtype.elem_len = 8;                                                  
  MEM <unsigned long> [(void *)&parm.326 + 24B] = 3307124817920;                
  parm.326.span = 8;                                                            
  parm.326.dim[0].stride = 1;                                                   
  parm.326.dim[0].lbound = 1;                                                   
  parm.326.dim[0].ubound = 3;                                                   
  parm.326.dim[1].stride = 3;                                                   
  parm.326.dim[1].lbound = 1;                                                   
  parm.326.dim[1].ubound = 3;                                                   
  _1883 = (unsigned long) _33;                                                  
  _1882 = _1883 + ivtmp.1050_1911;                                              
  _247 = (real(kind=8) *) _1882;                                                
  parm.327.data = _247;                                                         
  parm.327.offset = -4;                                                         
  parm.327.dtype.elem_len = 8;                                                  
  MEM <unsigned long> [(void *)&parm.327 + 24B] = 3307124817920;                
  parm.327.span = 8;                                                            
  parm.327.dim[0].stride = 1;                                                   
  parm.327.dim[0].lbound = 1;                                                   
  parm.327.dim[0].ubound = 3;                                                   
  parm.327.dim[1].stride = 3;                                                   
  parm.327.dim[1].lbound = 1;                                                   
  parm.327.dim[1].ubound = 3;                                                   
  _1881 = (unsigned long) _56;                                                  
  _1880 = _1881 + ivtmp.1050_1911;                                              
  _248 = (real(kind=8) *) _1880;                                                
  parm.328.data = _248;                                                         
  parm.328.offset = -4;                                                         
  parm.328.dtype.elem_len = 8;                                                  
  MEM <unsigned long> [(void *)&parm.328 + 24B] = 3307124817920;                
  parm.328.span = 8;                                                            
  parm.328.dim[0].stride = 1;                                                   
  parm.328.dim[0].lbound = 1;                                                   
  parm.328.dim[0].ubound = 3;                                                   
  parm.328.dim[1].stride = 3;                                                   
  parm.328.dim[1].lbound = 1;                                                   
  parm.328.dim[1].ubound = 3;                                                   
  _1879 = (unsigned long) _20;                                                  
  _1878 = _1879 + ivtmp.1050_1911;                                              
  _249 = (real(kind=8) *) _1878;                                                
  parm.329.data = _249;                                                         
  parm.329.offset = -4;                                                         
  parm.329.dtype.elem_len = 8;                                                  
  MEM <unsigned long> [(void *)&parm.329 + 24B] = 3307124817920;                
  parm.329.span = 8;                                                            
  parm.329.dim[0].stride = 1;                                                   
  parm.329.dim[0].lbound = 1;                                                   
  parm.329.dim[0].ubound = 3;                                                   
  parm.329.dim[1].stride = 3;                                                   
  parm.329.dim[1].lbound = 1;                                                   
  parm.329.dim[1].ubound = 3;                                                   
  _1867 = (unsigned long) _67;                                                  
  _1866 = _1867 + ivtmp.1050_1911;                                              
  _250 = (real(kind=8) *) _1866;                                                
  parm.330.data = _250;                                                         
  parm.330.offset = -4;                                                         
  parm.330.dtype.elem_len = 8;                                                  
  MEM <unsigned long> [(void *)&parm.330 + 24B] = 3307124817920;                
  parm.330.span = 8;                                                            
  parm.330.dim[0].stride = 1;                                                   
  parm.330.dim[0].lbound = 1;                                                   
  parm.330.dim[0].ubound = 3;                                                   
  parm.330.dim[1].stride = 3;                                                   
  parm.330.dim[1].lbound = 1;                                                   
  parm.330.dim[1].ubound = 3;                                                   
  _251 = (real(kind=8) *) ivtmp.1049_1915;                                      
  _252 = (real(kind=8) *) ivtmp.1048_1925;                                      
  _253 = (real(kind=8) *) ivtmp.1047_1936;                                      
  perdida.constprop (&dt, &lambda, &mu, &yield_stress, &r_infinity, &b,
&x_infinity, &gamma, &eta, &plastic_strain_threshold, &parm.326, &parm.327,
&parm.328, &parm.329, _253, &parm.330, _252, _251, &failure_threshold,
&crack_closure_parameter);
  parm.326 ={v} {CLOBBER};                                                      
  parm.327 ={v} {CLOBBER};                                                      
  parm.328 ={v} {CLOBBER};                                                      
  parm.329 ={v} {CLOBBER};                                                      
  parm.330 ={v} {CLOBBER};

Reply via email to