Hi,
I went through some statistics on firefox build (it is a source combining many 
coding styles).
I was basically curious where we do devirtualization.  The result is:

Before inline (i.e. important devirtualization)
    624 ssa-pre devirt 0
        this is interaprocedural devirutalization happening during early FRE by 
propagating
        constant accesses into vtables entries. (i.e. not type based at all)

     10 ssa-pre devirt2 0
        this is type based intraprocedural analysis during early optimizations
    177 ipa-prop devirt
        devirtualization in ipa-cp
    243 ipa-cp inline devirt
        this is devirtualization happening at IPA stage during inlining

After inline (i.e. devirtualization where we missed the chance to do something 
useful)
     82 gimple-fold devirt 1
        this is the gimple-fold function in question (it also run pre-inline 
but apparently
        always fail.  I will try the proposed patch and sed updated stats 
tomorrow)

     27 ipa-prop intra devirt 1
        intraprocedural type based analysis
   1569 ssa-pre devirt 1
        this is interaprocedural devirutalization happening during late FRE 
(not type based)

So overall type based analyssi accounts 430 devirtualizations pre-inline and 
109 post inline.
Low level propagation of vtable accesses gets 624 pre-inline and 1569 post 
inline.

Obviously the post inline numbers shows that we miss majority of interesting 
cases.
I hope we can noticeably improve this.

I am re-building with the proposed change now.

Honza

Reply via email to