> Hi, > this patch makes it possible for non-LTO alias oracle to TBAA disambiguate > pointer types. It makes void * conflicting with all of them and does not put > it > to alias set 0. It also preserves the property that qualifiers of pointer-to > type should not matter to determine the alias set and that pointer to array is > same as pointer to array element. Finally it makes pointer void * to be > equivalent to void ** (and more *) and to types with structural equality only. > > I think those are all globbing rules we discussed for the non-LTO patch. > > It does two things. First is kind of "canonicalization" where for a given > pointer > it looks for non-pointer pointed-to type and then rebuilds is without > qualifiers. > This is fast, because build_pointer_type will reuse existing types. > > It makes void * to conflict with everyting by making its alias set to be > subset > of alias set of any other pointer. This means that writes to void * conflict > with writes to any other pointer without really need to glob all the pointers > to one equivalence class. > > This patch makes quite some difference on C++. For example on deal II the > TBAA > stats reports 4344358 disambiguations and 7008576 queries, while with the > patch > we get 5368737 and 5687399 queries (I did not chose deal II for reason, it is > just random C++ file) Actually there is oversight in my patch - the number of queries is really number of non-disambiguations. I will fix that as obvious tomorrow. In both cases the number of querries is about 11M. The increase in number of disambiguations is 23% (earlier patch did over 30% for Firefox)
Honza