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