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).