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

--- Comment #11 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
In WPA we seem to see the store to vector:
Propagated modref for push_without_duplicates/1089577                           
  loads:                                                                        
    Limits: 32 bases, 16 refs                                                   
    Every base                                                                  
  stores:                                                                       
    Limits: 32 bases, 16 refs                                                   
      Base 0:struct vec (alias set 544)                                         
        Ref 0:unsigned int (alias set 3)                                        
          Every access                                                          
      Base 1:union tree_node * (alias set 21)                                   
        Ref 0:union tree_node * (alias set 21)                                  
          Every access                                                          


Propagated modref for find_placeholder_in_expr/1089578                          
  loads:                                                                        
    Limits: 32 bases, 16 refs                                                   
    Every base                                                                  
  stores:                                                                       
    Limits: 32 bases, 16 refs                                                   
      Base 0:struct vec (alias set 544)                                         
        Ref 0:unsigned int (alias set 3)                                        
          Every access                                                          
      Base 1:union tree_node * (alias set 21)                                   
        Ref 0:union tree_node * (alias set 21)                                  
          Every access                                                          

I guess base 0, ref 0 is the length adjustment (m_num is unsigned int).
What seems interesting is that find_placeholder_in_expr lives in other
partition then variable_size.
It is read as:

Read modref for find_placeholder_in_expr/1089578                                
  loads:                                                                        
    Limits: 32 bases, 16 refs                                                   
    Every base                                                                  
  stores:                                                                       
    Limits: 32 bases, 16 refs                                                   
      Base 0: alias set 17                                                      
        Ref 0: alias set 3                                                      
          Every access                                                          
      Base 1: alias set 16                                                      
        Ref 0: alias set 16                                                     
          Every access                                                          

so alias set 17 and 3 are vec and unsigned_int.
However in fre3 we get:

ipa-modref: call stmt find_placeholder_in_expr (size_8(D), &self_refs);         
ipa-modref: call to find_placeholder_in_expr/1089578 does not clobber ref:
self_refs.m_vec alias sets: 11->12

This seems odd: alias set 11 and 12 seems quite different form 17 and 3.
Moreover 3 is usual alias set for a builtin type (unsigned int).

Reply via email to