> On 11/13/20 6:50 PM, Jan Hubicka wrote:
> > Bootstrapped/regtested x86_64-linux. I plan to commit it on monday if there 
> > are
> > no complains.
> 
> Hello Honza.
> 
> Thank you very much for the patch set.
> It's a nice improvement and it will eventually fix the WPA slowness caused by 
> IPA ICF.
> 
> I made some measurements for master before a first patch and this patch (3/4) 
> on godot
> game engine:
> 
> BEFORE:
> 
> Equal symbols: 15690
> Totally needed symbols: 17913, fraction of loaded symbols: 39.05%
> 
> 2156989   false returned: '' in equals_private at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:879
> 1099887   false returned: 'operand_equal_p failed' in compare_operand at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:307
> 1048605   false returned: 'types are not compatible' in compatible_types_p at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:210
> 1047679   false returned: 'GIMPLE assignment operands are different' in 
> compare_gimple_assign at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:632
> 1047517   false returned: 'GIMPLE NOP LHS type mismatch' in 
> compare_gimple_assign at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:628
>   57659   false returned: 'call function types are not compatible' in 
> compare_gimple_call at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:573
>   52088   false returned: 'PHI node comparison returns false' in 
> equals_private at /home/marxin/Programming/gcc2/gcc/ipa-icf.c:914
>   52088   false returned: '' in compare_phi_node at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:1552
>   13565   false returned: 'decl_or_type flags are different' in equals_wpa at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:567
>    9919   false returned: 'result types are different' in equals_wpa at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:616
> 
> Time variable                                   usr           sys          
> wall           GGC
>  ipa icf                            :   4.31 (  7%)   0.06 (  2%)   4.38 (  
> 7%)  6008k (  0%)
>  TOTAL                              :  57.57          3.49         61.11      
>    4830M
> 
> AFTER:
> 
> Equal symbols: 17019
> Totally needed symbols: 19875, fraction of loaded symbols: 70.88%
> 
>  377327   false returned: '' in equals_private at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:886
>  213086   false returned: 'operand_equal_p failed' in compare_operand at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:356
>  212179   false returned: 'compare_ao_refs failed (access path difference)' 
> in compare_operand at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:345
>  159947   false returned: '' in compare_gimple_call at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:607
>  147098   false returned: 'GIMPLE assignment operands are different' in 
> compare_gimple_assign at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:699
>   66123   false returned: 'GIMPLE call operands are different' in 
> compare_gimple_call at /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:656
>   52088   false returned: 'PHI node comparison returns false' in 
> equals_private at /home/marxin/Programming/gcc2/gcc/ipa-icf.c:921
>   52088   false returned: '' in compare_phi_node at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:1580
>   12643   false returned: 'decl_or_type flags are different' in equals_wpa at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf.c:572
>    6318   false returned: 'different tree types' in compatible_types_p at 
> /home/marxin/Programming/gcc2/gcc/ipa-icf-gimple.c:206
> 
> Time variable                                   usr           sys          
> wall           GGC
>  ipa icf                            :   3.40 (  6%)   0.09 (  3%)   3.49 (  
> 6%)    27M (  1%)
>  TOTAL                              :  56.60          2.94         59.58      
>    4478M
> 
> and I'm also sending usage-wrapper graphs.

Thanks for checking!  I also uploaded some data to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92535

Note that you want to also note gimple in timevar since that is also
mostly ICF related.

It seems that ICF performance is highly sensitive to application: it now
behaves very well on cc1plus, seems to do quite well on godot and still
does very bad on Firefox (we still have regression there compared to gcc
9 that itself did relatively bad).

I noticed one stupid bug in operand_equal_p on coponent_refs (I am just
testing a fix) and there are quite few important things that we compare
but do not hash. Those should be easy to fix. I plan to iterate through
this on firefox.

It would be great to get chromium data.  Did you suceeded building it
recently?  I now got last year firefox building and working and I am
looking into updating it to current firefox tree that will probaby keep
me occupied for some time.

Honza
> 
> Martin


Reply via email to